ncantu 20d115a31c feat: Add APIs, dashboard, documentation and improve scripts
**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)
2026-01-24 02:40:25 +01:00

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