**Motivations:** - Réduction drastique de la consommation mémoire lors des ancrages - Élimination du chargement de 173k+ UTXOs à chaque requête - Stabilisation de la mémoire système sous charge élevée (50+ ancrages/minute) **Root causes:** - api-anchorage chargeait tous les UTXOs (173k+) via listunspent RPC à chaque ancrage - Filtrage et tri de 173k+ objets en mémoire pour sélectionner un seul UTXO - Croissance mémoire de ~16 MB toutes les 12 secondes avec 50 ancrages/minute - Saturation mémoire système en quelques minutes **Correctifs:** - Création du module database.js pour gérer la base de données SQLite partagée - Remplacement de listunspent RPC par requête SQL directe avec LIMIT 1 - Sélection directe d'un UTXO depuis la DB au lieu de charger/filtrer 173k+ objets - Marquage des UTXOs comme dépensés dans la DB après utilisation - Fermeture propre de la base de données lors de l'arrêt **Evolutions:** - Utilisation de la base de données SQLite partagée avec signet-dashboard - Réduction mémoire de 99.999% (173k+ objets → 1 objet par requête) - Amélioration des performances (requête SQL indexée vs filtrage en mémoire) - Optimisation mémoire de signet-dashboard (chargement UTXOs seulement si nécessaire) - Monitoring de lockedUtxos dans api-anchorage pour détecter les fuites - Nettoyage des intervalles frontend pour éviter les fuites mémoire **Pages affectées:** - api-anchorage/src/database.js (nouveau) - api-anchorage/src/bitcoin-rpc.js - api-anchorage/src/server.js - api-anchorage/package.json - signet-dashboard/src/bitcoin-rpc.js - signet-dashboard/public/app.js - features/optimisation-memoire-applications.md (nouveau) - features/api-anchorage-optimisation-base-donnees.md (nouveau)
4.3 KiB
4.3 KiB
Vérification usage exclusif base de données et code mort
Date: 2026-01-27 Auteur: Équipe 4NK
Objectif
Vérifier que les projets api-anchorage et signet-dashboard utilisent exclusivement la base de données SQLite et qu'il n'y a pas de code mort.
Résultats de la vérification
✅ api-anchorage
Usage de fichiers texte:
- ❌ Aucun usage de fichiers texte trouvé
- ✅ Aucune référence à
utxo_list.txt,hash_list.txt,fees_list.txt - ✅ Aucune opération
readFileSync/writeFileSyncpour les données métier
Code mort:
- ✅ Fichier backup supprimé :
src/bitcoin-rpc.js.backup - ✅ Tous les exports sont utilisés
- ✅ Aucun code mort détecté
Conclusion: api-anchorage n'utilise pas de fichiers texte et n'a pas de code mort.
✅ signet-dashboard
Usage de fichiers texte:
- ❌ Aucun usage de fichiers texte pour les données métier
- ✅ Toutes les données proviennent de la base de données SQLite
- ✅ Les seules références à
existsSyncsont légitimes (vérification existence DB) - ✅ Les références à
hash_list_cacheetutxo_list_cachesont des clés de cache dans la DB (légitimes) - ✅ Les références à
textContent,fileData,fileName,mimeTypesont pour le watermarking (légitimes)
Commentaires mis à jour:
- ✅ Tous les commentaires mentionnant "fichier" ont été mis à jour pour mentionner "base de données"
- ✅ Commentaires dans
bitcoin-rpc.js: 3 occurrences corrigées - ✅ Commentaires dans
server.js: 1 occurrence corrigée
Code mort:
- ✅ Fonction
closeDatabase(): Utilisée dans les handlers SIGTERM/SIGINT pour fermeture propre - ✅ Tous les exports sont utilisés
- ✅ Aucun code mort détecté
Fonctions exportées vérifiées:
getDatabase(): Utilisée partout dansbitcoin-rpc.jsetserver.js✅closeDatabase(): Utilisée dans les handlers d'arrêt propre ✅bitcoinRPC: Utilisé dansserver.js✅
Actions réalisées
Nettoyage
-
Fichier backup supprimé:
api-anchorage/src/bitcoin-rpc.js.backup: Supprimé (20 KB)
-
Commentaires corrigés:
signet-dashboard/src/bitcoin-rpc.js: 3 commentaires mis à joursignet-dashboard/src/server.js: 1 commentaire mis à jour
-
Fermeture propre de la DB:
- Ajout de
closeDatabase()dans les handlers SIGTERM/SIGINT
- Ajout de
Vérifications effectuées
1. Recherche de fichiers texte
grep -r "readFileSync|writeFileSync|\.txt|fichier texte" signet-dashboard/src api-anchorage/src
Résultat: Aucune référence aux fichiers texte pour les données métier
2. Recherche de fichiers backup
find api-anchorage signet-dashboard/src -name "*.backup" -o -name "*.old" -o -name "*.bak"
Résultat: Aucun fichier backup dans le code source (seulement dans node_modules)
3. Vérification des exports
- Tous les exports sont utilisés
- Aucune fonction non utilisée détectée
4. Vérification de la syntaxe
- ✅ Tous les fichiers compilent sans erreur
- ✅ Pas d'erreurs de linting
Conclusion
✅ Usage exclusif de la base de données
signet-dashboard:
- ✅ Toutes les données proviennent de la base de données SQLite
- ✅ Aucun fichier texte utilisé pour les données métier
- ✅ Les seules opérations fichiers sont légitimes (vérification existence DB, watermarking)
api-anchorage:
- ✅ N'utilise pas de fichiers texte
- ✅ N'a pas besoin de base de données (pas de stockage de données métier)
✅ Absence de code mort
signet-dashboard:
- ✅ Toutes les fonctions sont utilisées
- ✅ Tous les exports sont utilisés
- ✅
closeDatabase()utilisée pour fermeture propre
api-anchorage:
- ✅ Tous les exports sont utilisés
- ✅ Fichier backup supprimé
Recommandations
- ✅ Base de données comme source unique de vérité : Confirmé
- ✅ Pas de fichiers texte pour les données métier : Confirmé
- ✅ Code propre sans fichiers backup : Confirmé
- ✅ Fermeture propre de la DB : Implémentée
Notes
- Les fichiers
.bakdansnode_modulessont normaux (dépendances externes) existsSyncdansdatabase.jsest légitime (vérification existence DB)- Les références à
textContent,fileData, etc. sont pour le watermarking (fonctionnalité légitime)