anchorage_layer_simple/features/api-relay-persistence-signatures-keys-periodic-save.md
ncantu 0db7a76044 Fix: double déclaration const now, scripts .mjs, /api/utxo/count accepte ancrages
**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
2026-01-26 02:06:10 +01:00

2.8 KiB
Raw Permalink Blame History

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 quelles 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 denvironnement SAVE_INTERVAL_SECONDS. Gestion derreur explicite au chargement (ENOENT vs autres).

Modifications

api-relay

  • src/services/storage.ts
    • loadFromDisk : lecture de messages.json. Si signatures / keys pré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 de messages, seenHashes, signatures, keys dans messages.json. Suppression du try/catch silencieux ; les erreurs remontent.
    • initialize : plus de catch qui absorbe les erreurs de loadFromDisk ; propagation.
  • src/index.ts
    • SAVE_INTERVAL_SECONDS : env, défaut 300, 0 = désactivé.
    • setInterval (si > 0) : appel à storage.saveToDisk() toutes les N secondes ; .catch logue les erreurs.
    • Shutdown (SIGINT/SIGTERM) : clearInterval, puis saveToDisk, puis process.exit(0) ou 1 en cas derreur.

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 : Variable SAVE_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.json sans signatures ni keys continuent de fonctionner ; les champs sont optionnels au chargement.
  • Pour désactiver la sauvegarde périodique : SAVE_INTERVAL_SECONDS=0.

Modalités danalyse

  • Vérifier quaprès POST /signatures et POST /keys, un redémarrage du relais conserve les données (GET /signatures/:hash, GET /keys/:hash).
  • Vérifier quen cas derreur 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.