**Motivations:** - Add transaction statistics endpoints (avg-fee, avg-amount) for dashboard display - Fix difficulty parsing issue when Bitcoin RPC returns string instead of number - Add systemd service files for proper service management - Update dashboard UI to display transaction statistics **Root causes:** - Bitcoin RPC can return difficulty as string, causing type issues - Missing API endpoints for transaction statistics in dashboard **Correctifs:** - Fix difficulty parsing to handle both string and number types - Add proper type conversion for blockchainInfo.difficulty **Evolutions:** - Add /api/transactions/avg-fee endpoint returning fixed 1200 sats fee - Add /api/transactions/avg-amount endpoint returning fixed 1000 sats amount - Add systemd service files for api-faucet and signet-dashboard - Enhance dashboard UI with transaction statistics display - Update anchor_count.txt **Pages affectées:** - signet-dashboard/src/server.js - signet-dashboard/public/app.js - signet-dashboard/public/index.html - signet-dashboard/signet-dashboard.service - api-faucet/faucet-api.service - anchor_count.txt
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
cd signet-dashboard
npm install
Configuration
- Copier le fichier d'exemple :
cp .env.example .env
- Éditer
.env:
# 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 ouhost.docker.internalANCHOR_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
npm run dev
Mode Production
npm start
Avec PM2 (recommandé pour production)
# 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 :
{
"chain": "signet",
"blocks": 1234,
"bestblockhash": "...",
...
}
GET /api/blockchain/latest-block
Obtient les informations sur le dernier bloc miné.
Réponse :
{
"hash": "...",
"height": 1234,
"time": 1234567890,
"tx_count": 5,
...
}
GET /api/wallet/balance
Obtient le solde du wallet (mature et immature).
Réponse :
{
"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 :
{
"connections": 5,
"peers": [...]
}
GET /api/anchor/count
Obtient le nombre d'ancrages (approximatif).
Réponse :
{
"count": 42
}
POST /api/hash/generate
Génère un hash SHA256 à partir d'un texte ou d'un fichier.
Body :
{
"text": "Texte à hasher"
}
ou
{
"fileContent": "Contenu du fichier"
}
Réponse :
{
"hash": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890"
}
POST /api/anchor/test
Teste l'ancrage d'un document via l'API d'ancrage.
Body :
{
"hash": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890"
}
Réponse :
{
"txid": "...",
"status": "confirmed",
"confirmations": 1,
"block_height": 1234
}
Configuration Nginx (sur proxy 192.168.1.100)
Ajouter dans la configuration nginx du proxy :
# 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 statusoups 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