Fix sdk_relay configuration and Docker setup - Update ws_url to port 8090 - Fix Dockerfile context path - Add specs documentation - Add .conf file
This commit is contained in:
parent
4f4fec33be
commit
7ba333bfb1
@ -59,7 +59,7 @@ services:
|
|||||||
sdk_relay:
|
sdk_relay:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
dockerfile: lecoffre_node/sdk_relay/Dockerfile
|
dockerfile: 4NK_node/sdk_relay/Dockerfile
|
||||||
container_name: sdk_relay
|
container_name: sdk_relay
|
||||||
depends_on:
|
depends_on:
|
||||||
bitcoin:
|
bitcoin:
|
||||||
@ -93,6 +93,14 @@ services:
|
|||||||
cp /home/bitcoin/.conf.docker /home/bitcoin/.conf &&
|
cp /home/bitcoin/.conf.docker /home/bitcoin/.conf &&
|
||||||
cp /home/bitcoin/.bitcoin/signet/.cookie /home/bitcoin/.4nk/bitcoin.cookie &&
|
cp /home/bitcoin/.bitcoin/signet/.cookie /home/bitcoin/.4nk/bitcoin.cookie &&
|
||||||
chmod 600 /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"
|
/usr/local/bin/sdk_relay --config .conf"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8091/health"]
|
test: ["CMD", "curl", "-f", "http://localhost:8091/health"]
|
||||||
|
17
sdk_relay/.conf
Normal file
17
sdk_relay/.conf
Normal file
@ -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
|
@ -2,14 +2,15 @@
|
|||||||
# Services connectés via réseau Docker
|
# Services connectés via réseau Docker
|
||||||
|
|
||||||
# Bitcoin Core RPC (utilise le nom d'hôte Docker et le cookie)
|
# 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
|
core_wallet=relay_wallet
|
||||||
ws_url=127.0.0.1:8080
|
ws_url=0.0.0.0:8090
|
||||||
wallet_name=relay_wallet.json
|
wallet_name=relay_wallet.json
|
||||||
network=signet
|
network=signet
|
||||||
blindbit_url=http://blindbit:8000
|
blindbit_url=http://blindbit:8000
|
||||||
zmq_url=tcp://bitcoin:29000
|
zmq_url=tcp://172.19.0.3:29000
|
||||||
data_dir=.4nk
|
data_dir=.4nk
|
||||||
|
cookie_path=/home/bitcoin/.4nk/bitcoin.cookie
|
||||||
|
|
||||||
# Mode développement
|
# Mode développement
|
||||||
dev_mode=true
|
dev_mode=true
|
||||||
|
@ -3,13 +3,13 @@ FROM rust:1.89 as builder
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Copier les sources
|
# Cloner les repositories avec les branches docker-support
|
||||||
COPY sdk_relay/ /app/sdk_relay/
|
RUN git clone --branch docker-support --depth 1 https://git.4nkweb.com/4nk/sdk_relay.git /app/sdk_relay
|
||||||
COPY sdk_common/ /app/sdk_common/
|
RUN git clone --branch docker-support --depth 1 https://git.4nkweb.com/4nk/sdk_common.git /app/sdk_common
|
||||||
|
|
||||||
# Compiler sdk_relay
|
# Compiler sdk_relay
|
||||||
WORKDIR /app/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
|
cargo build --release
|
||||||
|
|
||||||
# Image finale
|
# Image finale
|
||||||
@ -36,7 +36,7 @@ WORKDIR /home/bitcoin
|
|||||||
RUN mkdir -p /home/bitcoin/.4nk
|
RUN mkdir -p /home/bitcoin/.4nk
|
||||||
|
|
||||||
# Copier la configuration
|
# Copier la configuration
|
||||||
COPY sdk_relay/.conf /home/bitcoin/.conf
|
COPY 4NK_node/sdk_relay/.conf /home/bitcoin/.conf
|
||||||
|
|
||||||
# Changer les permissions
|
# Changer les permissions
|
||||||
RUN chown -R bitcoin:bitcoin /home/bitcoin
|
RUN chown -R bitcoin:bitcoin /home/bitcoin
|
||||||
|
215
specs/spec-fonctionnel.md
Normal file
215
specs/spec-fonctionnel.md
Normal file
@ -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
|
||||||
|
|
112
specs/spec-technical.md
Normal file
112
specs/spec-technical.md
Normal file
@ -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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user