**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
45 lines
2.8 KiB
Markdown
45 lines
2.8 KiB
Markdown
# 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’environnement `SAVE_INTERVAL_SECONDS`. Gestion d’erreur 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 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`** : 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 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.
|