**Motivations:**
- Changes : supprimer colonne Type et Date (toujours vide en chargement fichier)
- Frais Nombre : 0 : clarifier que c'est attendu en chargement fichier (source RPC)
**Root causes:**
- Type/Date inutiles ou vides pour Changes depuis utxo_list.txt
- Frais non stockés dans le fichier (OP_RETURN / RPC uniquement)
**Correctifs:**
- Changes : en-têtes et cellules Type + Date supprimés
- Frais vide : message "Les frais ne sont pas disponibles en chargement fichier (source RPC uniquement)." si utxosFromFile
- Doc features/utxo-list-progressive-loading.md mise à jour
**Evolutions:**
- Aucune
**Pages affectées:**
- signet-dashboard/public/utxo-list.html
- features/utxo-list-progressive-loading.md
**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
**Motivations:**
- La liste des hash est très longue (17k+ hash) et difficile à naviguer
- Besoin de rechercher un hash spécifique
- La colonne confirmations prend trop de place
**Root causes:**
- Pas de pagination, tous les hash sont affichés d'un coup
- Pas de fonctionnalité de recherche
- Colonne confirmations affiche un nombre alors qu'une coche suffit
**Correctifs:**
- Ajout de la pagination (50 hash par page)
- Ajout d'un champ de recherche pour filtrer par hash (recherche partielle)
- Remplacement de la colonne Confirmations par Confirmé avec coche ✓ (vert) ou ✗ (rouge)
- Navigation avec boutons Précédent/Suivant et affichage du nombre de pages
**Evolutions:**
- Meilleure navigation dans la liste des hash
- Recherche rapide d'un hash spécifique
- Interface plus compacte et lisible
**Pages affectées:**
- signet-dashboard/public/hash-list.html
**Motivations:**
- La page home rame et ne s'affiche pas
- Les requêtes API timeout, la page reste blanche
**Root causes:**
- initializeFiles() au démarrage appelle getHashList() et getUtxoList()
- Cache UTXO obsolète force une mise à jour complète (37k+ UTXOs)
- Ces opérations bloquent la boucle d'événements Node.js
**Correctifs:**
- Suppression de l'initialisation au démarrage (initializeFiles)
- Suppression de la fonction initializeFiles (code mort)
- Mise à jour des fichiers à la demande via /api/hash/list et /api/utxo/list
**Evolutions:**
- Le serveur répond immédiatement au démarrage
- La home s'affiche correctement
**Pages affectées:**
- signet-dashboard/src/server.js
- fixKnowledge/dashboard-home-blocked-by-startup-init.md
**Motivations:**
- La home est très lente au premier lancement
- Tous les endpoints sont chargés en parallèle, y compris les plus lents
- L'endpoint /api/utxo/list est très lent car il charge toute la liste
**Root causes:**
- loadData() charge 10 endpoints en parallèle sans priorisation
- loadAvailableForAnchor() charge toute la liste UTXO juste pour obtenir un count
- Les données moins critiques (avg fee, avg tx amount) bloquent l'affichage initial
**Correctifs:**
- Chargement en 2 phases : données critiques d'abord, données secondaires ensuite
- Création d'un endpoint optimisé /api/utxo/count qui lit directement depuis le fichier texte
- loadAvailableForAnchor() utilise maintenant l'endpoint optimisé au lieu de /api/utxo/list
- Les données secondaires (avg fee, avg tx amount, avg block time) sont chargées en arrière-plan
**Evolutions:**
- Affichage initial plus rapide avec les données critiques
- Meilleure expérience utilisateur avec chargement progressif
- Endpoint optimisé pour obtenir le count sans charger toute la liste UTXO
**Pages affectées:**
- signet-dashboard/src/server.js : Nouvel endpoint /api/utxo/count
- signet-dashboard/public/app.js : Optimisation de loadData() et loadAvailableForAnchor()
**Motivations:**
- Le cache UTXO existant a l'ancien format (seulement la date)
- Le code ne gérait pas correctement l'ancien format
- Nécessité de gérer la transition entre ancien et nouveau format
**Root causes:**
- Le cache UTXO avait l'ancien format <date> au lieu de <date>;<hauteur>
- Le code lisait parts[1] qui était undefined pour l'ancien format
- Cela causait une détection permanente de nouveaux blocs
**Correctifs:**
- Amélioration du code de lecture pour gérer l'ancien format (1 partie) et le nouveau format (2 parties)
- Détection automatique de l'ancien format et mise à jour forcée pour réécrire avec le bon format
- Validation de la hauteur pour éviter les valeurs invalides
**Evolutions:**
- Compatibilité avec l'ancien format du cache
- Migration automatique vers le nouveau format lors de la prochaine mise à jour
- Meilleure robustesse du code de lecture du cache
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js : Méthode getUtxoList()
**Motivations:**
- Le cache UTXO n'avait pas le format attendu (seulement la date)
- Le serveur détectait toujours de nouveaux blocs et faisait une mise à jour complète à chaque fois
- Le serveur était bloqué par le traitement de la liste UTXO
**Root causes:**
- Le cache UTXO était écrit avec seulement la date au lieu du format <date>;<hauteur>
- Le code de lecture attendait le format <date>;<hauteur> mais ne le trouvait pas
- Cela causait une détection permanente de nouveaux blocs et une mise à jour complète
**Correctifs:**
- Correction du format d'écriture du cache UTXO pour inclure la hauteur du bloc
- Format: <date>;<hauteur> au lieu de seulement <date>
**Evolutions:**
- Le cache UTXO fonctionne correctement maintenant
- Le serveur ne fait plus de mise à jour complète inutile
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js : Méthode getUtxoList()
**Motivations:**
- Le chargement et l'actualisation de la home est très long
- Réduire les appels RPC Bitcoin pour améliorer les performances
- Utiliser les fichiers texte comme source principale de données
**Root causes:**
- Les méthodes getAnchorCount(), getHashList() et getUtxoList() faisaient des appels RPC à chaque chargement
- Les fichiers texte hash_list.txt et utxo_list.txt n'étaient pas utilisés efficacement
**Correctifs:**
- getAnchorCount() : Lit directement depuis hash_list.txt au lieu de faire des appels RPC pour compter
- getHashList() : Lit directement depuis hash_list.txt et ne complète que les nouveaux blocs si nécessaire
- getUtxoList() : Lit depuis utxo_list.txt et ne fait l'appel RPC listunspent que si de nouveaux blocs sont détectés
- Mise à jour des confirmations sans appels RPC supplémentaires
**Evolutions:**
- Performance améliorée : les appels RPC sont limités aux cas où de nouveaux blocs sont détectés
- Utilisation efficace des fichiers texte comme source de vérité
- Réduction significative du temps de chargement de la home
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js : Méthodes getAnchorCount(), getHashList(), getUtxoList()
**Motivations:**
- Le chargement des UTXOs est très long car il recalcule tout à chaque fois
- Chaque UTXO nécessite plusieurs appels RPC (getrawtransaction, gettxout, getTransaction)
- Avec des milliers d'UTXOs, cela prend beaucoup de temps
**Root causes:**
- Le code ne lit jamais le fichier utxo_list.txt pour éviter de recalculer
- Tous les UTXOs sont recalculés à chaque appel, même s'ils n'ont pas changé
- Le fichier de cache utxo_list_cache.txt n'est utilisé que pour stocker une date, pas pour éviter les recalculs
**Correctifs:**
- Chargement des UTXOs existants depuis utxo_list.txt au démarrage
- Comparaison avec les UTXOs actuels de listunspent pour identifier les nouveaux/modifiés
- Recalcul uniquement des UTXOs nouveaux ou modifiés
- Mise à jour des informations dynamiques (isSpentOnchain, isLockedInMutex, confirmations) en parallèle
- Conservation des UTXOs dépensés dans le fichier pour l'historique (mais exclus des listes actives)
**Evolutions:**
- Utilisation du fichier texte utxo_list.txt comme cache (comme getHashList() utilise hash_list.txt)
- Format du fichier étendu : category;txid;vout;address;amount;confirmations;isAnchorChange
- Vérifications en parallèle pour les UTXOs existants (Promise.all)
- Logs indiquant le nombre d'UTXOs chargés depuis le fichier vs recalculés
- Les UTXOs dépensés sont conservés dans le fichier mais exclus des listes actives
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js: Méthode getUtxoList() optimisée pour utiliser le fichier texte comme cache
**Motivations:**
- Mettre à jour la documentation pour refléter les nouvelles fonctionnalités UTXO
- Documenter les nouvelles routes API
- Expliquer les fonctionnalités de pagination, tri et consolidation
**Root causes:**
- La documentation n'était pas à jour avec les nouvelles fonctionnalités
- Les nouvelles routes API n'étaient pas documentées
- Les utilisateurs n'étaient pas informés des nouvelles capacités
**Correctifs:**
- Mise à jour de learn.html avec section sur la gestion des UTXOs
- Ajout de la documentation des nouvelles routes API dans api-docs.html
- Mise à jour de docs/DASHBOARD.md avec les nouvelles fonctionnalités
**Evolutions:**
- learn.html : Section sur la gestion des UTXOs (pagination, tri, consolidation, capacité d'ancrage)
- api-docs.html : Documentation des routes :
- GET /api/utxo/list : Liste des UTXOs avec compteurs
- GET /api/utxo/small-info : Infos sur les petits UTXOs
- POST /api/utxo/consolidate : Consolidation des petits UTXOs
- Documentation de l'erreur "too-long-mempool-chain" (503)
- docs/DASHBOARD.md : Mise à jour de la section UTXO avec pagination, tri, consolidation, capacité d'ancrage restante
**Pages affectées:**
- signet-dashboard/public/learn.html: Section gestion des UTXOs
- signet-dashboard/public/api-docs.html: Documentation des nouvelles routes API et erreur too-long-mempool-chain
- docs/DASHBOARD.md: Mise à jour fonctionnalités UTXO et endpoints
**Motivations:**
- Afficher le nombre d'UTXOs et le montant total concernés par la consolidation
- Rendre le bouton de consolidation plus informatif
**Root causes:**
- Le bouton affichait un texte statique sans information sur ce qui sera consolidé
- Pas de visibilité sur le nombre d'UTXOs et le montant concernés
**Correctifs:**
- Création de la méthode getSmallUtxosInfo() pour obtenir les infos sans consolider
- Ajout de la route GET /api/utxo/small-info pour exposer ces informations
**Evolutions:**
- Bouton de consolidation avec texte dynamique : "Consolider la capacité d'ancrage résiduelle (X UTXOs, Y ✅)"
- Fonction loadSmallUtxosInfo() qui charge les infos depuis l'API
- Bouton désactivé avec message "Aucun UTXO à consolider" si aucun UTXO disponible
- Chargement automatique des infos au chargement de la page et après refresh
- Gestion d'erreur avec message "Erreur de chargement" si l'API échoue
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js: Méthode getSmallUtxosInfo() pour obtenir les infos des petits UTXOs
- signet-dashboard/src/server.js: Route GET /api/utxo/small-info
- signet-dashboard/public/utxo-list.html: Fonction loadSmallUtxosInfo() et mise à jour du bouton avec texte dynamique
**Motivations:**
- Afficher la capacité d'ancrage restante directement sur le dashboard principal
- Permettre un suivi rapide du nombre d'UTXOs disponibles pour l'ancrage
**Root causes:**
- La capacité d'ancrage restante n'était visible que sur la page de liste des UTXOs
- Pas de visibilité immédiate sur le dashboard principal
**Correctifs:**
- Ajout d'une carte "Capacité d'Ancrage Restante" dans le dashboard principal
- Affichage du nombre d'ancrages disponibles et du nombre d'UTXOs confirmés
**Evolutions:**
- Nouvelle carte dans la section "État de la Blockchain" affichant :
- Le nombre d'ancrages restants (format: "X ancrages")
- Le nombre d'UTXOs confirmés disponibles (sous-titre)
- Fonction loadAvailableForAnchor() qui charge les données depuis /api/utxo/list
- Spinner de chargement pendant la récupération des données
- Gestion d'erreur avec valeurs par défaut
**Pages affectées:**
- signet-dashboard/public/index.html: Ajout de la carte "Capacité d'Ancrage Restante"
- signet-dashboard/public/app.js: Fonction loadAvailableForAnchor() et intégration dans loadData()
**Motivations:**
- Améliorer l'affichage de la liste des UTXOs avec pagination et tri
- Permettre la consolidation des petits UTXOs (< 2500 sats) pour optimiser le wallet
- Afficher le nombre d'UTXOs confirmés disponibles pour l'ancrage
**Root causes:**
- La liste des UTXOs pouvait être très longue et difficile à naviguer
- Les petits UTXOs (< 2500 sats) s'accumulaient sans possibilité de consolidation
- Le nombre d'UTXOs confirmés n'était pas affiché séparément
**Correctifs:**
- Filtrage des UTXOs confirmés (minconf=1) dans getUtxoList() pour éviter les erreurs too-long-mempool-chain
- Ajout du compteur confirmedAvailableForAnchor dans la réponse API
- Création de la méthode consolidateSmallUtxos() pour consolider les UTXOs < 2500 sats
- Ajout de la route POST /api/utxo/consolidate pour déclencher la consolidation
**Evolutions:**
- Pagination des résultats par 100 UTXOs par page avec contrôles précédent/suivant
- Tri des montants et confirmations avec flèches (croissant/décroissant) au clic sur les en-têtes
- Affichage du nombre d'UTXOs confirmés dans la section "Capacité d'ancrage restante"
- Bouton "Consolider les UTXOs < 2500 sats" pour optimiser le wallet
- Pagination également appliquée à la table des frais
**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js: Filtrage UTXOs confirmés, méthode consolidateSmallUtxos()
- signet-dashboard/src/server.js: Route /api/utxo/consolidate, ajout confirmedAvailableForAnchor dans counts
- signet-dashboard/public/utxo-list.html: Pagination, tri, bouton consolidation, affichage UTXOs confirmés
**Motivations:**
- Complete documentation for dashboard, domains, ports and environment configuration
- Add new services (ClamAV API, Watermark API) to the infrastructure
- Enhance dashboard with new pages and improved functionality
- Improve deployment scripts and service configurations
**Root causes:**
- Missing comprehensive documentation for infrastructure setup
- Need for antivirus scanning service integration
- Need for watermark service integration
- Dashboard required additional pages and features
**Correctifs:**
- Added comprehensive documentation in docs/ (DASHBOARD.md, DOMAINS_AND_PORTS.md, ENVIRONMENT.md)
- Updated systemd service files with proper environment variables
- Enhanced nginx proxy configuration script
- Updated maintenance documentation
**Evolutions:**
- Added new ClamAV API service (api-clamav) for file scanning
- Added new Watermark API service (api-filigrane) for document watermarking
- Enhanced signet-dashboard with new learn.html page
- Improved dashboard UI with better styles and navigation
- Enhanced app.js with new functionality and better error handling
- Updated API documentation page with complete endpoint descriptions
- Added deployment scripts for watermark and nginx configuration
- Updated hash and UTXO lists with latest data
- Enhanced server.js with new routes and improved Bitcoin RPC integration
**Pages affectées:**
- docs/DASHBOARD.md: New comprehensive dashboard documentation
- docs/DOMAINS_AND_PORTS.md: New infrastructure domains and ports documentation
- docs/ENVIRONMENT.md: New environment variables documentation
- docs/MAINTENANCE.md: Updated maintenance procedures
- docs/README.md: Updated main documentation
- signet-dashboard/public/app.js: Enhanced with new features
- signet-dashboard/public/styles.css: Improved styling
- signet-dashboard/public/index.html: Enhanced main page
- signet-dashboard/public/learn.html: New educational page
- signet-dashboard/public/api-docs.html: Enhanced API documentation
- signet-dashboard/public/hash-list.html: Updated hash list page
- signet-dashboard/public/utxo-list.html: Updated UTXO list page
- signet-dashboard/public/join-signet.html: Updated join signet page
- signet-dashboard/src/server.js: Enhanced server with new routes
- signet-dashboard/start.sh: Updated startup script
- signet-dashboard/signet-dashboard.service: Updated systemd service
- api-anchorage/anchorage-api.service: Updated systemd service
- api-faucet/faucet-api.service: Updated systemd service
- configure-nginx-proxy.sh: Enhanced nginx configuration script
- add-watermark-certificate.sh: New watermark certificate script
- deploy-watermark-nginx.sh: New deployment script
- api-clamav/: New ClamAV API service
- api-filigrane/: New Watermark API service
- hash_list.txt, utxo_list.txt: Updated with latest data
- anchor_count.txt: Updated anchor count
**Motivations:**
- Fix insufficient UTXO amount error in anchor API
- Ensure continuous availability of usable UTXOs for anchor transactions
- Improve anchor transaction reliability and efficiency
**Root causes:**
- UTXO selection logic was too restrictive, rejecting UTXOs larger than needed
- No automatic provisioning of new usable UTXOs when existing ones were not suitable
- Algorithm prevented efficient use of available UTXOs
**Correctifs:**
- Refactored createAnchorTransaction() to provision 7 UTXOs of 2500 sats on each anchor
- Use single large UTXO to create 1 anchor output + 7 provisioning outputs + change
- Simplified UTXO selection: single large UTXO per transaction instead of multiple small ones
- Added UTXO provisioning logic in signet-dashboard
- Enhanced Bitcoin RPC methods in both api-anchorage and signet-dashboard
- Added documentation in fixKnowledge/api-anchorage-utxo-provisioning.md
**Evolutions:**
- Enhanced signet-dashboard with new pages (hash-list, utxo-list, join-signet, api-docs)
- Improved Bitcoin RPC client with better error handling and UTXO management
- Added cache files for hash and UTXO lists
- Updated api-faucet with improved server configuration
- Enhanced anchor count tracking
**Pages affectées:**
- api-anchorage/src/bitcoin-rpc.js: Complete refactor of createAnchorTransaction()
- api-anchorage/src/routes/anchor.js: Enhanced anchor route
- api-anchorage/src/server.js: Server configuration updates
- signet-dashboard/src/bitcoin-rpc.js: Added comprehensive Bitcoin RPC client
- signet-dashboard/src/server.js: Enhanced server with new routes
- signet-dashboard/public/: Added new HTML pages and updated app.js
- api-faucet/src/server.js: Server improvements
- api-faucet/README.md: Documentation updates
- fixKnowledge/api-anchorage-utxo-provisioning.md: New documentation
- anchor_count.txt, hash_list.txt, utxo_list.txt: Tracking files
**Motivations:**
- Fix 401 error on anchorage API due to .env not being loaded correctly
- Fix 502 error on dashboard due to service not running
- Add backup script for mining keys and wallet descriptors
- Improve service management with startup scripts and systemd services
**Root causes:**
- dotenv.config() was called without explicit path, causing .env to be loaded from wrong directory
- Services were not started automatically, causing 502 errors
- No backup mechanism for critical keys and wallet data
**Correctifs:**
- Improved .env loading in api-anchorage/src/server.js with explicit path
- Improved .env loading in signet-dashboard/src/server.js with explicit path
- Added backups/ directory to .gitignore to prevent committing sensitive data
- Created export-backup.sh script for backing up mining keys and wallet descriptors
**Evolutions:**
- Added api-anchorage/start.sh script for proper service startup
- Added api-anchorage/anchorage-api.service systemd service file
- Added fixKnowledge/api-anchorage-401-error.md documentation
- Added fixKnowledge/dashboard-502-error.md documentation
- Updated mempool submodule
**Pages affectées:**
- .gitignore (added backups/)
- api-anchorage/src/server.js (improved .env loading)
- api-anchorage/start.sh (new)
- api-anchorage/anchorage-api.service (new)
- signet-dashboard/src/server.js (improved .env loading)
- export-backup.sh (new)
- fixKnowledge/api-anchorage-401-error.md (new)
- fixKnowledge/dashboard-502-error.md (new)
- mempool (submodule updated)