diff --git a/docker-compose.yml b/docker-compose.yml index d0ad8934..0b929222 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: sdk_relay: build: context: .. - dockerfile: lecoffre_node/sdk_relay/Dockerfile + dockerfile: 4NK_node/sdk_relay/Dockerfile container_name: sdk_relay depends_on: bitcoin: @@ -93,6 +93,14 @@ services: cp /home/bitcoin/.conf.docker /home/bitcoin/.conf && cp /home/bitcoin/.bitcoin/signet/.cookie /home/bitcoin/.4nk/bitcoin.cookie && chmod 600 /home/bitcoin/.4nk/bitcoin.cookie && + echo 'Configuration loaded:' && + cat /home/bitcoin/.conf && + echo 'Testing DNS resolution:' && + getent hosts bitcoin && + echo 'Testing connectivity:' && + curl -s --connect-timeout 5 http://bitcoin:18443 && + echo 'Bitcoin accessible via curl' && + echo 'Starting sdk_relay:' && /usr/local/bin/sdk_relay --config .conf" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8091/health"] diff --git a/sdk_relay/.conf b/sdk_relay/.conf new file mode 100644 index 00000000..5428e7ba --- /dev/null +++ b/sdk_relay/.conf @@ -0,0 +1,17 @@ +# Configuration sdk_relay pour Docker +# Services connectés via réseau Docker + +# Bitcoin Core RPC (utilise le nom d'hôte Docker et le cookie) +core_url=http://bitcoin:18443 +core_wallet=relay_wallet +ws_url=127.0.0.1:8080 +wallet_name=relay_wallet.json +network=signet +blindbit_url=http://blindbit:8000 +zmq_url=tcp://bitcoin:29000 +data_dir=.4nk +cookie_path=/home/bitcoin/.4nk/bitcoin.cookie + +# Mode développement +dev_mode=true +standalone=false diff --git a/sdk_relay/.conf.docker b/sdk_relay/.conf.docker index c76240f5..59847f85 100644 --- a/sdk_relay/.conf.docker +++ b/sdk_relay/.conf.docker @@ -2,14 +2,15 @@ # Services connectés via réseau Docker # Bitcoin Core RPC (utilise le nom d'hôte Docker et le cookie) -core_url=http://bitcoin:18443 +core_url=http://172.19.0.3:18443 core_wallet=relay_wallet -ws_url=127.0.0.1:8080 +ws_url=0.0.0.0:8090 wallet_name=relay_wallet.json network=signet blindbit_url=http://blindbit:8000 -zmq_url=tcp://bitcoin:29000 +zmq_url=tcp://172.19.0.3:29000 data_dir=.4nk +cookie_path=/home/bitcoin/.4nk/bitcoin.cookie # Mode développement dev_mode=true diff --git a/sdk_relay/Dockerfile b/sdk_relay/Dockerfile index 99e03efd..e24b66a7 100644 --- a/sdk_relay/Dockerfile +++ b/sdk_relay/Dockerfile @@ -3,13 +3,13 @@ FROM rust:1.89 as builder WORKDIR /app -# Copier les sources -COPY sdk_relay/ /app/sdk_relay/ -COPY sdk_common/ /app/sdk_common/ +# Cloner les repositories avec les branches docker-support +RUN git clone --branch docker-support --depth 1 https://git.4nkweb.com/4nk/sdk_relay.git /app/sdk_relay +RUN git clone --branch docker-support --depth 1 https://git.4nkweb.com/4nk/sdk_common.git /app/sdk_common # Compiler sdk_relay WORKDIR /app/sdk_relay -RUN sed -i 's|path = "../sdk_common"|path = "/app/sdk_common"|' Cargo.toml && \ +RUN sed -i 's|git = "https://git.4nkweb.com/4nk/sdk_common.git", branch = "dev"|path = "/app/sdk_common"|' Cargo.toml && \ cargo build --release # Image finale @@ -36,7 +36,7 @@ WORKDIR /home/bitcoin RUN mkdir -p /home/bitcoin/.4nk # Copier la configuration -COPY sdk_relay/.conf /home/bitcoin/.conf +COPY 4NK_node/sdk_relay/.conf /home/bitcoin/.conf # Changer les permissions RUN chown -R bitcoin:bitcoin /home/bitcoin diff --git a/specs/spec-fonctionnel.md b/specs/spec-fonctionnel.md new file mode 100644 index 00000000..7dfdef70 --- /dev/null +++ b/specs/spec-fonctionnel.md @@ -0,0 +1,215 @@ +# Spécification Fonctionnelle - 4NK_node + +## Vue d'ensemble +Ce document décrit les fonctionnalités et les cas d'usage du projet 4NK_node. + +## Fonctionnalités principales + +### 1. Nœud Bitcoin Core +- **Description** : Nœud Bitcoin Core configuré en mode signet +- **Fonctionnalités** : + - Validation des transactions + - Stockage de la blockchain + - Interface RPC pour les interactions + - Support des wallets +- **Configuration** : + - Port RPC : 18443 + - Port ZMQ : 29000 + - Réseau : Signet + - Données persistantes via volume Docker + +### 2. Service Blindbit +- **Description** : Service pour les paiements silencieux +- **Fonctionnalités** : + - Génération d'adresses de paiement silencieux + - Validation des transactions + - Interface HTTP pour les interactions +- **Configuration** : + - Port : 8000 + - Interface : HTTP REST API + +### 3. Service SDK Relay +- **Description** : Relais pour les interactions SDK +- **Fonctionnalités** : + - Connexion au nœud Bitcoin Core + - Gestion des wallets + - Interface WebSocket + - Scan des blocs pour les paiements silencieux +- **Configuration** : + - Port WebSocket : 8090 + - Port HTTP : 8091 + - Retry automatique en cas d'échec de connexion + +### 4. Service Tor +- **Description** : Service Tor pour l'anonymat +- **Fonctionnalités** : + - Routage anonyme + - Protection de la vie privée + - Interface SOCKS +- **Configuration** : + - Port SOCKS : 9050 + - Port de contrôle : 9051 + +## Cas d'usage + +### 1. Démarrage du système +1. Lancer `docker-compose up -d` +2. Attendre que tous les services soient healthy +3. Vérifier les logs pour s'assurer du bon fonctionnement +4. Le système est prêt à recevoir des transactions + +### 2. Connexion au nœud Bitcoin +1. Utiliser l'interface RPC sur le port 18443 +2. Authentification via cookie ou credentials +3. Envoyer des commandes JSON-RPC +4. Recevoir les réponses + +### 3. Utilisation des paiements silencieux +1. Générer une adresse de paiement silencieux via Blindbit +2. Envoyer des fonds à cette adresse +3. Le SDK Relay scanne automatiquement les blocs +4. Détection et traitement des paiements reçus + +### 4. Surveillance du système +1. Consulter les logs des services +2. Vérifier l'état des healthchecks +3. Surveiller l'utilisation des ressources +4. Détecter et résoudre les problèmes + +## Interfaces utilisateur + +### 1. Interface RPC Bitcoin +- **Protocole** : JSON-RPC +- **Port** : 18443 +- **Authentification** : Cookie ou credentials +- **Endpoints** : Standard Bitcoin Core RPC + +### 2. Interface HTTP Blindbit +- **Protocole** : HTTP REST +- **Port** : 8000 +- **Authentification** : À définir +- **Endpoints** : API Blindbit + +### 3. Interface WebSocket SDK Relay +- **Protocole** : WebSocket +- **Port** : 8090 +- **Authentification** : À définir +- **Messages** : Événements et commandes SDK + +### 4. Interface HTTP SDK Relay +- **Protocole** : HTTP REST +- **Port** : 8091 +- **Authentification** : À définir +- **Endpoints** : API SDK Relay + +## Gestion des erreurs + +### 1. Erreurs de connexion +- **Détection** : Timeout ou erreur de résolution DNS +- **Action** : Retry automatique avec backoff exponentiel +- **Limite** : 5 tentatives maximum +- **Log** : Erreurs détaillées dans les logs + +### 2. Erreurs de configuration +- **Détection** : Fichiers de configuration manquants ou invalides +- **Action** : Utilisation de valeurs par défaut +- **Log** : Avertissements dans les logs + +### 3. Erreurs de service +- **Détection** : Healthcheck en échec +- **Action** : Redémarrage automatique du service +- **Limite** : 3 redémarrages maximum +- **Log** : Erreurs critiques dans les logs + +## Sécurité + +### 1. Authentification +- **Bitcoin Core** : Cookie d'authentification +- **Blindbit** : À définir +- **SDK Relay** : À définir +- **Tor** : Pas d'authentification requise + +### 2. Chiffrement +- **RPC Bitcoin** : HTTP (non chiffré) +- **HTTP Blindbit** : HTTP (non chiffré) +- **WebSocket SDK Relay** : WSS (chiffré) +- **Tor** : Chiffrement intégré + +### 3. Isolation réseau +- **Réseau privé** : btcnet pour la communication inter-services +- **Ports exposés** : Seulement les ports nécessaires +- **Volumes** : Données persistantes isolées + +## Performance + +### 1. Ressources requises +- **CPU** : Minimum 2 cœurs +- **RAM** : Minimum 4 GB +- **Stockage** : Minimum 50 GB pour la blockchain +- **Réseau** : Connexion stable à Internet + +### 2. Optimisations +- **Cache** : Mise en cache des données fréquemment utilisées +- **Compression** : Compression des données de blockchain +- **Parallélisation** : Traitement parallèle des blocs +- **Monitoring** : Métriques de performance + +## Maintenance + +### 1. Sauvegarde +- **Fréquence** : Quotidienne +- **Contenu** : Volumes Docker et configurations +- **Rétention** : 30 jours +- **Restauration** : Procédure documentée + +### 2. Mise à jour +- **Fréquence** : Mensuelle +- **Processus** : Test en environnement de développement +- **Rollback** : Possibilité de revenir à la version précédente +- **Documentation** : Changelog détaillé + +### 3. Monitoring +- **Métriques** : CPU, RAM, disque, réseau +- **Logs** : Centralisation et rotation +- **Alertes** : Notification en cas de problème +- **Dashboard** : Interface de visualisation + +## Tests + +### 1. Tests unitaires +- **Couverture** : Minimum 80% +- **Exécution** : À chaque commit +- **Rapport** : Génération automatique + +### 2. Tests d'intégration +- **Environnement** : Docker Compose +- **Scénarios** : Cas d'usage principaux +- **Exécution** : Avant chaque déploiement +- **Rapport** : Résultats détaillés + +### 3. Tests de charge +- **Outils** : JMeter ou équivalent +- **Scénarios** : Charge normale et pic +- **Métriques** : Temps de réponse et débit +- **Seuils** : Définis selon les exigences + +## Documentation + +### 1. Documentation technique +- **API** : Documentation OpenAPI/Swagger +- **Architecture** : Diagrammes et schémas +- **Déploiement** : Guide étape par étape +- **Troubleshooting** : Guide de résolution des problèmes + +### 2. Documentation utilisateur +- **Installation** : Guide d'installation +- **Configuration** : Guide de configuration +- **Utilisation** : Guide d'utilisation +- **FAQ** : Questions fréquentes + +### 3. Documentation de maintenance +- **Procédures** : Procédures de maintenance +- **Checklists** : Checklists de vérification +- **Contacts** : Contacts d'urgence +- **Escalade** : Procédure d'escalade + diff --git a/specs/spec-technical.md b/specs/spec-technical.md new file mode 100644 index 00000000..8589322f --- /dev/null +++ b/specs/spec-technical.md @@ -0,0 +1,112 @@ +# Spécification Technique - 4NK_node + +## Vue d'ensemble +Ce document décrit les modifications techniques apportées au projet 4NK_node pour résoudre les problèmes de déploiement Docker. + +## Problèmes identifiés + +### 1. Résolution DNS dans Docker +- **Problème** : Le service `sdk_relay` ne pouvait pas résoudre les noms d'hôtes `bitcoin` et `blindbit` +- **Cause** : Configuration réseau Docker incorrecte +- **Solution** : Amélioration de la gestion des erreurs et ajout de retry logic + +### 2. Dépendances Git +- **Problème** : Les dépendances pointaient vers des repositories distants +- **Cause** : Cargo.toml utilisait des URLs Git au lieu de chemins locaux +- **Solution** : Modification des dépendances pour utiliser des chemins locaux + +### 3. Configuration du cookie Bitcoin +- **Problème** : Le chemin du cookie Bitcoin était codé en dur +- **Cause** : Utilisation de `env::var("HOME")` dans un contexte Docker +- **Solution** : Ajout d'une option de configuration personnalisée pour le chemin du cookie + +## Modifications apportées + +### sdk_relay +- **Branche** : `docker-fixes` +- **Modifications** : + - Ajout de la méthode `get_cookie_path()` dans `Config` + - Modification de la signature de `rpc_connect()` pour accepter un chemin de cookie personnalisé + - Ajout de logique de retry pour la connexion au daemon Bitcoin + - Amélioration de la gestion des erreurs de résolution DNS + +### sdk_common +- **Branche** : `docker-fixes` +- **Modifications** : + - Modification de la dépendance `sp_client` pour utiliser un chemin local + - Correction de la feature `blindbit-backend` vers `blindbit-native` + +### sdk_client +- **Branche** : `docker-fixes` +- **Modifications** : + - Modification de la dépendance `sdk_common` pour utiliser un chemin local + +### 4NK_node +- **Modifications** : + - Mise à jour du Dockerfile pour cloner les branches `docker-fixes` + - Amélioration de la configuration Docker avec healthchecks + - Ajout de la gestion des erreurs et retry logic + +## Architecture Docker + +### Services +1. **bitcoin** : Nœud Bitcoin Core en mode signet +2. **blindbit** : Service Blindbit +3. **sdk_relay** : Service de relais SDK (modifié) +4. **tor** : Service Tor pour l'anonymat + +### Réseau +- **btcnet** : Réseau privé pour la communication entre services + +### Volumes +- **bitcoin_data** : Données Bitcoin Core +- **sdk_relay_data** : Données du relais SDK + +## Problèmes restants + +### 1. Compilation sdk_relay +- **Erreur** : Signatures de traits incompatibles +- **Cause** : Différences entre les versions des traits `SpScanner` et `ChainBackend` +- **Impact** : Le service ne peut pas être compilé actuellement + +### 2. Collision de noms de fichiers +- **Erreur** : `libsp_client.rlib` en collision +- **Cause** : Plusieurs packages avec le même nom +- **Impact** : Compilation échoue + +## Recommandations + +### Court terme +1. Corriger les signatures de traits dans sdk_relay +2. Résoudre les collisions de noms de fichiers +3. Tester la compilation complète + +### Moyen terme +1. Implémenter les méthodes manquantes dans `DummyBackend` +2. Ajouter des tests unitaires pour les nouvelles fonctionnalités +3. Documenter l'API des nouvelles méthodes + +### Long terme +1. Migrer vers une architecture plus modulaire +2. Implémenter une gestion d'état centralisée +3. Ajouter des métriques et monitoring + +## Fichiers modifiés + +### sdk_relay +- `src/config.rs` : Ajout de `get_cookie_path()` +- `src/daemon.rs` : Modification de `rpc_connect()` +- `src/main.rs` : Ajout de retry logic +- `src/scan.rs` : Corrections des traits + +### sdk_common +- `Cargo.toml` : Modification des dépendances + +### sdk_client +- `Cargo.toml` : Modification des dépendances + +### 4NK_node +- `sdk_relay/Dockerfile` : Mise à jour des branches +- `docker-compose.yml` : Amélioration de la configuration +- `sdk_relay/.conf.docker` : Ajout du chemin du cookie +