# 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) : ```bash DESCRIPTOR_INFO=$(bitcoin-cli -datadir=$DATADIR getdescriptorinfo "wpkh($PRIVKEY)") IMPORT_RESULT=$(bitcoin-cli -datadir=$DATADIR importdescriptors "[{\"desc\":\"wpkh($PRIVKEY)#$CHECKSUM\",...}]") ``` **Après** (correct) : ```bash 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é** : ```bash sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin listdescriptors | grep "pk(" ``` 2. **Vérifier que la clé correspond au SIGNETCHALLENGE** : ```bash 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 ``` 3. **Vérifier les logs** : ```bash 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 : ```bash 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 : ```bash 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