From 85c2810dad12e6b8c05085ac9e5317173951a056 Mon Sep 17 00:00:00 2001 From: ncantu Date: Mon, 26 Jan 2026 03:41:08 +0100 Subject: [PATCH] Fix UTXO list page: remove block number column, add fees update button, add RPC load option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - Supprimer la colonne "Numéro de bloc" dans la section Ancrages (toujours vide) - Afficher le bouton de mise à jour des frais même quand la section est vide - Permettre de charger les statuts et dates complets depuis RPC **Root causes:** - La colonne "Numéro de bloc" affichait toujours "-" car blockHeight n'est pas dans le fichier utxo_list.txt - Le bouton de mise à jour des frais n'était visible que si des frais existaient déjà - Les statuts (isSpentOnchain, isLockedInMutex) et certaines dates ne sont pas dans le fichier, nécessitent un chargement RPC **Correctifs:** - Suppression de la colonne "Numéro de bloc" dans la section Ancrages (header et données) - Ajout du bouton "Récupérer les frais depuis les ancrages" même quand fees.length === 0 - Ajout d'un bouton "Charger depuis RPC (statuts complets)" pour obtenir les données complètes - Ajout de la fonction loadUtxoListFromRPC() qui charge depuis /api/utxo/list au lieu de /api/utxo/list.txt **Evolutions:** - Nouvelle option de chargement depuis RPC pour obtenir les statuts complets (Dépensé onchain, Verrouillé, Disponible) - Les dates complètes sont disponibles via le chargement RPC même si blockTime manque dans le fichier **Pages affectées:** - signet-dashboard/public/utxo-list.html --- signet-dashboard/public/utxo-list.html | 97 ++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 7 deletions(-) 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}