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

6.5 KiB

API Faucet Bitcoin Signet

Auteur : Équipe 4NK Date : 2026-01-23 Version : 1.0.0

Description

API REST pour distribuer des sats (50000 sats = 0.0005 BTC) sur la blockchain Bitcoin Signet. Cette API permet aux utilisateurs de recevoir des fonds de test pour développer et tester des applications Bitcoin.

Caractéristiques

  • Port : 3021
  • Format : JSON REST API
  • Bitcoin : Connexion RPC au nœud Bitcoin Signet (port 38332)
  • Montant par défaut : 50 000 sats (0.0005 BTC)

Installation

Prérequis

  • Node.js >= 18.0.0
  • Accès au nœud Bitcoin Signet (RPC sur port 38332)
  • Wallet Bitcoin avec des fonds pour distribuer

Installation des Dépendances

cd api-faucet
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

# API Configuration
FAUCET_API_PORT=3021
FAUCET_API_HOST=0.0.0.0

# Faucet Configuration
FAUCET_AMOUNT=0.0005  # Montant en BTC (50000 sats par défaut)

# Logging
LOG_LEVEL=info
NODE_ENV=production

Important :

  • BITCOIN_RPC_HOST : Si l'API est dans un conteneur Docker, utiliser l'IP du conteneur Bitcoin ou host.docker.internal
  • FAUCET_AMOUNT : Montant à distribuer en BTC (par défaut 0.0005 = 50000 sats)

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 l'API avec PM2
pm2 start src/server.js --name faucet-api

# Sauvegarder la configuration PM2
pm2 save

# Configurer PM2 pour démarrer au boot
pm2 startup
# Suivre les instructions affichées

Endpoints

GET /health

Vérifie l'état de l'API et de la connexion Bitcoin.

Authentification : Non requise

Réponse :

{
  "status": "ok",
  "service": "bitcoin-signet-faucet-api",
  "version": "1.0.0",
  "bitcoin": {
    "connected": true,
    "chain": "signet",
    "blocks": 1234,
    "networkactive": true,
    "connections": 5,
    "wallet_balance": 10.5
  },
  "timestamp": "2026-01-23T12:00:00.000Z"
}

POST /api/faucet/request

Demande des sats via le faucet.

Authentification : Non requise

Body :

{
  "address": "tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc"
}

Réponse (succès) :

{
  "success": true,
  "txid": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234567890",
  "address": "tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc",
  "amount": 0.0005,
  "amount_sats": 50000,
  "status": "pending",
  "confirmations": 0,
  "block_height": null
}

Réponse (erreur) :

{
  "error": "Bad Request",
  "message": "Invalid Bitcoin address format"
}

Exemples d'Utilisation

Avec curl

# Vérifier l'état de l'API
curl http://localhost:3021/health

# Demander des sats
curl -X POST http://localhost:3021/api/faucet/request \
  -H "Content-Type: application/json" \
  -d '{
    "address": "tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc"
  }'

Avec JavaScript (fetch)

const response = await fetch('http://localhost:3021/api/faucet/request', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    address: 'tb1qwe0nv3s0ewedd63w20r8kwnv22uw8dp2tnj3qc',
  }),
});

const result = await response.json();
console.log(result);

Configuration Nginx (sur proxy 192.168.1.100)

Ajouter dans la configuration nginx du proxy :

# API Faucet
server {
    listen 443 ssl http2;
    server_name faucet.signet.4nkweb.com;

    ssl_certificate /etc/letsencrypt/live/faucet.signet.4nkweb.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/faucet.signet.4nkweb.com/privkey.pem;

    location / {
        proxy_pass http://192.168.1.103:3021;
        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ù l'API est déployée.

Architecture

Client
  ↓ HTTPS
Nginx (proxy 192.168.1.100:443)
  ↓ HTTP
API Faucet (port 3021)
  ↓ RPC
Bitcoin Signet Node (port 38332)

Sécurité

Rate Limiting (Recommandé)

Pour éviter les abus, il est recommandé d'implémenter un rate limiting. Exemple avec express-rate-limit :

npm install express-rate-limit
import rateLimit from 'express-rate-limit';

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 1, // 1 requête par adresse IP toutes les 15 minutes
  message: 'Too many requests from this IP, please try again later.',
});

app.use('/api/faucet/request', limiter);

Validation des Adresses

L'API valide automatiquement les adresses Bitcoin avant d'envoyer les fonds. Seules les adresses valides sont acceptées.

Gestion des Erreurs

  • 400 Bad Request : Adresse invalide
  • 503 Service Unavailable : Solde insuffisant
  • 500 Internal Server Error : Erreur serveur

Dépannage

L'API ne démarre pas

  • Vérifier que le port 3021 n'est pas utilisé : netstat -tlnp | grep 3021
  • Vérifier les logs : pm2 logs faucet-api
  • Vérifier la configuration dans .env

Erreur "Insufficient balance"

  • Vérifier le solde du wallet : bitcoin-cli getbalance
  • Miner des blocs pour obtenir des fonds
  • Vérifier que le wallet est déverrouillé

Erreur "Invalid Bitcoin address"

  • Vérifier que l'adresse est une adresse Signet valide (commence par tb1, bcrt1, 2, ou 3)
  • Vérifier le format de l'adresse (25-62 caractères)

Transaction non envoyée

  • Vérifier les logs de l'API pour les erreurs RPC
  • Vérifier que le nœud Bitcoin est accessible
  • Vérifier que le wallet est déverrouillé et a des fonds

Structure des Fichiers

api-faucet/
├── package.json
├── README.md
├── .env.example
└── src/
    ├── server.js          # Serveur Express
    ├── bitcoin-rpc.js     # Client Bitcoin RPC
    ├── logger.js          # Logger
    └── routes/
        ├── faucet.js      # Routes du faucet
        └── health.js      # Routes de santé

Licence

MIT