**Motivations:** - Page utxo-list très longue à charger - Utiliser le fichier utxo_list.txt (peut ne pas être à jour) au lieu de /api/utxo/list - Proposer un chargement progressif avec barre de progression **Root causes:** - /api/utxo/list appelle getUtxoList (RPC + fichier), lent et peut bloquer - Aucun retour visuel pendant le chargement **Correctifs:** - Chargement depuis /api/utxo/list.txt (fichier uniquement) - Stream du fichier (getReader + TextDecoder), parsing ligne à ligne - Barre de progression (bytes reçus / Content-Length) - Content-Length et Last-Modified sur /api/utxo/list.txt - Statut "—" quand source fichier (pas d'info dépensé/verrouillé) - Note "Source : fichier utxo_list.txt (peut ne pas être à jour)" **Evolutions:** - Chargement plus rapide et non bloquant - Feedback visuel (progression, lignes parsées) - Documentation dans features/utxo-list-progressive-loading.md **Pages affectées:** - signet-dashboard/src/server.js - signet-dashboard/public/utxo-list.html - features/utxo-list-progressive-loading.md
61 lines
3.2 KiB
Markdown
61 lines
3.2 KiB
Markdown
# 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`.
|
||
- `actualiser` recharge depuis le fichier (même flux que le chargement initial).
|
||
|
||
## 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`
|