anchorage_layer_simple/features/OPTIONS_NON_IMPLENTEES.md
ncantu 695aff4f85 api-relay DB migration, auth, service-login-verify PersistentNonceCache, UserWallet crypto settings
**Motivations:**
- Migrer api-relay vers base de données SQLite (production)
- Ajouter authentification API key pour endpoints POST (protection abus)
- PersistentNonceCache pour service-login-verify (IndexedDB/localStorage)
- Écran paramètres crypto avancés UserWallet
- Documenter options non implémentées (Merkle, évolutions api-relay)

**Root causes:**
- N/A (évolutions + correctifs)

**Correctifs:**
- N/A

**Evolutions:**
- api-relay: DatabaseStorageService (SQLite), StorageAdapter (compatibilité), ApiKeyService (génération/validation), auth middleware (Bearer/X-API-Key), endpoints admin (/admin/api-keys), migration script (migrate-to-db.ts), suppression saveToDisk périodique
- service-login-verify: PersistentNonceCache (IndexedDB avec fallback localStorage, TTL, cleanup), export dans index
- userwallet: CryptoSettingsScreen (hashAlgorithm, jsonCanonizationStrict, ecdhCurve, nonceTtlMs, timestampWindowMs), modifications LoginScreen, LoginForm, CreateIdentityScreen, ImportIdentityScreen, DataExportImportScreen, PairingDisplayScreen, RelaySettingsScreen, ServiceListScreen, MemberSelectionScreen, GlobalActionBar
- features: OPTIONS_NON_IMPLENTEES.md (analyse Merkle trees, évolutions api-relay)

**Pages affectées:**
- api-relay: package.json, index.ts, middleware/auth.ts, services/database.ts, services/storageAdapter.ts, services/apiKeyService.ts, scripts/migrate-to-db.ts
- service-login-verify: persistentNonceCache.ts, index.ts, tsconfig.json, dist/
- userwallet: App, CryptoSettingsScreen, LoginScreen, LoginForm, CreateIdentityScreen, ImportIdentityScreen, DataExportImportScreen, PairingDisplayScreen, RelaySettingsScreen, ServiceListScreen, MemberSelectionScreen, GlobalActionBar
- features: OPTIONS_NON_IMPLENTEES.md
- data: sync-utxos.log
2026-01-28 07:36:01 +01:00

222 lines
7.5 KiB
Markdown

