anchorage_layer_simple/docs/SOLUTION_MINING.md
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

3.7 KiB

Solution au Problème de Mining Signet - Bitcoin Core 30.2

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

Problème Résolu

Le mining Bitcoin Signet échouait avec "PSBT signing failed" sur Bitcoin Core 30.2 avec descriptor wallets.

Cause Racine

Le problème venait de l'utilisation de walletprocesspsbt qui ne peut pas signer les PSBT signet contenant des transactions artificielles (to_spend/spend). Ces transactions ne sont pas des UTXOs réels dans le wallet, donc walletprocesspsbt ne peut pas les reconnaître et signer.

Solution

Remplacer walletprocesspsbt par descriptorprocesspsbt

descriptorprocesspsbt est un RPC de nœud (pas wallet) qui signe directement avec des descriptors fournis, sans dépendre du wallet et de son modèle UTXO.

Modifications Apportées

1. Fichier miner (ligne ~476-521)

Avant :

psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))

Après :

# Use descriptorprocesspsbt by default (works with Bitcoin Core 30+ and descriptor wallets)
privkey = os.environ.get('PRIVKEY', '')
if not privkey and hasattr(args, 'privkey') and args.privkey:
    privkey = args.privkey
if privkey:
    descriptor = "pk(%s)" % privkey
    descriptors_array = [descriptor]
    psbt_signed = json.loads(args.bcli("descriptorprocesspsbt", psbt, json.dumps(descriptors_array), "ALL", "true", "true"))
else:
    # Fallback to walletprocesspsbt
    input_stream = os.linesep.join([psbt, "true", "ALL"]).encode('utf8')
    psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))

2. Fichier mine.sh

Modification : Export de PRIVKEY pour qu'il soit disponible dans l'environnement du miner

export PRIVKEY=${PRIVKEY:-$(cat ~/.bitcoin/PRIVKEY.txt 2>/dev/null || echo "")}
miner --cli="bitcoin-cli" generate ...

Fonctionnement

  1. Le miner génère un PSBT signet avec les transactions artificielles to_spend/spend
  2. Au lieu d'utiliser walletprocesspsbt, il utilise descriptorprocesspsbt
  3. descriptorprocesspsbt reçoit :
    • Le PSBT (base64)
    • Un array de descriptors : ["pk(PRIVKEY)"]
    • Les paramètres : "ALL", true, true (sighashtype, bip32derivs, finalize)
  4. Le PSBT est signé avec succès (complete: true)
  5. Le bloc est miné et soumis

Avantages

  • Fonctionne avec Bitcoin Core 30+ et descriptor wallets
  • Ne dépend pas du wallet pour reconnaître les UTXOs
  • Signe directement avec le descriptor contenant la clé privée
  • Compatible avec les transactions artificielles Signet

Vérification

Test manuel :

PRIVKEY=$(grep PRIVKEY .env | cut -d'=' -f2)
PSBT=$(miner genpsbt ...)
bitcoin-cli -signet descriptorprocesspsbt "$PSBT" '["pk('$PRIVKEY')"]' "ALL" true true
# Résultat: {"psbt": "...", "complete": true, ...}

Test automatique :

sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getblockchaininfo | grep blocks
# Doit afficher blocks > 0 après quelques minutes

Notes Techniques

  • descriptorprocesspsbt est un RPC de nœud, pas de wallet
  • Il accepte les descriptors avec clés privées WIF
  • Il peut signer des PSBT avec des entrées qui ne sont pas dans le wallet
  • Parfait pour les cas d'usage comme Signet où les transactions sont artificielles

Références


Dernière mise à jour : 2026-01-23