**Motivations:** - Ancrages et Changes affichés à 0 sur /utxo-list en chargement fichier - Liste perçue comme erronée **Root causes:** - utxo_list.txt utilise ancrages/changes; parser n'acceptait que anchor/change - Lignes ancrages/changes rejetées par parseUtxoLine **Correctifs:** - Parser accepte ancrages et changes, push vers anchors/changes - Doc catégories et limite Frais (fichier) dans features + fixKnowledge **Evolutions:** - Aucune **Pages affectées:** - signet-dashboard/public/utxo-list.html - features/utxo-list-progressive-loading.md - fixKnowledge/utxo-list-file-category-mismatch.md
63 lines
3.5 KiB
Markdown
63 lines
3.5 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`.
|
||
- 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`
|