From bcb1aa5f2f2f3ee7b34073f170d1eea55e2bc987 Mon Sep 17 00:00:00 2001 From: ncantu Date: Sat, 24 Jan 2026 03:08:21 +0100 Subject: [PATCH] docs: Update documentation and API server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - Update documentation with latest information - Remove redundant deployment documentation - Add mempool documentation - Improve API server implementation **Root causes:** - Documentation needed updates to reflect current state - DEPLOYMENT.md was redundant with other documentation - Missing documentation for mempool integration - API server required improvements **Correctifs:** - Removed api-anchorage/DEPLOYMENT.md (redundant) - Updated api-anchorage/src/server.js with improvements - Updated documentation files (INTERFACES.md, MAINTENANCE.md, README.md) **Evolutions:** - Added docs/MEMPOOL.md for mempool documentation - Updated mempool submodule **Pages affectées:** - api-anchorage/DEPLOYMENT.md (deleted) - api-anchorage/src/server.js - docs/INTERFACES.md - docs/MAINTENANCE.md - docs/MEMPOOL.md (new) - docs/README.md - mempool (submodule updated) --- api-anchorage/DEPLOYMENT.md | 399 ------------------------------- api-anchorage/src/server.js | 6 +- docs/INTERFACES.md | 51 +++- docs/MAINTENANCE.md | 8 +- docs/MEMPOOL.md | 453 ++++++++++++++++++++++++++++++++++++ docs/README.md | 7 + 6 files changed, 521 insertions(+), 403 deletions(-) delete mode 100644 api-anchorage/DEPLOYMENT.md create mode 100644 docs/MEMPOOL.md diff --git a/api-anchorage/DEPLOYMENT.md b/api-anchorage/DEPLOYMENT.md deleted file mode 100644 index 0b04a91..0000000 --- a/api-anchorage/DEPLOYMENT.md +++ /dev/null @@ -1,399 +0,0 @@ -# Guide de Déploiement - API d'Ancrage Bitcoin Signet - -**Auteur** : Équipe 4NK -**Date** : 2026-01-23 -**Version** : 1.0 - -## Vue d'Ensemble - -Ce guide explique comment déployer l'API d'ancrage Bitcoin Signet sur le serveur de production (192.168.1.103) et la configurer pour être accessible via nginx sur le proxy (192.168.1.100) au domaine `certificator.4nkweb.com`. - -## Architecture - -``` -Internet - ↓ HTTPS -certificator.4nkweb.com (DNS → 4nk.myftp.biz) - ↓ -Nginx Proxy (192.168.1.100:443) - ↓ HTTP -API Anchor (192.168.1.103:3010) - ↓ RPC -Bitcoin Signet Node (192.168.1.103:38332) -``` - -## Prérequis - -- Serveur de production (192.168.1.103) accessible -- Nginx configuré sur le proxy (192.168.1.100) -- Nœud Bitcoin Signet fonctionnel sur 192.168.1.103:38332 -- Node.js >= 18.0.0 installé sur le serveur de production -- Accès SSH au serveur de production - -## Déploiement sur le Serveur de Production - -### 1. Préparation du Serveur - -```bash -# Se connecter au serveur de production -ssh prod - -# Vérifier Node.js -node --version # Doit être >= 18.0.0 - -# Installer Node.js si nécessaire -curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - -sudo apt-get install -y nodejs -``` - -### 2. Cloner et Installer l'API - -```bash -# Créer le répertoire de déploiement -sudo mkdir -p /srv/4NK/certificator.4nkweb.com -sudo chown ncantu:ncantu /srv/4NK/certificator.4nkweb.com -cd /srv/4NK/certificator.4nkweb.com - -# Cloner le dépôt (ou copier les fichiers) -# Si le code est dans un dépôt git : -# git clone . - -# Ou copier les fichiers depuis votre machine locale -# scp -r api-anchorage/* ncantu@192.168.1.103:/srv/4NK/certificator.4nkweb.com/ -``` - -### 3. Installation des Dépendances - -```bash -cd /srv/4NK/certificator.4nkweb.com -npm install --production -``` - -### 4. Configuration - -```bash -# Créer le fichier .env -cp .env.example .env -nano .env -``` - -Configuration recommandée pour la production : - -```bash -# Bitcoin RPC Configuration -BITCOIN_RPC_HOST=localhost -BITCOIN_RPC_PORT=38332 -BITCOIN_RPC_USER=bitcoin -BITCOIN_RPC_PASSWORD=bitcoin -BITCOIN_RPC_TIMEOUT=30000 - -# API Configuration -API_PORT=3010 -API_HOST=0.0.0.0 - -# API Keys (séparées par des virgules) -# IMPORTANT: Générer des clés sécurisées pour la production -API_KEYS=prod-api-key-1,prod-api-key-2 - -# Logging -LOG_LEVEL=info - -# Mining Configuration -MINING_ENABLED=true -MINING_FEE_RATE=0.00001 -``` - -**Sécurité** : -- Générer des clés API fortes (ex: `openssl rand -hex 32`) -- Ne jamais commiter le fichier `.env` -- Utiliser des mots de passe RPC différents de ceux par défaut en production - -### 5. Test Local - -```bash -# Tester que l'API démarre -npm start - -# Dans un autre terminal, tester -curl http://localhost:3010/health -``` - -### 6. Déploiement avec PM2 (Recommandé) - -```bash -# Installer PM2 globalement -sudo npm install -g pm2 - -# Démarrer l'API avec PM2 -pm2 start src/server.js --name anchor-api - -# Sauvegarder la configuration PM2 -pm2 save - -# Configurer PM2 pour démarrer au boot -pm2 startup -# Suivre les instructions affichées -``` - -### 7. Vérification - -```bash -# Vérifier que l'API fonctionne -curl http://localhost:3010/health - -# Vérifier les logs PM2 -pm2 logs anchor-api - -# Vérifier le statut -pm2 status -``` - -## Configuration Nginx sur le Proxy - -### 1. Se Connecter au Proxy - -```bash -ssh proxy -``` - -### 2. Créer la Configuration Nginx - -```bash -sudo nano /etc/nginx/sites-available/certificator.4nkweb.com -``` - -Contenu : - -```nginx -# API Anchor sur certificator.4nkweb.com -server { - listen 443 ssl http2; - server_name certificator.4nkweb.com; - - # Certificats SSL (Let's Encrypt) - ssl_certificate /etc/letsencrypt/live/certificator.4nkweb.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/certificator.4nkweb.com/privkey.pem; - - # Configuration SSL - ssl_protocols TLSv1.2 TLSv1.3; - ssl_ciphers HIGH:!aNULL:!MD5; - ssl_prefer_server_ciphers on; - - # Logs - access_log /var/log/nginx/certificator.4nkweb.com.access.log; - error_log /var/log/nginx/certificator.4nkweb.com.error.log; - - # Proxy vers l'API - location / { - proxy_pass http://192.168.1.103:3010; - proxy_http_version 1.1; - - # Headers - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - - # Timeouts - proxy_connect_timeout 60s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - - # Cache - proxy_cache_bypass $http_upgrade; - } -} - -# Redirection HTTP vers HTTPS -server { - listen 80; - server_name certificator.4nkweb.com; - return 301 https://$server_name$request_uri; -} -``` - -### 3. Activer la Configuration - -```bash -# Créer le lien symbolique -sudo ln -s /etc/nginx/sites-available/certificator.4nkweb.com /etc/nginx/sites-enabled/ - -# Tester la configuration -sudo nginx -t - -# Recharger nginx -sudo systemctl reload nginx -``` - -### 4. Obtenir le Certificat SSL - -```bash -# Obtenir le certificat Let's Encrypt -sudo certbot --nginx -d certificator.4nkweb.com - -# Vérifier le renouvellement automatique -sudo certbot renew --dry-run -``` - -## Vérification Post-Déploiement - -### 1. Vérifier l'API Localement - -```bash -# Sur le serveur de production -curl http://localhost:3010/health -``` - -### 2. Vérifier via le Proxy - -```bash -# Depuis n'importe quelle machine -curl https://certificator.4nkweb.com/health -``` - -### 3. Tester l'Ancrage - -```bash -# Utiliser le client de test -cd /srv/4NK/certificator.4nkweb.com -export API_KEY=prod-api-key-1 -export API_URL=https://certificator.4nkweb.com -npm test -``` - -## Maintenance - -### Redémarrage de l'API - -```bash -# Via PM2 -pm2 restart anchor-api - -# Ou arrêter/démarrer -pm2 stop anchor-api -pm2 start anchor-api -``` - -### Mise à Jour - -```bash -# Arrêter l'API -pm2 stop anchor-api - -# Mettre à jour le code -cd /srv/4NK/certificator.4nkweb.com -git pull # ou copier les nouveaux fichiers - -# Mettre à jour les dépendances si nécessaire -npm install --production - -# Redémarrer -pm2 start anchor-api -``` - -### Logs - -```bash -# Voir les logs en temps réel -pm2 logs anchor-api - -# Voir les logs nginx -sudo tail -f /var/log/nginx/certificator.4nkweb.com.access.log -sudo tail -f /var/log/nginx/certificator.4nkweb.com.error.log -``` - -### Monitoring - -```bash -# Statut PM2 -pm2 status - -# Informations détaillées -pm2 info anchor-api - -# Monitoring en temps réel -pm2 monit -``` - -## Dépannage - -### L'API ne répond pas - -1. **Vérifier que l'API est démarrée** : - ```bash - pm2 status - ``` - -2. **Vérifier les logs** : - ```bash - pm2 logs anchor-api --lines 50 - ``` - -3. **Vérifier le port** : - ```bash - sudo netstat -tlnp | grep 3010 - ``` - -### Erreur de connexion Bitcoin RPC - -1. **Vérifier que le nœud Bitcoin est accessible** : - ```bash - curl -u bitcoin:bitcoin http://localhost:38332 - ``` - -2. **Vérifier les variables d'environnement** : - ```bash - grep BITCOIN_RPC .env - ``` - -### Erreur 502 Bad Gateway (Nginx) - -1. **Vérifier que l'API est accessible depuis le proxy** : - ```bash - # Depuis le proxy - curl http://192.168.1.103:3010/health - ``` - -2. **Vérifier les logs nginx** : - ```bash - sudo tail -f /var/log/nginx/certificator.4nkweb.com.error.log - ``` - -3. **Vérifier le firewall** : - ```bash - # Sur le serveur de production - sudo ufw status - # Le port 3010 doit être ouvert pour le réseau interne - ``` - -## Sécurité - -### Recommandations - -1. **Clés API** : - - Générer des clés fortes (32+ caractères aléatoires) - - Rotater régulièrement - - Ne jamais les exposer publiquement - -2. **RPC Bitcoin** : - - Utiliser des credentials différents en production - - Restreindre `RPCALLOWIP` dans bitcoin.conf - - Utiliser `rpcauth` au lieu de `rpcuser`/`rpcpassword` - -3. **HTTPS** : - - Toujours utiliser HTTPS en production - - Renouveler automatiquement les certificats Let's Encrypt - -4. **Firewall** : - - Ne pas exposer le port 3010 publiquement - - Utiliser nginx comme reverse proxy uniquement - -5. **Logs** : - - Ne pas logger les clés API - - Surveiller les tentatives d'accès non autorisées - ---- - -**Dernière mise à jour** : 2026-01-23 diff --git a/api-anchorage/src/server.js b/api-anchorage/src/server.js index e8f533f..522f5a1 100644 --- a/api-anchorage/src/server.js +++ b/api-anchorage/src/server.js @@ -47,9 +47,11 @@ app.use((req, res, next) => { } const apiKey = req.headers['x-api-key']; - const validKeys = process.env.API_KEYS?.split(',').map(k => k.trim()) || []; + // Filtrer les clés vides pour éviter qu'une chaîne vide soit acceptée + const validKeys = process.env.API_KEYS?.split(',').map(k => k.trim()).filter(k => k.length > 0) || []; - if (!apiKey || !validKeys.includes(apiKey)) { + // Vérifier que la clé API est présente, non vide, et dans la liste des clés valides + if (!apiKey || apiKey.trim().length === 0 || !validKeys.includes(apiKey.trim())) { logger.warn('Unauthorized API access attempt', { ip: req.ip, path: req.path }); return res.status(401).json({ error: 'Unauthorized', diff --git a/docs/INTERFACES.md b/docs/INTERFACES.md index c5efb2b..67ab1dd 100644 --- a/docs/INTERFACES.md +++ b/docs/INTERFACES.md @@ -426,16 +426,65 @@ pm2 logs anchor-api --- +## 8. Interface Mempool (Explorateur Blockchain) + +### Description +Interface web et API REST pour explorer la blockchain Bitcoin Signet. + +### Accès +- **URL Web** : `http://localhost:3015` (local) ou `https://mempool1.4nkweb.com` (production) +- **API Backend** : `http://localhost:8999/api/v1/` +- **Protocole** : HTTP/HTTPS +- **Format** : HTML (web) / JSON (API) + +### Endpoints API Principaux + +#### GET `/api/v1/backend-info` +Informations sur le backend Mempool. + +**Réponse** : +```json +{ + "isElectrs": false, + "network": "signet", + "mempoolSize": 0, + "blockCount": 716, + "lastBlockHash": "...", + "lastBlockTime": 1234567890 +} +``` + +#### GET `/api/v1/blocks` +Liste des blocs récents. + +#### GET `/api/v1/blocks/:hash` +Informations sur un bloc spécifique. + +#### GET `/api/v1/tx/:txid` +Informations sur une transaction. + +#### GET `/api/v1/mempool` +État actuel de la mempool. + +### Documentation Complète +Voir [MEMPOOL.md](./MEMPOOL.md) pour la documentation complète. + +--- + ## Résumé des Ports | Port | Protocole | Interface | Description | |------|-----------|-----------|-------------| | 3010 | HTTP/HTTPS | API REST | API d'ancrage (via nginx) | +| 3015 | HTTP/HTTPS | Web | Mempool (explorateur blockchain) | +| 3020 | HTTP/HTTPS | Web | Dashboard de supervision | +| 3021 | HTTP/HTTPS | API REST | API Faucet | | 38332 | HTTP | RPC Bitcoin | Interface JSON-RPC | | 38333 | TCP | P2P Bitcoin | Réseau peer-to-peer | | 28332 | TCP | ZMQ | Publication blocs bruts | | 28333 | TCP | ZMQ | Publication transactions brutes | | 28334 | TCP | ZMQ | Publication hash de blocs | +| 8999 | HTTP | API REST | Mempool Backend API (interne) | --- @@ -458,4 +507,4 @@ pm2 logs anchor-api --- -**Dernière mise à jour** : 2026-01-23 +**Dernière mise à jour** : 2026-01-24 diff --git a/docs/MAINTENANCE.md b/docs/MAINTENANCE.md index 2e7fe0c..ec5086d 100644 --- a/docs/MAINTENANCE.md +++ b/docs/MAINTENANCE.md @@ -66,11 +66,16 @@ bitcoin/ | Port | Protocole | Service | Description | |------|-----------|---------|-------------| +| 3010 | HTTP/HTTPS | API REST | API d'ancrage (via nginx) | +| 3015 | HTTP/HTTPS | Web | Mempool (explorateur blockchain) | +| 3020 | HTTP/HTTPS | Web | Dashboard de supervision | +| 3021 | HTTP/HTTPS | API REST | API Faucet | | 38332 | TCP | RPC | Interface JSON-RPC pour contrôler le nœud | | 38333 | TCP/UDP | P2P | Réseau peer-to-peer Bitcoin Signet | | 28332 | TCP | ZMQ | Publication des blocs bruts | | 28333 | TCP | ZMQ | Publication des transactions brutes | | 28334 | TCP | ZMQ | Publication des hash de blocs | +| 8999 | HTTP | API REST | Mempool Backend API (interne) | ### Répertoires Importants dans le Conteneur @@ -808,7 +813,8 @@ watch -n 5 'sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/ - [Documentation Bitcoin Signet](https://en.bitcoin.it/wiki/Signet) - [Bitcoin Core RPC API](https://developer.bitcoin.org/reference/rpc/) - [Documentation Docker](https://docs.docker.com/) +- [Mempool Documentation](./MEMPOOL.md) : Documentation de l'explorateur blockchain Mempool --- -**Dernière mise à jour** : 2026-01-09 +**Dernière mise à jour** : 2026-01-24 diff --git a/docs/MEMPOOL.md b/docs/MEMPOOL.md new file mode 100644 index 0000000..657777c --- /dev/null +++ b/docs/MEMPOOL.md @@ -0,0 +1,453 @@ +# Mempool - Explorateur Blockchain Bitcoin Signet + +**Auteur** : Équipe 4NK +**Date** : 2026-01-24 +**Version** : 1.0 + +## Vue d'Ensemble + +Mempool est un explorateur de blockchain Bitcoin qui permet de visualiser et d'analyser la blockchain et la mempool du signet custom. Il fournit une interface web moderne pour explorer les blocs, transactions, adresses et statistiques du réseau. + +## Caractéristiques + +- **Explorateur de blockchain** : Visualisation des blocs, transactions et adresses +- **Mempool en temps réel** : Suivi des transactions en attente +- **Statistiques** : Graphiques de frais, taux de hash, etc. +- **API REST** : Accès programmatique aux données +- **Interface web moderne** : Interface utilisateur Angular responsive + +## Installation + +### Prérequis + +- Docker et Docker Compose installés +- Nœud Bitcoin Signet en cours d'exécution sur le port 38332 +- Accès aux credentials RPC Bitcoin (bitcoin/bitcoin par défaut) + +### Installation Rapide + +```bash +cd /home/ncantu/Bureau/code/bitcoin/mempool +./start.sh +``` + +Le script : +1. Charge les variables d'environnement depuis `../.env` +2. Vérifie la connexion au nœud Bitcoin +3. Crée les répertoires nécessaires +4. Lance les services Docker (frontend, backend, base de données) + +### Installation Manuelle + +```bash +cd mempool +docker-compose -f docker-compose.signet.yml up -d +``` + +## Configuration + +### Variables d'Environnement + +Mempool utilise les mêmes variables que les autres services du projet : + +```bash +# Bitcoin RPC Configuration (identique aux autres services) +BITCOIN_RPC_HOST=localhost # ou host.docker.internal depuis Docker +BITCOIN_RPC_PORT=38332 # Port RPC Bitcoin Signet +BITCOIN_RPC_USER=bitcoin # Utilisateur RPC (identique à RPCUSER dans .env) +BITCOIN_RPC_PASSWORD=bitcoin # Mot de passe RPC (identique à RPCPASSWORD dans .env) +``` + +Ces variables peuvent être définies dans le fichier `.env` à la racine du projet. + +### Configuration Docker Compose + +Le fichier `docker-compose.signet.yml` contient toute la configuration nécessaire : + +- **Frontend** : Port 3015 (accessible depuis l'extérieur) +- **Backend API** : Port 8999 (interne) +- **Base de données** : MariaDB sur port 3306 (interne) +- **Réseau** : "signet" configuré + +## Architecture + +``` +Client (Navigateur) + ↓ HTTPS +Nginx Proxy (192.168.1.100:443) + ↓ HTTP +Mempool Frontend (localhost:3015) + ↓ HTTP (interne) +Mempool Backend (port 8999) + ↓ RPC +Bitcoin Signet Node (localhost:38332) + ↓ Base de données +MariaDB (cache et statistiques) +``` + +## Services + +Mempool utilise trois services Docker : + +1. **web** (frontend) : Interface utilisateur Angular + - Image : `mempool/frontend:latest` + - Port : 3015 (exposé) + - Healthcheck : Vérifie que le frontend répond + +2. **api** (backend) : API Node.js/TypeScript + - Image : `mempool/backend:latest` + - Port : 8999 (interne) + - Connexion RPC : `host.docker.internal:38332` + - Healthcheck : Vérifie que l'API répond + +3. **db** (database) : Base de données MariaDB + - Image : `mariadb:10.5.21` + - Port : 3306 (interne) + - Données : `./mysql/data` + - Healthcheck : Vérifie que MySQL répond + +## Accès + +### Interface Web + +- **URL locale** : http://localhost:3015 +- **URL production** : https://mempool1.4nkweb.com (via nginx proxy) + +### API Backend + +- **URL locale** : http://localhost:8999/api/v1/ +- **Endpoints principaux** : + - `/api/v1/backend-info` : Informations sur le backend + - `/api/v1/blocks` : Liste des blocs + - `/api/v1/transactions` : Transactions + - `/api/v1/mempool` : Mempool en temps réel + +## Utilisation + +### Démarrage + +```bash +cd mempool +./start.sh +``` + +### Vérification de l'État + +```bash +# État des services +sudo docker-compose -f docker-compose.signet.yml ps + +# Logs en temps réel +sudo docker-compose -f docker-compose.signet.yml logs -f + +# Logs d'un service spécifique +sudo docker-compose -f docker-compose.signet.yml logs -f api +``` + +### Arrêt + +```bash +# Arrêter les services +sudo docker-compose -f docker-compose.signet.yml down + +# Arrêter et supprimer les volumes (base de données) +sudo docker-compose -f docker-compose.signet.yml down -v +``` + +## Fonctionnalités + +### Exploration de la Blockchain + +- **Blocs** : Liste des blocs minés avec détails (hash, hauteur, timestamp, transactions) +- **Transactions** : Détails des transactions (inputs, outputs, frais) +- **Adresses** : Historique des transactions par adresse (nécessite Electrum Server) +- **Recherche** : Recherche par hash de bloc, transaction ou adresse + +### Mempool + +- **Transactions en attente** : Visualisation des transactions non confirmées +- **Graphiques de frais** : Estimation des frais recommandés +- **Statistiques** : Taux de transactions par seconde, taille de la mempool + +### Statistiques + +- **Réseau** : Taux de hash, difficulté, temps entre blocs +- **Mining** : Pools de minage, distribution des blocs +- **Frais** : Évolution des frais dans le temps + +## Maintenance + +### Mise à Jour + +```bash +cd mempool +# Récupérer les dernières images +sudo docker-compose -f docker-compose.signet.yml pull + +# Redémarrer avec les nouvelles images +sudo docker-compose -f docker-compose.signet.yml up -d +``` + +### Sauvegarde + +Les données importantes sont stockées dans : + +- **Cache** : `./data/` (peut être supprimé, sera régénéré) +- **Base de données** : `./mysql/data/` (à sauvegarder pour conserver les statistiques) + +```bash +# Sauvegarder la base de données +sudo docker-compose -f docker-compose.signet.yml exec db mysqldump -u mempool -pmempool mempool > mempool_backup.sql + +# Restaurer la base de données +sudo docker-compose -f docker-compose.signet.yml exec -T db mysql -u mempool -pmempool mempool < mempool_backup.sql +``` + +### Logs + +```bash +# Tous les services +sudo docker-compose -f docker-compose.signet.yml logs -f + +# Service spécifique +sudo docker-compose -f docker-compose.signet.yml logs -f api +sudo docker-compose -f docker-compose.signet.yml logs -f web +sudo docker-compose -f docker-compose.signet.yml logs -f db +``` + +## Dépannage + +### Le frontend ne se charge pas + +**Symptômes** : Erreur 502 ou timeout sur http://localhost:3015 + +**Solutions** : +1. Vérifier que le service web est démarré : + ```bash + sudo docker-compose -f docker-compose.signet.yml ps + ``` + +2. Vérifier les logs du frontend : + ```bash + sudo docker-compose -f docker-compose.signet.yml logs web + ``` + +3. Vérifier que le backend est accessible : + ```bash + curl http://localhost:8999/api/v1/backend-info + ``` + +### L'API ne peut pas se connecter à Bitcoin Core + +**Symptômes** : Erreurs dans les logs de l'API concernant la connexion RPC + +**Solutions** : +1. Vérifier que Bitcoin Core est en cours d'exécution : + ```bash + bitcoin-cli -rpcport=38332 -rpcuser=bitcoin -rpcpassword=bitcoin getblockchaininfo + ``` + +2. Vérifier les logs de l'API : + ```bash + sudo docker-compose -f docker-compose.signet.yml logs api | grep -i rpc + ``` + +3. Vérifier que `host.docker.internal` est accessible : + ```bash + sudo docker-compose -f docker-compose.signet.yml exec api ping -c 1 host.docker.internal + ``` + +4. **Sur Linux**, si `host.docker.internal` ne fonctionne pas : + - Trouver l'IP de la passerelle Docker : + ```bash + docker network inspect mempool_mempool-signet | grep Gateway + ``` + - Modifier `docker-compose.signet.yml` pour utiliser cette IP au lieu de `host.docker.internal` + +### La base de données ne démarre pas + +**Symptômes** : Le service `db` est en état "unhealthy" ou ne démarre pas + +**Solutions** : +1. Vérifier les logs de la base de données : + ```bash + sudo docker-compose -f docker-compose.signet.yml logs db + ``` + +2. Vérifier les permissions du répertoire : + ```bash + ls -la mysql/data + chmod -R 1000:1000 mysql/data + ``` + +3. Supprimer et recréer le volume : + ```bash + sudo docker-compose -f docker-compose.signet.yml down -v + sudo docker-compose -f docker-compose.signet.yml up -d db + ``` + +### Synchronisation lente + +**Symptômes** : Mempool met du temps à synchroniser les blocs + +**Solutions** : +1. Vérifier que Bitcoin Core est synchronisé : + ```bash + bitcoin-cli -rpcport=38332 getblockchaininfo + ``` + +2. Vérifier les index Bitcoin Core : + - `txindex=1` doit être activé + - `blockfilterindex=1` doit être activé + - `coinstatsindex=1` doit être activé + +3. Augmenter les ressources Docker si nécessaire + +## Intégration avec l'Infrastructure + +### Configuration Nginx (sur proxy 192.168.1.100) + +Pour exposer Mempool via le proxy nginx (mempool1.4nkweb.com), ajouter une configuration similaire aux autres services : + +```nginx +# Mempool Bitcoin Signet Explorer +server { + listen 80; + server_name mempool1.4nkweb.com; + + access_log /var/log/nginx/mempool1.4nkweb.com.access.log; + error_log /var/log/nginx/mempool1.4nkweb.com.error.log; + + location / { + proxy_pass http://192.168.1.XXX:3015; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_cache_bypass $http_upgrade; + proxy_read_timeout 300s; + proxy_connect_timeout 75s; + } +} +``` + +**Note** : Remplacer `192.168.1.XXX` par l'IP du serveur où Mempool est déployé. + +### Cohérence avec les Autres Services + +Mempool s'intègre parfaitement avec l'infrastructure existante : + +- **Port** : 3015 (cohérent avec la numérotation : 3010, 3015, 3020, 3021) +- **RPC Bitcoin** : Même configuration que les autres services (localhost:38332, bitcoin/bitcoin) +- **Variables d'environnement** : Compatible avec le `.env` du projet +- **Documentation** : Structure similaire aux autres services + +## API Endpoints + +### Backend Info + +```bash +GET /api/v1/backend-info +``` + +Retourne les informations sur le backend Mempool. + +**Réponse** : +```json +{ + "isElectrs": false, + "isEsplora": false, + "isLiquid": false, + "network": "signet", + "mempoolSize": 0, + "blockCount": 716, + "lastBlockHash": "...", + "lastBlockTime": 1234567890 +} +``` + +### Blocks + +```bash +GET /api/v1/blocks +GET /api/v1/blocks/:hash +GET /api/v1/blocks/tip/height +``` + +Retourne les informations sur les blocs. + +### Transactions + +```bash +GET /api/v1/tx/:txid +GET /api/v1/tx/:txid/outspend +``` + +Retourne les informations sur les transactions. + +### Mempool + +```bash +GET /api/v1/mempool +GET /api/v1/mempool/txids +``` + +Retourne les informations sur la mempool. + +## Limitations + +### Recherche d'Adresses + +La recherche d'adresses ne fonctionne pas sans Electrum Server. Pour activer cette fonctionnalité : + +1. Installer et configurer un serveur Electrum (electrs ou Fulcrum) +2. Modifier `docker-compose.signet.yml` : + ```yaml + api: + environment: + MEMPOOL_BACKEND: "electrum" + ELECTRUM_HOST: "host.docker.internal" + ELECTRUM_PORT: "50002" + ELECTRUM_TLS_ENABLED: "false" + ``` + +### Pools de Minage + +Les pools de minage affichés sont ceux de mainnet/testnet. Pour un signet custom, ces informations ne sont pas pertinentes mais n'affectent pas le fonctionnement. + +## Performance + +Mempool indexe les blocs et maintient un cache en base de données. Pour un signet custom avec peu de blocs, les performances sont excellentes. + +### Optimisations + +- **Cache** : Les données sont mises en cache pour améliorer les performances +- **Indexation** : Seuls les 11000 derniers blocs sont indexés par défaut +- **Base de données** : MariaDB optimisée pour les requêtes fréquentes + +## Sécurité + +### Recommandations + +- **RPC Bitcoin** : Ne pas exposer le port RPC (38332) publiquement +- **Base de données** : Les credentials par défaut doivent être changés en production +- **Nginx** : Utiliser HTTPS avec certificats SSL valides +- **Firewall** : Restreindre l'accès aux ports Docker + +## Support + +Pour plus d'informations : + +- **Documentation officielle** : https://mempool.space/docs +- **Repository GitHub** : https://github.com/mempool/mempool +- **Documentation locale** : `mempool/README.SIGNET.md` +- **Adaptations** : `mempool/ADAPTATION.md` + +## Changelog + +- **2026-01-24** : Installation initiale et configuration pour signet custom +- **2026-01-24** : Adaptation à l'infrastructure existante +- **2026-01-24** : Documentation complète diff --git a/docs/README.md b/docs/README.md index 9bc03d6..817f969 100644 --- a/docs/README.md +++ b/docs/README.md @@ -31,6 +31,13 @@ Ce dossier contient toute la documentation nécessaire pour la maintenance et l' - Interface de configuration - Interface de logs +- **[MEMPOOL.md](./MEMPOOL.md)** : Documentation de Mempool (explorateur blockchain) + - Installation et configuration + - Architecture et services + - Utilisation et maintenance + - Dépannage + - Intégration avec l'infrastructure + ## Démarrage Rapide ### Installation