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

122 lines
4.3 KiB
Markdown

# 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
```bash
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
```bash
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)