sdk_relay/docs/USAGE.md

713 lines
11 KiB
Markdown

# 📖 Guide d'Utilisation - sdk_relay
Guide complet pour utiliser le service de relais sdk_relay au quotidien.
## 🚀 Démarrage Rapide
### Démarrage du Service
#### Avec Docker (Recommandé)
```bash
# Build de l'image
docker build -f Dockerfile -t sdk_relay .
# Démarrage du service
docker run -d \
--name sdk_relay \
-p 8090:8090 \
-p 8091:8091 \
-v $(pwd)/.conf:/app/.conf \
-e RUST_LOG=info \
sdk_relay
# Vérifier le statut
docker ps | grep sdk_relay
```
#### Avec Rust (Compilation native)
```bash
# Compilation release
cargo build --release
# Démarrage du service
cargo run --release -- --config .conf
# Ou en arrière-plan
nohup cargo run --release -- --config .conf > sdk_relay.log 2>&1 &
```
### Vérification du Démarrage
```bash
# Test de santé HTTP
curl http://localhost:8091/health
# Réponse attendue
{
"status": "healthy",
"timestamp": "2024-01-01T12:00:00Z",
"version": "1.0.0"
}
# Test WebSocket
wscat -c ws://localhost:8090
# Test métriques
curl http://localhost:8091/metrics
```
## 🔌 Connexion WebSocket
### Handshake Initial
#### Envoi du Handshake
```json
{
"type": "handshake",
"version": "1.0",
"client_id": "my_client_001",
"capabilities": ["silent_payments", "relay_sync"]
}
```
#### Réponse du Handshake
```json
{
"type": "handshake_response",
"status": "success",
"server_version": "1.0.0",
"capabilities": ["silent_payments", "relay_sync", "metrics"],
"session_id": "session_12345"
}
```
### Gestion des Sessions
#### Reconnexion Automatique
```javascript
// Exemple JavaScript
const ws = new WebSocket('ws://localhost:8090');
ws.onopen = function() {
// Envoyer handshake
ws.send(JSON.stringify({
type: "handshake",
version: "1.0",
client_id: "my_client_001"
}));
};
ws.onclose = function() {
// Reconnexion automatique après 5 secondes
setTimeout(() => {
connectWebSocket();
}, 5000);
};
```
#### Heartbeat
```json
// Ping toutes les 30 secondes
{
"type": "ping",
"timestamp": "2024-01-01T12:00:00Z"
}
// Réponse pong
{
"type": "pong",
"timestamp": "2024-01-01T12:00:00Z"
}
```
## 📡 API HTTP REST
### Endpoints de Base
#### GET /health
```bash
curl http://localhost:8091/health
```
**Réponse :**
```json
{
"status": "healthy",
"uptime": 3600,
"version": "1.0.0",
"connections": {
"websocket": 5,
"http": 2
}
}
```
#### GET /metrics
```bash
curl http://localhost:8091/metrics
```
**Réponse :**
```json
{
"requests_total": 1250,
"requests_per_second": 2.5,
"websocket_connections": 5,
"memory_usage_mb": 45.2,
"cpu_usage_percent": 12.5
}
```
#### GET /relays
```bash
curl http://localhost:8091/relays
```
**Réponse :**
```json
{
"relays": [
{
"id": "relay_001",
"address": "ws://relay1.example.com:8090",
"status": "connected",
"last_seen": "2024-01-01T12:00:00Z"
},
{
"id": "relay_002",
"address": "ws://relay2.example.com:8090",
"status": "disconnected",
"last_seen": "2024-01-01T11:30:00Z"
}
]
}
```
### Endpoints de Gestion
#### POST /sync/force
```bash
curl -X POST http://localhost:8091/sync/force
```
**Réponse :**
```json
{
"status": "sync_started",
"relays_count": 3,
"estimated_duration": 30
}
```
#### POST /relays/add
```bash
curl -X POST http://localhost:8091/relays/add \
-H "Content-Type: application/json" \
-d '{
"address": "ws://newrelay.example.com:8090",
"description": "Nouveau relais"
}'
```
#### DELETE /relays/{id}
```bash
curl -X DELETE http://localhost:8091/relays/relay_001
```
## 🔄 Synchronisation des Relais
### Architecture Mesh
#### Découverte des Relais
```json
// Message de découverte
{
"type": "discovery",
"relay_id": "relay_001",
"timestamp": "2024-01-01T12:00:00Z"
}
// Réponse avec liste des relais
{
"type": "discovery_response",
"relays": [
{
"id": "relay_002",
"address": "ws://relay2.example.com:8090",
"capabilities": ["silent_payments"]
}
]
}
```
#### Synchronisation des Messages
```json
// Message de synchronisation
{
"type": "sync_message",
"message_id": "msg_12345",
"content": {
"type": "silent_payment",
"data": "..."
},
"timestamp": "2024-01-01T12:00:00Z",
"ttl": 3600
}
// Accusé de réception
{
"type": "sync_ack",
"message_id": "msg_12345",
"status": "received"
}
```
### Gestion des Conflits
#### Résolution de Conflits
```json
// Détection de conflit
{
"type": "conflict_detected",
"message_id": "msg_12345",
"conflict_type": "duplicate",
"resolution": "keep_latest"
}
```
## 💰 Silent Payments
### Gestion des Paiements
#### Création d'un Paiement
```json
// Demande de création
{
"type": "create_payment",
"payment_id": "pay_12345",
"amount_sats": 100000,
"recipient": "sp1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"metadata": {
"description": "Paiement test"
}
}
// Confirmation
{
"type": "payment_created",
"payment_id": "pay_12345",
"status": "pending",
"created_at": "2024-01-01T12:00:00Z"
}
```
#### Suivi des Paiements
```json
// Mise à jour de statut
{
"type": "payment_update",
"payment_id": "pay_12345",
"status": "confirmed",
"block_height": 800000,
"txid": "abc123...",
"updated_at": "2024-01-01T12:05:00Z"
}
```
### Intégration Bitcoin Core
#### Vérification des Blocs
```json
// Notification de nouveau bloc
{
"type": "block_notification",
"block_height": 800001,
"block_hash": "def456...",
"timestamp": "2024-01-01T12:10:00Z"
}
```
#### Scan des Transactions
```json
// Demande de scan
{
"type": "scan_request",
"addresses": [
"sp1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
],
"from_block": 800000,
"to_block": 800001
}
// Résultats du scan
{
"type": "scan_response",
"results": [
{
"address": "sp1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"transactions": [
{
"txid": "abc123...",
"amount_sats": 100000,
"block_height": 800001
}
]
}
]
}
```
## 📊 Monitoring et Métriques
### Métriques en Temps Réel
#### Métriques Système
```bash
# Métriques système
curl http://localhost:8091/metrics/system
# Réponse
{
"cpu_usage_percent": 12.5,
"memory_usage_mb": 45.2,
"disk_usage_percent": 25.0,
"network_io_mbps": 1.2
}
```
#### Métriques Métier
```bash
# Métriques métier
curl http://localhost:8091/metrics/business
# Réponse
{
"payments_processed": 1250,
"payments_confirmed": 1200,
"relays_connected": 5,
"messages_synced": 5000
}
```
### Alertes et Notifications
#### Configuration des Alertes
```json
// Configuration d'alerte
{
"type": "alert_config",
"alert_id": "high_cpu",
"condition": "cpu_usage > 80",
"action": "notify_admin",
"enabled": true
}
```
#### Notifications
```json
// Notification d'alerte
{
"type": "alert",
"alert_id": "high_cpu",
"severity": "warning",
"message": "CPU usage is 85%",
"timestamp": "2024-01-01T12:00:00Z"
}
```
## 🔧 Gestion des Erreurs
### Types d'Erreurs
#### Erreurs de Connexion
```json
// Erreur de connexion WebSocket
{
"type": "error",
"error_code": "WS_CONNECTION_FAILED",
"message": "Failed to connect to relay",
"details": {
"relay_id": "relay_001",
"attempt": 3
}
}
```
#### Erreurs de Validation
```json
// Erreur de validation
{
"type": "error",
"error_code": "VALIDATION_ERROR",
"message": "Invalid payment amount",
"details": {
"field": "amount_sats",
"value": -100,
"expected": "positive integer"
}
}
```
### Gestion des Erreurs
#### Retry Automatique
```json
// Configuration retry
{
"type": "retry_config",
"max_attempts": 3,
"backoff_ms": 1000,
"max_backoff_ms": 30000
}
```
#### Fallback
```json
// Stratégie de fallback
{
"type": "fallback_config",
"primary_relay": "relay_001",
"backup_relays": ["relay_002", "relay_003"],
"failover_timeout_ms": 5000
}
```
## 🛠️ Maintenance
### Sauvegarde
#### Sauvegarde de Configuration
```bash
# Sauvegarde de la configuration
cp .conf .conf.backup.$(date +%Y%m%d)
# Sauvegarde des logs
tar -czf logs_$(date +%Y%m%d).tar.gz logs/
```
#### Sauvegarde des Données
```bash
# Export des données
curl http://localhost:8091/export/data > data_export_$(date +%Y%m%d).json
# Import des données
curl -X POST http://localhost:8091/import/data \
-H "Content-Type: application/json" \
-d @data_export_20240101.json
```
### Mise à Jour
#### Mise à Jour du Service
```bash
# Arrêt du service
docker stop sdk_relay
# Pull de la nouvelle image
docker pull sdk_relay:latest
# Redémarrage
docker run -d \
--name sdk_relay_new \
-p 8090:8090 \
-p 8091:8091 \
-v $(pwd)/.conf:/app/.conf \
sdk_relay:latest
# Vérification
curl http://localhost:8091/health
```
#### Migration des Données
```bash
# Script de migration
./scripts/migrate_data.sh
# Vérification post-migration
cargo test --test migration
```
## 🔒 Sécurité
### Authentification
#### Authentification par Token
```bash
# Génération de token
curl -X POST http://localhost:8091/auth/token \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "secure_password"
}'
# Utilisation du token
curl -H "Authorization: Bearer YOUR_TOKEN" \
http://localhost:8091/admin/status
```
#### Authentification par Certificat
```bash
# Connexion avec certificat client
curl --cert client.pem --key client.key \
https://localhost:8091/secure/endpoint
```
### Chiffrement
#### Chiffrement des Messages
```json
// Message chiffré
{
"type": "encrypted_message",
"encryption": "AES-256-GCM",
"data": "encrypted_payload_here",
"iv": "initialization_vector"
}
```
## 📈 Performance
### Optimisations
#### Pool de Connexions
```json
// Configuration du pool
{
"type": "pool_config",
"max_connections": 100,
"min_connections": 10,
"connection_timeout_ms": 5000
}
```
#### Cache
```json
// Configuration du cache
{
"type": "cache_config",
"max_size_mb": 100,
"ttl_seconds": 3600,
"eviction_policy": "lru"
}
```
### Benchmarks
#### Tests de Performance
```bash
# Test de charge
ab -n 1000 -c 10 http://localhost:8091/health
# Test WebSocket
./scripts/websocket_benchmark.sh
# Test de synchronisation
cargo test --test performance
```
## 🚨 Dépannage
### Problèmes Courants
#### Service ne démarre pas
```bash
# Vérifier les logs
docker logs sdk_relay
# Vérifier la configuration
cargo run -- --config .conf --check
# Vérifier les ports
netstat -tlnp | grep 809
```
#### Connexions WebSocket échouent
```bash
# Test de connectivité
telnet localhost 8090
# Vérifier le firewall
sudo ufw status
# Test avec wscat
wscat -c ws://localhost:8090
```
#### Synchronisation lente
```bash
# Vérifier les métriques
curl http://localhost:8091/metrics
# Vérifier les relais
curl http://localhost:8091/relays
# Forcer une synchronisation
curl -X POST http://localhost:8091/sync/force
```
### Logs et Debugging
#### Niveaux de Log
```bash
# Log détaillé
RUST_LOG=debug cargo run -- --config .conf
# Log spécifique
RUST_LOG=sdk_relay::websocket=debug cargo run -- --config .conf
```
#### Analyse des Logs
```bash
# Logs en temps réel
tail -f logs/sdk_relay.log
# Recherche d'erreurs
grep ERROR logs/sdk_relay.log
# Statistiques des logs
awk '/ERROR/ {count++} END {print count}' logs/sdk_relay.log
```
---
**🎯 Service sdk_relay - Prêt pour une utilisation en production !** ✨