ncantu b5ad2a682d UTXO-list: paginate tables by 50 items per page
**Motivations:**
- Paginer les tableaux UTXO par 50 au lieu de 100

**Root causes:**
- N/A

**Correctifs:**
- ITEMS_PER_PAGE 100 → 50

**Evolutions:**
- Aucune

**Pages affectées:**
- signet-dashboard/public/utxo-list.html
2026-01-26 01:35:46 +01:00
..

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

  1. Copier le fichier d'exemple :
cp .env.example .env
  1. É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 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

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 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