**Motivations:** - Corriger erreur syntaxe double déclaration const now dans bitcoin-rpc.js - Scripts batch en .mjs (ES modules) sans dépendance dotenv - /api/utxo/count doit accepter catégorie ancrages (pluriel) du fichier **Root causes:** - const now déclaré deux fois dans même portée (lignes 294 et 299) - Scripts utilisent dotenv non installé globalement - /api/utxo/count cherchait seulement 'anchor' mais fichier utilise 'ancrages' **Correctifs:** - Supprimer deuxième déclaration const now (ligne 299) - Scripts .mjs : parser .env manuellement sans dotenv - /api/utxo/count : accepter 'anchor' OU 'ancrages' **Evolutions:** - Aucune **Pages affectées:** - signet-dashboard/src/bitcoin-rpc.js - signet-dashboard/src/server.js - scripts/complete-utxo-list-blocktime.mjs - scripts/diagnose-bloc-rewards.mjs
2.8 KiB
2.8 KiB
API Relay – Persistance signatures/clés et sauvegarde périodique
Author: Équipe 4NK
Date: 2026-01-26
Objectif
- Persister les signatures et les clés de déchiffrement sur disque (au même titre que les messages et seenHashes), afin qu’elles survivent au redémarrage du relais.
- Ajouter une sauvegarde périodique configurable pour limiter la perte de données entre deux arrêts propres.
Impacts
- Fonctionnels : Les signatures et clés ne sont plus perdues au redémarrage. Réduction du risque de perte en cas de crash entre deux sauvegardes grâce à la sauvegarde périodique.
- Techniques : Extension du fichier
messages.json(signatures, keys), nouveau timer de sauvegarde, variable d’environnementSAVE_INTERVAL_SECONDS. Gestion d’erreur explicite au chargement (ENOENT vs autres).
Modifications
api-relay
src/services/storage.tsloadFromDisk: lecture demessages.json. Sisignatures/keysprésents, chargement dans les Maps. ENOENT = premier run (démarrage à vide) ; autres erreurs loggées et propagées. Parse JSON avec try/catch, log + rethrow.saveToDisk: écriture demessages,seenHashes,signatures,keysdansmessages.json. Suppression du try/catch silencieux ; les erreurs remontent.initialize: plus de catch qui absorbe les erreurs deloadFromDisk; propagation.
src/index.tsSAVE_INTERVAL_SECONDS: env, défaut 300, 0 = désactivé.setInterval(si > 0) : appel àstorage.saveToDisk()toutes les N secondes ;.catchlogue les erreurs.- Shutdown (SIGINT/SIGTERM) :
clearInterval, puissaveToDisk, puisprocess.exit(0)ou1en cas d’erreur.
Documentation
userwallet/docs/storage.md: Synthèse, structure disque, Persistance, Configuration, Limitations (suppression des anciennes limitations « sigs/clés non persistées », « pas de sauvegarde périodique »).api-relay/README.md: VariableSAVE_INTERVAL_SECONDS, section Stockage mise à jour.
Modalités de déploiement
- Redémarrer le serveur api-relay après déploiement.
- Les relais existants avec un
messages.jsonsanssignaturesnikeyscontinuent de fonctionner ; les champs sont optionnels au chargement. - Pour désactiver la sauvegarde périodique :
SAVE_INTERVAL_SECONDS=0.
Modalités d’analyse
- Vérifier qu’après POST /signatures et POST /keys, un redémarrage du relais conserve les données (GET /signatures/:hash, GET /keys/:hash).
- Vérifier qu’en cas d’erreur disque au chargement (fichier corrompu, permissions), le processus logue et exit avec erreur (pas de démarrage à vide silencieux).
- Vérifier que la sauvegarde périodique écrit bien
messages.json(timestamp de modification) et que les logs « Periodic save failed » apparaissent en cas d’échec.