335 lines
9.2 KiB
Markdown
335 lines
9.2 KiB
Markdown
## Architecture - sdk_relay
|
|
|
|
## Vue d'Ensemble
|
|
|
|
`sdk_relay` est un service de relais Rust pour les paiements silencieux Bitcoin, conçu pour fonctionner dans l'écosystème sdk_relay.
|
|
|
|
## Architecture Générale
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ Client Web │ │ Client HTTP │ │ Client Rust │
|
|
│ (WebSocket) │ │ (REST API) │ │ (Library) │
|
|
└─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘
|
|
│ │ │
|
|
└──────────────────────┼──────────────────────┘
|
|
│
|
|
┌─────────────▼─────────────┐
|
|
│ sdk_relay │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ WebSocket Server │ │
|
|
│ │ (tokio-tungstenite)│ │
|
|
│ └─────────────────────┘ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ HTTP Server │ │
|
|
│ │ (hyper) │ │
|
|
│ └─────────────────────┘ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ Sync Manager │ │
|
|
│ │ (Mesh Network) │ │
|
|
│ └─────────────────────┘ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ Bitcoin Core │ │
|
|
│ │ (RPC + ZMQ) │ │
|
|
│ └─────────────────────┘ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ Blindbit │ │
|
|
│ │ (HTTP API) │ │
|
|
│ └─────────────────────┘ │
|
|
└─────────────────────────────┘
|
|
```
|
|
|
|
## Composants Principaux
|
|
|
|
### 1. Serveur WebSocket (`src/websocket.rs`)
|
|
- **Technologie** : `tokio-tungstenite`
|
|
- **Port** : 8090 (configurable)
|
|
- **Fonctionnalités** :
|
|
- Handshake WebSocket
|
|
- Gestion des connexions multiples
|
|
- Messages temps réel
|
|
- Heartbeat automatique
|
|
|
|
### 2. Serveur HTTP (`src/http.rs`)
|
|
- **Technologie** : `hyper`
|
|
- **Port** : 8091 (configurable)
|
|
- **Fonctionnalités** :
|
|
- API REST pour les clients
|
|
- Endpoints de santé
|
|
- Métriques et statistiques
|
|
- Configuration dynamique
|
|
|
|
### 3. Gestionnaire de Synchronisation (`src/sync.rs`)
|
|
- **Architecture** : Mesh Network
|
|
- **Fonctionnalités** :
|
|
- Découverte automatique des relais
|
|
- Synchronisation périodique
|
|
- Cache de déduplication
|
|
- Métriques de synchronisation
|
|
|
|
### 4. Intégration Bitcoin Core (`src/daemon.rs`)
|
|
- **RPC** : `bitcoincore-rpc`
|
|
- **ZMQ** : Notifications temps réel
|
|
- **Fonctionnalités** :
|
|
- Connexion RPC sécurisée
|
|
- Écoute des blocs/transactions
|
|
- Gestion des wallets
|
|
- Scan des paiements silencieux
|
|
|
|
### 5. Service Blindbit (`src/blindbit.rs`)
|
|
- **Client HTTP** : `reqwest`
|
|
- **Fonctionnalités** :
|
|
- Récupération des filtres
|
|
- Validation des paiements
|
|
- Cache des résultats
|
|
|
|
## Types de Synchronisation
|
|
|
|
### SyncType Enum
|
|
```rust
|
|
pub enum SyncType {
|
|
StateSync, // État général du relais
|
|
ProcessSync, // Processus en cours
|
|
MemberSync, // Membres du réseau
|
|
TxSync, // Transactions
|
|
BlockSync, // Blocs
|
|
PeerSync, // Pairs connectés
|
|
RelaySync, // Informations des relais
|
|
HealthSync, // Santé du système
|
|
MetricsSync, // Métriques de performance
|
|
ConfigSync, // Configuration
|
|
CapabilitySync, // Capacités du relais
|
|
}
|
|
```
|
|
|
|
### Messages de Synchronisation
|
|
```rust
|
|
pub struct SyncMessage {
|
|
pub sync_type: SyncType,
|
|
pub relay_id: String,
|
|
pub payload: SyncPayload,
|
|
pub timestamp: u64,
|
|
pub message_id: String,
|
|
}
|
|
|
|
pub enum SyncPayload {
|
|
StateData { state: HashMap<String, String> },
|
|
ProcessData { processes: Vec<ProcessInfo> },
|
|
MemberData { members: Vec<MemberInfo> },
|
|
RelayData { relays: Vec<RelayInfo> },
|
|
HealthData { health: HealthStatus },
|
|
MetricsData { metrics: SyncMetrics },
|
|
// ... autres types
|
|
}
|
|
```
|
|
|
|
## Cache de Déduplication
|
|
|
|
### MessageCache
|
|
```rust
|
|
pub struct MessageCache {
|
|
cache: Arc<Mutex<HashMap<String, CacheEntry>>>,
|
|
ttl: Duration,
|
|
}
|
|
|
|
pub struct CacheEntry {
|
|
pub message: SyncMessage,
|
|
pub timestamp: SystemTime,
|
|
}
|
|
```
|
|
|
|
**Fonctionnalités** :
|
|
- Évite les doublons de messages
|
|
- TTL configurable
|
|
- Nettoyage automatique
|
|
- Performance optimisée
|
|
|
|
## Configuration
|
|
|
|
### Fichier de Configuration (`.conf`)
|
|
```toml
|
|
## Bitcoin Core
|
|
core_url=http://bitcoin:18443
|
|
core_wallet=relay_wallet
|
|
zmq_url=tcp://bitcoin:29000
|
|
|
|
## WebSocket
|
|
ws_url=0.0.0.0:8090
|
|
|
|
## Blindbit
|
|
blindbit_url=http://blindbit:8000
|
|
|
|
## Synchronisation
|
|
relay_id=relay-1
|
|
sync_interval=30
|
|
health_interval=60
|
|
|
|
## Réseau
|
|
network=signet
|
|
dev_mode=true
|
|
```
|
|
|
|
### Variables d'Environnement
|
|
```bash
|
|
RUST_LOG=debug,bitcoincore_rpc=trace
|
|
BITCOIN_COOKIE_PATH=/home/bitcoin/.4nk/bitcoin.cookie
|
|
ENABLE_SYNC_TEST=1
|
|
```
|
|
|
|
## Flux de Données
|
|
|
|
### 1. Initialisation
|
|
```
|
|
1. Chargement de la configuration
|
|
2. Connexion à Bitcoin Core
|
|
3. Connexion à Blindbit
|
|
4. Démarrage du serveur WebSocket
|
|
5. Démarrage du serveur HTTP
|
|
6. Initialisation du SyncManager
|
|
7. Découverte des relais
|
|
```
|
|
|
|
### 2. Synchronisation Périodique
|
|
```
|
|
1. Collecte des données locales
|
|
2. Création des messages de sync
|
|
3. Envoi aux relais connus
|
|
4. Réception des messages
|
|
5. Mise à jour du cache
|
|
6. Application des changements
|
|
7. Mise à jour des métriques
|
|
```
|
|
|
|
### 3. Traitement des Paiements
|
|
```
|
|
1. Réception notification ZMQ
|
|
2. Récupération du bloc/transaction
|
|
3. Scan des outputs
|
|
4. Vérification avec Blindbit
|
|
5. Notification aux clients
|
|
6. Synchronisation avec les relais
|
|
```
|
|
|
|
## Métriques et Monitoring
|
|
|
|
### SyncMetrics
|
|
```rust
|
|
pub struct SyncMetrics {
|
|
pub known_relays: u64,
|
|
pub mesh_connections: u64,
|
|
pub sync_requests: u64,
|
|
pub sync_responses: u64,
|
|
pub cache_hits: u64,
|
|
pub cache_misses: u64,
|
|
pub avg_latency: f64,
|
|
pub error_count: u64,
|
|
}
|
|
```
|
|
|
|
### HealthStatus
|
|
```rust
|
|
pub enum HealthStatus {
|
|
Healthy,
|
|
Warning,
|
|
Critical,
|
|
Unknown,
|
|
}
|
|
```
|
|
|
|
## Sécurité
|
|
|
|
### Authentification
|
|
- **Bitcoin Core** : Cookie d'authentification
|
|
- **WebSocket** : Authentification optionnelle
|
|
- **HTTP** : Authentification basique
|
|
|
|
### Validation
|
|
- Validation des messages de synchronisation
|
|
- Vérification des signatures (futur)
|
|
- Rate limiting
|
|
- Protection contre les attaques DoS
|
|
|
|
## Performance
|
|
|
|
### Optimisations
|
|
- **Asynchrone** : `tokio` pour la concurrence
|
|
- **Cache** : Déduplication des messages
|
|
- **Pooling** : Connexions HTTP réutilisées
|
|
- **Compression** : Messages compressés (futur)
|
|
|
|
### Métriques de Performance
|
|
- Latence de synchronisation
|
|
- Débit des messages
|
|
- Utilisation mémoire
|
|
- CPU usage
|
|
|
|
## Déploiement
|
|
|
|
### Docker
|
|
```dockerfile
|
|
FROM rust:1.70 as builder
|
|
WORKDIR /app
|
|
COPY . .
|
|
RUN cargo build --release
|
|
|
|
FROM debian:bookworm-slim
|
|
COPY --from=builder /app/target/release/sdk_relay /usr/local/bin/
|
|
EXPOSE 8090 8091
|
|
CMD ["sdk_relay"]
|
|
```
|
|
|
|
### Configuration Docker
|
|
```yaml
|
|
services:
|
|
sdk_relay:
|
|
image: 4nk_node_sdk_relay
|
|
ports:
|
|
- "8090:8090"
|
|
- "8091:8091"
|
|
volumes:
|
|
- ./config:/home/bitcoin/.4nk
|
|
environment:
|
|
- RUST_LOG=debug
|
|
```
|
|
|
|
## Évolution Future
|
|
|
|
### Améliorations Planifiées
|
|
1. **Chiffrement** : Messages chiffrés end-to-end
|
|
2. **Signature** : Messages signés cryptographiquement
|
|
3. **Compression** : Compression des messages
|
|
4. **Persistance** : Stockage persistant des données
|
|
5. **API REST** : Interface REST complète
|
|
|
|
### Nouvelles Fonctionnalités
|
|
1. **Plugins** : Système de plugins
|
|
2. **Webhooks** : Notifications webhook
|
|
3. **Analytics** : Tableaux de bord avancés
|
|
4. **Multi-réseaux** : Support de plusieurs réseaux Bitcoin
|
|
|
|
## Dépannage
|
|
|
|
### Problèmes Courants
|
|
1. **Connexion Bitcoin Core** : Vérifier le cookie et l'URL
|
|
2. **Synchronisation** : Vérifier la connectivité réseau
|
|
3. **WebSocket** : Vérifier les ports et le pare-feu
|
|
4. **Performance** : Monitorer les métriques
|
|
|
|
### Logs Utiles
|
|
```bash
|
|
## Logs de synchronisation
|
|
RUST_LOG=debug,bitcoincore_rpc=trace
|
|
|
|
## Logs WebSocket
|
|
RUST_LOG=debug,tokio_tungstenite=trace
|
|
|
|
## Logs HTTP
|
|
RUST_LOG=debug,hyper=trace
|
|
```
|
|
|
|
---
|
|
|
|
**Cette architecture garantit un service de relais robuste, performant et évolutif pour l'écosystème sdk_relay.** 🚀
|
|
|
|
|