**Motivations:** - Add API services for anchorage and faucet functionality - Add dashboard interface for signet monitoring - Improve documentation and maintenance guides - Enhance existing scripts for better functionality **Root causes:** - Need for API services to interact with Bitcoin Signet - Need for user-friendly dashboard interface - Need for comprehensive documentation - Scripts required improvements for better reliability **Correctifs:** - Updated Dockerfile with better configuration - Improved gen-bitcoind-conf.sh and gen-signet-keys.sh scripts - Enhanced mine.sh, miner, run.sh, and setup-signet.sh scripts - Updated env.example with new configuration options **Evolutions:** - Added api-anchorage service with anchor functionality - Added api-faucet service for testnet coin distribution - Added signet-dashboard for monitoring and management - Added comprehensive documentation in docs/ directory - Added configure-nginx-proxy.sh for proxy configuration - Added update-signet.sh for signet updates - Added ETAT_SYSTEME.md and START_DASHBOARD_AND_FAUCET.md guides - Added .bitcoin-version file for version tracking **Pages affectées:** - Dockerfile - env.example - gen-bitcoind-conf.sh - gen-signet-keys.sh - mine.sh - miner - run.sh - setup-signet.sh - api-anchorage/ (new) - api-faucet/ (new) - signet-dashboard/ (new) - docs/ (new) - configure-nginx-proxy.sh (new) - update-signet.sh (new) - ETAT_SYSTEME.md (new) - START_DASHBOARD_AND_FAUCET.md (new) - .bitcoin-version (new) - .env (modified) - mempool/ (added)
349 lines
7.3 KiB
Markdown
349 lines
7.3 KiB
Markdown
# 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
|