**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
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.shest 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
- Vérifier que le descriptor pk() est importé :
sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin listdescriptors | grep "pk("
- 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
- 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_spendvers 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