# Dashboard de Supervision Bitcoin Signet **Auteur** : Équipe 4NK **Date** : 2026-01-23 **Version** : 1.0.0 ## Description Interface web de supervision et de test pour Bitcoin Signet. Ce dashboard permet de : - Surveiller l'état de la blockchain Signet en temps réel - Tester l'API d'ancrage avec génération de hash - Utiliser le faucet pour recevoir des sats ## Caractéristiques - **Port** : `3020` - **Interface** : Web (HTML/CSS/JavaScript) - **Backend** : Node.js/Express - **Rafraîchissement** : Automatique toutes les 30 secondes ## Fonctionnalités ### Supervision de la Blockchain - **Hauteur de bloc** : Affiche le nombre de blocs minés - **Date du dernier bloc miné** : Timestamp du dernier bloc - **Nombre de transactions dans le dernier bloc** : Compte des transactions - **Balance du miner** : - Balance mature (disponible) - Balance immature (en attente de confirmation) - **Nombre d'ancrages** : Compte approximatif des ancrages OP_RETURN - **Nombre de pairs** : Nombre de connexions P2P actives ### Test de l'API d'Ancrage - **Saisie de texte** : Entrer un texte à ancrer - **Sélection de fichier** : Choisir un fichier à ancrer - **Génération de hash** : Génération automatique du hash SHA256 - **Ancrage** : Envoi du hash à l'API d'ancrage (port 3010) - **Résultat** : Affichage du TXID et du statut de l'ancrage ### Faucet - **Adresse Bitcoin** : Saisie d'une adresse Signet valide - **Montant** : 50 000 sats (0.0005 BTC) par défaut - **Envoi** : Transaction automatique via l'API faucet (port 3021) ## Installation ### Prérequis - Node.js >= 18.0.0 - Accès au nœud Bitcoin Signet (RPC sur port 38332) - API d'ancrage accessible (port 3010) - API faucet accessible (port 3021) ### Installation des Dépendances ```bash cd signet-dashboard npm install ``` ### Configuration 1. Copier le fichier d'exemple : ```bash cp .env.example .env ``` 2. Éditer `.env` : ```bash # Bitcoin RPC Configuration BITCOIN_RPC_HOST=localhost BITCOIN_RPC_PORT=38332 BITCOIN_RPC_USER=bitcoin BITCOIN_RPC_PASSWORD=bitcoin BITCOIN_RPC_TIMEOUT=30000 # Dashboard Configuration DASHBOARD_PORT=3020 DASHBOARD_HOST=0.0.0.0 # API Anchor Configuration (pour les tests d'ancrage) ANCHOR_API_URL=http://localhost:3010 ANCHOR_API_KEY=your-api-key-here # API Faucet Configuration FAUCET_API_URL=http://localhost:3021 # Logging LOG_LEVEL=info NODE_ENV=production ``` **Important** : - `BITCOIN_RPC_HOST` : Si le dashboard est dans un conteneur Docker, utiliser l'IP du conteneur Bitcoin ou `host.docker.internal` - `ANCHOR_API_KEY` : Clé API pour l'API d'ancrage (port 3010) - `FAUCET_API_URL` : URL de l'API faucet (port 3021) ## Démarrage ### Mode Développement ```bash npm run dev ``` ### Mode Production ```bash npm start ``` ### Avec PM2 (recommandé pour production) ```bash # Installer PM2 globalement sudo npm install -g pm2 # Démarrer le dashboard avec PM2 pm2 start src/server.js --name signet-dashboard # Sauvegarder la configuration PM2 pm2 save # Configurer PM2 pour démarrer au boot pm2 startup # Suivre les instructions affichées ``` ## Accès Une fois démarré, le dashboard est accessible à l'adresse : ``` http://localhost:3020 ``` ## Architecture ``` Client (Navigateur) ↓ HTTP Dashboard (port 3020) ↓ RPC Bitcoin Signet Node (port 38332) ↓ HTTP API Anchor (port 3010) ↓ HTTP API Faucet (port 3021) ``` ## API Endpoints ### GET /api/blockchain/info Obtient les informations sur la blockchain. **Réponse** : ```json { "chain": "signet", "blocks": 1234, "bestblockhash": "...", ... } ``` ### GET /api/blockchain/latest-block Obtient les informations sur le dernier bloc miné. **Réponse** : ```json { "hash": "...", "height": 1234, "time": 1234567890, "tx_count": 5, ... } ``` ### GET /api/wallet/balance Obtient le solde du wallet (mature et immature). **Réponse** : ```json { "mature": 1.5, "immature": 0.1, "unconfirmed": 0.0, "total": 1.6 } ``` ### GET /api/network/peers Obtient le nombre de pairs connectés. **Réponse** : ```json { "connections": 5, "peers": [...] } ``` ### GET /api/anchor/count Obtient le nombre d'ancrages (approximatif). **Réponse** : ```json { "count": 42 } ``` ### POST /api/hash/generate Génère un hash SHA256 à partir d'un texte ou d'un fichier. **Body** : ```json { "text": "Texte à hasher" } ``` ou ```json { "fileContent": "Contenu du fichier" } ``` **Réponse** : ```json { "hash": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890" } ``` ### POST /api/anchor/test Teste l'ancrage d'un document via l'API d'ancrage. **Body** : ```json { "hash": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890" } ``` **Réponse** : ```json { "txid": "...", "status": "confirmed", "confirmations": 1, "block_height": 1234 } ``` ## Configuration Nginx (sur proxy 192.168.1.100) Ajouter dans la configuration nginx du proxy : ```nginx # Dashboard Signet server { listen 443 ssl http2; server_name dashboard.signet.4nkweb.com; ssl_certificate /etc/letsencrypt/live/dashboard.signet.4nkweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dashboard.signet.4nkweb.com/privkey.pem; location / { proxy_pass http://192.168.1.103:3020; 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; } } ``` **Note** : Remplacer `192.168.1.103` par l'IP du serveur où le dashboard est déployé. ## Sécurité - Le dashboard est accessible publiquement (pas d'authentification) - Les appels à l'API d'ancrage nécessitent une clé API (configurée dans `.env`) - Les appels à l'API faucet sont publics (gestion de rate limiting recommandée côté API faucet) ## Dépannage ### Le dashboard ne se charge pas - Vérifier que le serveur est démarré : `pm2 status` ou `ps aux | grep node` - Vérifier les logs : `pm2 logs signet-dashboard` - Vérifier que le port 3020 n'est pas utilisé : `netstat -tlnp | grep 3020` ### Les données ne se mettent pas à jour - Vérifier la connexion RPC Bitcoin : `curl http://localhost:3020/api/blockchain/info` - Vérifier les logs pour les erreurs RPC - Vérifier que le nœud Bitcoin est accessible ### L'ancrage ne fonctionne pas - Vérifier que l'API d'ancrage est accessible : `curl http://localhost:3010/health` - Vérifier que la clé API est correcte dans `.env` - Vérifier les logs du dashboard pour les erreurs ### Le faucet ne fonctionne pas - Vérifier que l'API faucet est accessible : `curl http://localhost:3021/health` - Vérifier que le wallet a suffisamment de fonds - Vérifier les logs de l'API faucet ## Structure des Fichiers ``` signet-dashboard/ ├── package.json ├── README.md ├── .env.example ├── src/ │ ├── server.js # Serveur Express │ ├── bitcoin-rpc.js # Client Bitcoin RPC │ └── logger.js # Logger └── public/ ├── index.html # Interface web ├── styles.css # Styles CSS └── app.js # JavaScript client ``` ## Licence MIT