anchorage_layer_simple/features/verification-base-donnees-exclusive.md
ncantu 0960e43a45 Optimisation mémoire api-anchorage avec base de données SQLite
**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)
2026-01-27 21:12:22 +01:00

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/writeFileSync pour 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 à existsSync sont légitimes (vérification existence DB)
  • Les références à hash_list_cache et utxo_list_cache sont des clés de cache dans la DB (légitimes)
  • Les références à textContent, fileData, fileName, mimeType sont 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 dans bitcoin-rpc.js et server.js
  • closeDatabase() : Utilisée dans les handlers d'arrêt propre
  • bitcoinRPC : Utilisé dans server.js

Actions réalisées

Nettoyage

  1. Fichier backup supprimé:

    • api-anchorage/src/bitcoin-rpc.js.backup : Supprimé (20 KB)
  2. Commentaires corrigés:

    • signet-dashboard/src/bitcoin-rpc.js : 3 commentaires mis à jour
    • signet-dashboard/src/server.js : 1 commentaire mis à jour
  3. Fermeture propre de la DB:

    • Ajout de closeDatabase() dans les handlers SIGTERM/SIGINT

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

  1. Base de données comme source unique de vérité : Confirmé
  2. Pas de fichiers texte pour les données métier : Confirmé
  3. Code propre sans fichiers backup : Confirmé
  4. Fermeture propre de la DB : Implémentée

Notes

  • Les fichiers .bak dans node_modules sont normaux (dépendances externes)
  • existsSync dans database.js est légitime (vérification existence DB)
  • Les références à textContent, fileData, etc. sont pour le watermarking (fonctionnalité légitime)