# sdk_relay Service de relais pour l'intégration des Silent Payments avec Bitcoin Core. ## 🎯 Vue d'ensemble `sdk_relay` est un service Rust qui agit comme un pont entre les applications clientes et l'infrastructure Bitcoin pour les paiements silencieux. Il fournit une interface WebSocket pour la communication en temps réel et gère l'intégration avec Bitcoin Core et Blindbit. ## 🏗️ Architecture ### Composants principaux - **WebSocket Server** : Interface de communication en temps réel - **Bitcoin Core RPC** : Connexion au nœud Bitcoin pour les opérations blockchain - **ZMQ Integration** : Écoute des événements Bitcoin en temps réel - **Silent Payments Wallet** : Gestion des adresses et transactions silencieuses - **Blindbit Integration** : Service de filtres pour les paiements silencieux - **State Management** : Persistance des données wallet et processus ### Flux de données ``` Client App ←→ WebSocket ←→ sdk_relay ←→ Bitcoin Core RPC ↓ Blindbit Service ↓ ZMQ Events ``` ## 🚀 Fonctionnalités ### Core Features - ✅ **WebSocket Server** : Communication bidirectionnelle en temps réel - ✅ **Silent Payments** : Support complet des paiements silencieux - ✅ **Wallet Management** : Gestion automatique des wallets SP - ✅ **Block Scanning** : Scan automatique des blocs pour les outputs - ✅ **Transaction Broadcasting** : Diffusion des transactions - ✅ **State Persistence** : Sauvegarde automatique de l'état - ✅ **ZMQ Integration** : Écoute des événements Bitcoin - ✅ **Retry Logic** : Gestion robuste des erreurs de connexion ### Advanced Features - 🔄 **Automatic Recovery** : Récupération automatique après redémarrage - 📊 **Balance Tracking** : Suivi en temps réel des balances - 🔒 **UTXO Freezing** : Protection contre les doubles dépenses - 🎯 **Process Management** : Gestion des processus de paiement - 👥 **Member Management** : Gestion des membres et permissions ## 📋 Configuration ### Fichier de configuration Le service utilise un fichier de configuration simple au format `key=value` : ```ini # Bitcoin Core RPC core_url=http://bitcoin:18443 core_wallet=relay_wallet network=signet # WebSocket Server ws_url=0.0.0.0:8090 # Blindbit Service blindbit_url=http://blindbit:8000 # ZMQ Events zmq_url=tcp://bitcoin:29000 # Data Storage data_dir=.4nk wallet_name=relay_wallet.json # Authentication cookie_path=/home/bitcoin/.4nk/bitcoin.cookie ``` ### Variables d'environnement - `RUST_LOG` : Niveau de logging (debug, info, warn, error) - `HOME` : Répertoire utilisateur pour les chemins relatifs ## 🔧 Installation ### Prérequis - Rust 1.89+ - Bitcoin Core (avec RPC et ZMQ activés) - Blindbit Service - Connexion réseau vers les services ### Compilation ```bash # Cloner le repository git clone https://git.4nkweb.com/4nk/sdk_relay.git cd sdk_relay # Compiler en mode release cargo build --release # Lancer le service ./target/release/sdk_relay --config .conf ``` ### Docker ```bash # Construire l'image docker build -t sdk_relay . # Lancer le container docker run -d \ --name sdk_relay \ --network 4nk_node_btcnet \ -v bitcoin_data:/home/bitcoin/.bitcoin \ -v sdk_relay_data:/home/bitcoin/.4nk \ sdk_relay ``` ## 🌐 API WebSocket ### Connexion ```javascript const ws = new WebSocket('ws://localhost:8090'); ``` ### Messages supportés #### Handshake ```json { "type": "handshake", "version": "1.0", "capabilities": ["silent_payments", "broadcast"] } ``` #### Nouvelle transaction ```json { "type": "new_tx", "transaction": "hex_encoded_transaction" } ``` #### Broadcast ```json { "type": "broadcast", "message": "broadcast_content", "target": "all|specific_peers" } ``` ### Événements reçus #### Mise à jour de balance ```json { "type": "balance_update", "balance": "1000000", "outputs": 5 } ``` #### Nouvelle transaction détectée ```json { "type": "tx_detected", "txid": "transaction_hash", "amount": "500000", "address": "sp_address" } ``` ## 🔍 Monitoring et Debug ### Logs Le service génère des logs détaillés pour le debugging : ```bash # Activer les logs détaillés export RUST_LOG=debug,sdk_relay=trace # Lancer avec logs ./target/release/sdk_relay --config .conf ``` ### Healthcheck Le service inclut un healthcheck intégré : ```bash # Test manuel du healthcheck ./healthcheck.sh # Vérifier l'état du service curl -f http://localhost:8091/health ``` ### Métriques - **Connexions WebSocket actives** - **Transactions traitées** - **Balance actuelle** - **État de la synchronisation** ## 🛠️ Développement ### Structure du projet ``` src/ ├── main.rs # Point d'entrée et orchestration ├── config.rs # Gestion de la configuration ├── daemon.rs # Interface Bitcoin Core RPC ├── scan.rs # Scan des blocs et transactions ├── message.rs # Gestion des messages WebSocket ├── commit.rs # Gestion des commits et membres └── faucet.rs # Service de faucet (développement) ``` ### Tests ```bash # Tests unitaires cargo test # Tests d'intégration cargo test --test integration # Tests avec mocks cargo test --features mock ``` ### Debugging ```bash # Mode debug avec strace strace -f ./target/debug/sdk_relay --config .conf # Profiling avec perf perf record ./target/release/sdk_relay --config .conf ``` ## 🔒 Sécurité ### Authentification - **Cookie Bitcoin Core** : Authentification sécurisée via cookie - **Permissions de fichiers** : Restriction des accès aux fichiers sensibles - **Validation des transactions** : Vérification avant broadcast ### Isolation - **Réseau privé** : Communication via réseau Docker isolé - **Volumes sécurisés** : Données persistantes isolées - **Utilisateur non-root** : Exécution sous utilisateur bitcoin ## 📊 Performance ### Optimisations - **Compilation release** : Optimisations de performance - **Async/await** : Gestion asynchrone des connexions - **Connection pooling** : Réutilisation des connexions RPC - **Memory management** : Gestion efficace de la mémoire ### Métriques de performance - **Latence WebSocket** : < 10ms - **Throughput RPC** : 1000+ req/s - **Memory usage** : < 100MB - **CPU usage** : < 5% en idle ## 🚨 Dépannage ### Problèmes courants #### Connexion Bitcoin Core échoue ```bash # Vérifier la connectivité curl -s http://bitcoin:18443 # Vérifier le cookie ls -la /home/bitcoin/.4nk/bitcoin.cookie ``` #### WebSocket non accessible ```bash # Vérifier le port netstat -tuln | grep 8090 # Tester la connexion websocat ws://localhost:8090 ``` #### Scan des blocs lent ```bash # Vérifier Blindbit curl -s http://blindbit:8000 # Logs de scan tail -f logs/sdk_relay.log | grep scan ``` ### Logs utiles ```bash # Logs en temps réel tail -f logs/sdk_relay.log # Erreurs uniquement grep ERROR logs/sdk_relay.log # Connexions WebSocket grep "WebSocket" logs/sdk_relay.log ``` ## 🤝 Contribution ### Guidelines 1. **Code Style** : Suivre les conventions Rust 2. **Tests** : Ajouter des tests pour les nouvelles fonctionnalités 3. **Documentation** : Mettre à jour la documentation 4. **Logs** : Ajouter des logs appropriés ### Workflow ```bash # Fork et clone git clone https://git.4nkweb.com/your-fork/sdk_relay.git # Branche feature git checkout -b feature/nouvelle-fonctionnalite # Tests cargo test # Commit git commit -m "feat: ajouter nouvelle fonctionnalité" # Push et PR git push origin feature/nouvelle-fonctionnalite ``` ## 📄 Licence Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails. ## 🆘 Support - **Issues** : [GitLab Issues](https://git.4nkweb.com/4nk/sdk_relay/-/issues) - **Documentation** : [Wiki du projet](https://git.4nkweb.com/4nk/sdk_relay/-/wikis) - **Discussions** : [GitLab Discussions](https://git.4nkweb.com/4nk/sdk_relay/-/issues) ## 🔄 Roadmap ### Version 1.1 - [ ] Support multi-wallets - [ ] API REST complémentaire - [ ] Métriques Prometheus - [ ] Configuration via variables d'environnement ### Version 1.2 - [ ] Support Lightning Network - [ ] Interface d'administration web - [ ] Backup automatique - [ ] Clustering ### Version 2.0 - [ ] Support multi-chaînes - [ ] Plugins système - [ ] Interface graphique - [ ] Intégration DeFi