- Ajout de la fonction load_external_config() pour charger la configuration externe - Ajout de la fonction parse_external_config() pour parser le fichier TOML - Modification de discover_relays() pour inclure les relais externes - Support des relais avec ancienne version (0.9.0) et capacités limitées - Ajout du fichier EXEMPLES_PRATIQUES.md avec exemples d'utilisation - Mise à jour de la documentation technique
382 lines
8.3 KiB
Markdown
382 lines
8.3 KiB
Markdown
# 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
|