# Chargement progressif de la liste UTXO depuis le fichier **Auteur** : Équipe 4NK **Date** : 2026-01-26 **Version** : 1.0 ## Objectif Raccourcir le chargement de la page [Liste des UTXO](https://dashboard.certificator.4nkweb.com/utxo-list) en utilisant directement le fichier `utxo_list.txt` au lieu de `/api/utxo/list`, et afficher une barre de progression pendant le chargement. ## Problème initial - La page UTXO-list est très longue à charger. - Elle appelait `/api/utxo/list`, qui utilise `getUtxoList()` (RPC + fichier) et peut être lent ou bloquer le serveur. - Le fichier `utxo_list.txt` peut être en retard par rapport au nœud, mais il est servi rapidement. - Aucun retour visuel pendant le chargement. ## Impacts - **Page UTXO-list** : Charge désormais depuis `/api/utxo/list.txt` (fichier uniquement). - **Serveur** : `/api/utxo/list.txt` envoie `Content-Length` et `Last-Modified` pour la progression et l’affichage de la date de mise à jour. - **Utilisateurs** : Barre de progression pendant le chargement ; indication que la source est le fichier (potentiellement pas à jour). ## Modifications ### Serveur (`signet-dashboard/src/server.js`) - Route `/api/utxo/list.txt` : ajout de `Content-Length` et `Last-Modified` (via `statSync`). ### Page UTXO-list (`signet-dashboard/public/utxo-list.html`) - **Source des données** : `loadUtxoList()` lit `/api/utxo/list.txt` au lieu de `/api/utxo/list`. - **Streaming** : utilisation de `response.body.getReader()` + `TextDecoder` pour traiter le flux par morceaux. - **Parsing** : `parseUtxoLine()` parse le format fichier (`category;txid;vout;amount;confirmations;isAnchorChange;blockTime`) et produit des objets UTXO compatibles avec `renderTable` / `renderFeesTable`. - **Barre de progression** : - Section dédiée avec barre (pourcentage) et texte « X ligne(s) parsée(s) ». - Progression = `bytes reçus / Content-Length` ; si pas de `Content-Length`, 0 % puis 100 % à la fin. - **Source fichier** : mention « Source : fichier utxo_list.txt (peut ne pas être à jour) » et, si disponible, « Dernière modif. : … » (depuis `Last-Modified`). - **Statut** : pour les UTXO chargés depuis le fichier (`fromFile: true`), la colonne Statut affiche « — » (pas d’info dépensé/verrouillé disponible). ### Compatibilité - Format 7 champs (nouveau) et 6 champs (ancien avec `address`) gérés par `parseUtxoLine`. - Catégories fichier : `bloc_rewards`, `ancrages`, `changes` (et `anchor`/`change`/`fee` si présents). Le parser accepte les deux formes pour ancrages/changes. - `actualiser` recharge depuis le fichier (même flux que le chargement initial). - **Frais** : la section « Frais » reste vide en chargement fichier (données issues du RPC / OP_RETURN, non stockées dans `utxo_list.txt`). ## Modalités de déploiement 1. Redémarrer le dashboard : `sudo systemctl restart signet-dashboard.service`. 2. Vider le cache navigateur si nécessaire puis recharger `/utxo-list`. ## Modalités d’analyse - Ouvrir les DevTools (Network) : vérifier que la requête va vers `/api/utxo/list.txt` et que les headers `Content-Length` et `Last-Modified` sont présents. - Vérifier que la barre de progression s’affiche puis disparaît une fois le chargement terminé. - Vérifier que les quatre tableaux (Bloc Rewards, Ancrages, Changes, Frais) et la pagination s’affichent correctement. ## Pages affectées - `signet-dashboard/src/server.js` : route `/api/utxo/list.txt` - `signet-dashboard/public/utxo-list.html` : `loadUtxoList`, `parseUtxoLine`, rendu progression, statut `fromFile`