anchorage_layer_simple/docs/TROUBLESHOOTING_MINING.md
ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**Motivations:**
- Export Signet and mining wallet backups to git with only 2 versions kept
- Document and add backup/restore scripts for signet and mining wallet

**Correctifs:**
- Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo

**Evolutions:**
- data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section
- .gitignore: data/backup-to-git.log

**Pages affectées:**
- .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
2026-02-04 03:07:57 +01:00

3.3 KiB

Dépannage du Mining - Bitcoin Signet

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

Problème : Aucun bloc n'est miné - "PSBT signing failed"

Symptômes

  • Les logs affichent : PSBT signing failed
  • Aucun bloc n'est miné malgré MINERENABLED=1
  • Le processus mine.sh est actif mais échoue à chaque tentative

Cause

Le miner Bitcoin Signet utilise walletprocesspsbt pour signer des transactions spéciales vers le SIGNETCHALLENGE. Ces transactions utilisent un script P2PK (Pay-to-Public-Key), pas P2WPKH (Pay-to-Witness-Public-Key-Hash).

Problème : Si la clé privée est importée uniquement comme wpkh() (P2WPKH), le wallet ne peut pas signer les transactions P2PK nécessaires pour le signet.

Solution

La clé privée doit être importée comme pk() (P2PK) dans le wallet descriptor pour permettre la signature des transactions signet.

Fichier modifié : run.sh

Avant (incorrect) :

DESCRIPTOR_INFO=$(bitcoin-cli -datadir=$DATADIR getdescriptorinfo "wpkh($PRIVKEY)")
IMPORT_RESULT=$(bitcoin-cli -datadir=$DATADIR importdescriptors "[{\"desc\":\"wpkh($PRIVKEY)#$CHECKSUM\",...}]")

Après (correct) :

DESCRIPTOR_INFO=$(bitcoin-cli -datadir=$DATADIR getdescriptorinfo "pk($PRIVKEY)")
IMPORT_RESULT=$(bitcoin-cli -datadir=$DATADIR importdescriptors "[{\"desc\":\"pk($PRIVKEY)#$CHECKSUM\",...}]")

Vérification

  1. Vérifier que le descriptor pk() est importé :
sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin listdescriptors | grep "pk("
  1. Vérifier que la clé correspond au SIGNETCHALLENGE :
PRIVKEY=$(grep PRIVKEY .env | cut -d'=' -f2)
sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getdescriptorinfo "pk($PRIVKEY)" | jq -r '.descriptor'
# Doit contenir la clé publique du SIGNETCHALLENGE
  1. Vérifier les logs :
sudo docker logs bitcoin-signet-instance | grep -E "(PSBT|signing|Mine)"

Correction Manuelle (si nécessaire)

Si le problème persiste après la modification de run.sh, importer manuellement :

PRIVKEY=$(grep PRIVKEY .env | cut -d'=' -f2)
DESCRIPTOR_INFO=$(sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getdescriptorinfo "pk($PRIVKEY)")
CHECKSUM=$(echo "$DESCRIPTOR_INFO" | jq -r '.checksum')
sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin \
  importdescriptors "[{\"desc\":\"pk($PRIVKEY)#$CHECKSUM\",\"timestamp\":0,\"internal\":false}]"

Redémarrage

Après modification de run.sh, reconstruire l'image et redémarrer :

sudo docker stop bitcoin-signet-instance
sudo docker rm bitcoin-signet-instance
sudo docker build -t bitcoin-signet .
sudo docker run --env-file .env -d \
  --name bitcoin-signet-instance \
  -v signet-bitcoin-data:/root/.bitcoin \
  -p 38332:38332 -p 38333:38333 \
  -p 28332:28332 -p 28333:28333 -p 28334:28334 \
  bitcoin-signet

Notes Techniques

  • SIGNETCHALLENGE : Contient un script P2PK avec la clé publique du signet
  • Miner : Crée une transaction to_spend vers ce script P2PK qui doit être signée
  • walletprocesspsbt : Nécessite que le wallet ait la clé privée correspondante au script P2PK
  • Descriptor pk() : Permet au wallet de signer pour les scripts P2PK

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