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 |
Date |
@@ -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}