diff --git a/signet-dashboard/public/utxo-list.html b/signet-dashboard/public/utxo-list.html index eeae1f4..a864b05 100644 --- a/signet-dashboard/public/utxo-list.html +++ b/signet-dashboard/public/utxo-list.html @@ -303,7 +303,8 @@

Montant total : -

Dernière mise à jour : -

- + + 📥 Télécharger le fichier texte @@ -455,7 +456,6 @@ if (isAnchors) { tableHTML += ` - Numéro de bloc Montant (✅)${getSortArrow('amount', state.sortColumn, state.sortDirection)} Date Confirmé${getSortArrow('confirmed', state.sortColumn, state.sortDirection)} @@ -504,7 +504,6 @@ tableHTML += `${utxo.vout}`; if (isAnchors) { - tableHTML += `${utxo.blockHeight !== null && utxo.blockHeight !== undefined ? utxo.blockHeight.toLocaleString('fr-FR') : '-'}`; tableHTML += `${amountSats.toLocaleString('fr-FR')} ✅`; // Date pour les ancrages if (utxo.blockTime) { @@ -610,15 +609,91 @@ } } - async function loadUtxoList() { + async function loadUtxoListFromRPC() { const contentDiv = document.getElementById('content'); - const refreshButton = document.querySelector('.refresh-button'); + const buttons = document.querySelectorAll('.refresh-button'); const progressSection = document.getElementById('progress-section'); const progressBarFill = document.getElementById('progress-bar-fill'); const progressPercent = document.getElementById('progress-percent'); const progressStats = document.getElementById('progress-stats'); - refreshButton.disabled = true; + buttons.forEach(btn => btn.disabled = true); + contentDiv.innerHTML = '
Chargement depuis RPC (peut prendre plusieurs minutes)...
'; + utxosFromFile = false; + progressSection.style.display = 'block'; + progressBarFill.style.width = '0%'; + progressPercent.textContent = '0 %'; + progressStats.textContent = 'Chargement depuis RPC...'; + + loadSmallUtxosInfo(); + + try { + const response = await fetch(`${API_BASE_URL}/api/utxo/list`); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + progressBarFill.style.width = '100%'; + progressPercent.textContent = '100 %'; + progressStats.textContent = 'Données chargées depuis RPC'; + + const blocRewards = data.blocRewards || []; + const anchors = data.anchors || []; + const changes = data.changes || []; + const fees = data.fees || []; + const minAnchorAmount = 2000 / 100000000; + + const total = blocRewards.length + anchors.length + changes.length + fees.length; + const availableForAnchor = anchors.filter(u => + u.amount >= minAnchorAmount && (u.confirmations || 0) > 0 && !u.isSpentOnchain && !u.isLockedInMutex + ).length; + const totalAmount = blocRewards.reduce((s, u) => s + u.amount, 0) + + anchors.reduce((s, u) => s + u.amount, 0) + + changes.reduce((s, u) => s + u.amount, 0); + + currentUtxosData = { blocRewards, anchors, changes, fees }; + + document.getElementById('utxo-count').textContent = total.toLocaleString('fr-FR'); + document.getElementById('available-for-anchor').textContent = availableForAnchor.toLocaleString('fr-FR'); + document.getElementById('total-amount').textContent = formatBTC(totalAmount); + updateLastUpdateTime(); + + progressSection.style.display = 'none'; + document.getElementById('navigation').style.display = 'flex'; + + let html = ''; + html += renderTable(blocRewards, 'bloc-rewards', '💰 Bloc Rewards (Récompenses de minage)'); + html += renderTable(anchors, 'ancrages', '🔗 Ancrages (Transactions d\'ancrage)'); + html += renderTable(changes, 'changes', '🔄 Changes (Monnaie de retour)'); + html += renderFeesTable(fees, 'fees', '💸 Frais (Transactions d\'ancrage)'); + + contentDiv.innerHTML = html; + } catch (error) { + console.error('Error loading UTXO list from RPC:', error); + progressSection.style.display = 'none'; + contentDiv.innerHTML = `
Erreur lors du chargement depuis RPC : ${error.message}
`; + } finally { + buttons.forEach(btn => btn.disabled = false); + loadSmallUtxosInfo(); + } + } + + async function loadUtxoList() { + const contentDiv = document.getElementById('content'); + const buttons = document.querySelectorAll('.refresh-button'); + const progressSection = document.getElementById('progress-section'); + const progressBarFill = document.getElementById('progress-bar-fill'); + const progressPercent = document.getElementById('progress-percent'); + const progressStats = document.getElementById('progress-stats'); + + buttons.forEach(btn => { + if (btn.textContent.includes('fichier')) { + btn.disabled = true; + } + }); contentDiv.innerHTML = ''; utxosFromFile = true; progressSection.style.display = 'block'; @@ -731,7 +806,11 @@ progressSection.style.display = 'none'; contentDiv.innerHTML = `
Erreur lors du chargement de la liste des UTXO : ${error.message}
`; } finally { - refreshButton.disabled = false; + buttons.forEach(btn => { + if (btn.textContent.includes('fichier')) { + btn.disabled = false; + } + }); loadSmallUtxosInfo(); } } @@ -795,6 +874,10 @@ Nombre : 0 Total des frais : 0 ✅ +
${emptyReason}