# Options non implémentées - Analyse d'intérêt
**Author:** Équipe 4NK
**Date:** 2026-01-28
## 1. Merkle trees (optionnel)
### Description
Checkpointing / accélération de scan pour optimiser la synchronisation à grande échelle.
### Intérêt
**Avantages potentiels :**
- **Performance** : Réduction significative du nombre de requêtes nécessaires pour synchroniser de grandes quantités de données
- **Scalabilité** : Permet de gérer des volumes importants (millions de messages) sans dégradation de performance
- **Efficacité réseau** : Réduction de la bande passante utilisée lors des synchronisations
- **Checkpointing** : Possibilité de reprendre une synchronisation depuis un point précis sans tout re-scanner
**Cas d'usage :**
- Services avec un très grand nombre de messages (millions)
- Synchronisations fréquentes sur de grandes fenêtres temporelles
- Réseaux avec bande passante limitée
- Besoin de synchronisation incrémentale efficace
### Inconvénients / Complexité
**Complexité technique :**
- Implémentation complexe (construction d'arbres de Merkle, gestion des segments)
- Nécessite une coordination entre client et serveur (relais doit supporter Merkle)
- Gestion des conflits et des branches d'arbres
- Maintenance et debugging plus difficiles
**Coût de développement :**
- Temps de développement important
- Tests complexes (volumes importants, cas limites)
- Documentation et formation nécessaires
**Alternatives existantes :**
- **Bloom filter** : Déjà implémenté, réduit efficacement les requêtes inutiles
- **Hash cache** : Déjà implémenté, évite de traiter les messages déjà vus
- **Fenêtre de scan configurable** : Permet de limiter la portée des synchronisations
### Recommandation
**Intérêt : MOYEN à FAIBLE**
**Raisons :**
1. **Bloom filter suffisant** : Le Bloom filter déjà implémenté couvre la majorité des cas d'usage d'optimisation
2. **Complexité vs bénéfice** : La complexité d'implémentation est élevée pour un gain marginal dans la plupart des cas
3. **Volumes actuels** : Les volumes de données actuels ne justifient pas nécessairement cette optimisation
4. **Dépendance serveur** : Nécessite une modification des relais pour supporter Merkle, ce qui limite l'adoption
**Quand l'implémenter :**
- Si les volumes de messages deviennent très importants (millions+)
- Si les synchronisations deviennent un goulot d'étranglement mesurable
- Si le Bloom filter ne suffit plus pour optimiser les requêtes
- Si les relais sont prêts à supporter Merkle
**Conclusion :** Optionnel, à considérer uniquement si un besoin réel de performance à grande échelle est identifié et mesuré.
---
## 2. Évolutions futures api-relay (optionnel)
### Description
Plusieurs évolutions possibles pour api-relay : base de données, authentification, WebSocket, compression, etc.
### Analyse par évolution
#### 2.1 Base de données (SQLite, PostgreSQL)
**Intérêt : ÉLEVÉ**
**Avantages :**
- **Persistance fiable** : Données persistées de manière fiable, pas de perte en cas de redémarrage
- **Performance** : Requêtes optimisées, indexation efficace
- **Scalabilité** : Gestion de volumes importants
- **Transactions** : Garanties ACID pour la cohérence des données
- **Maintenance** : Outils de backup, monitoring, maintenance standardisés
**Inconvénients :**
- Configuration et déploiement plus complexes
- Nécessite une migration depuis le stockage en mémoire actuel
**Recommandation :** **À implémenter en production**. Le stockage en mémoire actuel est suffisant pour le développement mais pas pour la production.
---
#### 2.2 Authentification pour endpoints POST
**Intérêt : MOYEN**
**Avantages :**
- **Sécurité** : Protection contre les abus (spam, DoS)
- **Traçabilité** : Identification des sources de messages
- **Contrôle d'accès** : Limitation à des clients autorisés
**Inconvénients :**
- Complexité de gestion des clés/tokens
- Nécessite une infrastructure d'authentification
- Peut limiter la décentralisation (nécessite une autorité pour émettre les tokens)
**Recommandation :** **Optionnel**. Utile si des problèmes d'abus sont identifiés. Le modèle actuel (pull-only, déduplication par hash) offre déjà une certaine protection.
---
#### 2.3 Compression des messages stockés
**Intérêt : FAIBLE**
**Avantages :**
- Réduction de l'espace disque
- Réduction de la bande passante réseau
**Inconvénients :**
- CPU supplémentaire pour compression/décompression
- Complexité de gestion (format, version)
- Les messages sont déjà relativement petits (JSON)
**Recommendation :** **Non prioritaire**. Les messages sont déjà compacts (JSON). La compression n'apporterait qu'un gain marginal.
---
#### 2.4 Indexation avancée (service UUID, type UUID)
**Intérêt : MOYEN**
**Avantages :**
- Requêtes plus rapides pour des filtres spécifiques
- Meilleure performance sur de gros volumes
**Inconvénients :**
- Complexité de gestion des index
- Maintenance supplémentaire
**Recommandation :** **Optionnel**. L'indexation par `service_uuid` est déjà partiellement implémentée. À améliorer si les volumes augmentent.
---
#### 2.5 WebSocket pour notifications en temps réel
**Intérêt : FAIBLE à MOYEN**
**Avantages :**
- Notifications en temps réel (push)
- Réduction de la latence
- Meilleure expérience utilisateur
**Inconvénients :**
- **Contradiction avec le modèle pull-only** : Le modèle actuel est volontairement pull-only pour la décentralisation
- Complexité de gestion des connexions WebSocket
- Nécessite une infrastructure serveur plus complexe
- Peut compromettre la décentralisation (dépendance au serveur)
**Recommandation :** **Non recommandé**. Contredit le principe de décentralisation et le modèle pull-only. Le polling actuel est suffisant et plus robuste.
---
#### 2.6 Métriques Prometheus
**Intérêt : ÉLEVÉ**
**Avantages :**
- Monitoring et observabilité
- Détection proactive des problèmes
- Métriques de performance
**Inconvénients :**
- Configuration supplémentaire
- Infrastructure de monitoring nécessaire
**Recommandation :** **À implémenter en production**. Déjà partiellement implémenté (`GET /metrics`). À compléter selon les besoins de monitoring.
---
#### 2.7 Logging structuré (Winston, Pino)
**Intérêt : ÉLEVÉ**
**Avantages :**
- Meilleure traçabilité
- Analyse des logs facilitée
- Debugging plus efficace
**Inconvénients :**
- Configuration supplémentaire
- Gestion des logs (rotation, stockage)
**Recommandation :** **Déjà implémenté**. Pino est déjà utilisé dans api-relay. À maintenir et améliorer si nécessaire.
---
## Synthèse
### À implémenter en priorité
1. **Base de données** (SQLite/PostgreSQL) - Production
2. **Métriques Prometheus** - Compléter l'implémentation existante
### Optionnel selon besoins
3. **Authentification POST** - Si problèmes d'abus
4. **Indexation avancée** - Si volumes importants
### Non recommandé
5. **Compression** - Gain marginal
6. **WebSocket** - Contredit le modèle pull-only décentralisé
### Déjà en place
7. **Logging structuré** - Pino déjà implémenté
8. **Rate limiting** - Déjà implémenté
9. **CORS** - Déjà implémenté
10. **Bloom filter** - Déjà implémenté
---
## Conclusion
Les évolutions les plus pertinentes pour api-relay sont :
- **Base de données** : Nécessaire pour la production
- **Métriques** : Utile pour le monitoring
Les autres évolutions sont optionnelles et dépendent des besoins spécifiques identifiés en production.