**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)
5.5 KiB
Prompt pour Recherche IA - Problème Mining Signet Bitcoin Core 30.2
Contexte : Problème de mining Bitcoin Signet avec Bitcoin Core 30.2 et descriptor wallets
PROMPT COMPLET
Je rencontre un problème avec le mining Bitcoin Signet sur Bitcoin Core 30.2 utilisant des descriptor wallets. Le miner échoue systématiquement avec "PSBT signing failed" malgré une configuration apparemment correcte.
Contexte Technique
Environnement :
- Bitcoin Core 30.2 (dernière version)
- Descriptor wallets (legacy wallets non supportés depuis Bitcoin Core 30+)
- Bitcoin Signet custom
- Docker container (Debian Bookworm)
- Script de mining Python basé sur
contrib/signet/miner.pyde Bitcoin Core
Configuration Actuelle
SIGNETCHALLENGE : 5121028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a651ae
- Format :
5121[PUBKEY]51ae(script P2PK) - Clé publique :
028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a6
PRIVKEY : cVCKcgQf2ewV5miairzhrHJCPv4kMbMMBZeJvW5SMhFMSWVtCvXS
- Format WIF (Wallet Import Format)
- Dérive correctement vers la clé publique du SIGNETCHALLENGE ✅
Wallet Descriptor :
{
"desc": "pk(028b8d4cea1b3d8582babc8405bc618fbbb281c0f64e6561aa85968251931cd0a6)#vflt9jvv",
"timestamp": 1,
"active": false,
"has_private_keys": true,
"is_solvable": true
}
Problème Observé
Le miner Bitcoin Signet utilise walletprocesspsbt pour signer des transactions spéciales vers le SIGNETCHALLENGE. Le processus échoue à chaque tentative :
Logs :
PSBT signing failed
Delay before next block 600 seconds.
Code du miner (ligne 476-482) :
psbt = generate_psbt(tmpl, reward_spk, blocktime=mine_time)
input_stream = os.linesep.join([psbt, "true", "ALL"]).encode('utf8')
psbt_signed = json.loads(args.bcli("-stdin", "walletprocesspsbt", input=input_stream))
if not psbt_signed.get("complete",False):
logging.debug("Generated PSBT: %s" % (psbt,))
sys.stderr.write("PSBT signing failed\n")
return 1
Structure du PSBT Signet
Le miner crée un PSBT spécial qui contient :
- Une transaction
to_spendvers le SIGNETCHALLENGE (script P2PK) - Une transaction
spendqui dépenseto_spend - Le bloc à miner dans un champ propriétaire PSBT (
PSBT_SIGNET_BLOCK)
Code de génération (ligne 134-166) :
def signet_txs(block, challenge):
# ... crée to_spend et spend transactions
to_spend.vout = [CTxOut(0, challenge)] # challenge est le SIGNETCHALLENGE (P2PK script)
return spend, to_spend
Vérifications Effectuées
✅ Compatibilité des clés :
- La PRIVKEY dérive correctement vers la clé publique du SIGNETCHALLENGE
- Le descriptor
pk()est importé dans le wallet hasprivatekeys: trueetissolvable: true
✅ Import du descriptor :
- Utilisation de
importdescriptorsavecpk($PRIVKEY)#$CHECKSUM - Le descriptor est présent dans le wallet (mais
active: false)
❌ Problème :
walletprocesspsbtretournecomplete: false- Le wallet ne peut pas signer le PSBT signet
Tentatives de Résolution
-
Import comme
pk()au lieu dewpkh()✅- Nécessaire car SIGNETCHALLENGE utilise P2PK, pas P2WPKH
- Le descriptor est importé avec succès
-
Tentative d'activation du descriptor ❌
- Erreur : "Active descriptors must be ranged"
- Les descriptors non-rangés ne peuvent pas être actifs
-
Vérification de compatibilité ✅
- Les clés sont compatibles
- Pas besoin de régénérer la chaîne
Questions Spécifiques
-
Bitcoin Core 30.2 et descriptor wallets :
- Y a-t-il des limitations connues pour signer des transactions P2PK avec des descriptors
pk()non-actifs ? - Le wallet peut-il signer des transactions vers des scripts qui ne sont pas dans son UTXO set ?
- Y a-t-il des limitations connues pour signer des transactions P2PK avec des descriptors
-
PSBT Signet et walletprocesspsbt :
walletprocesspsbtpeut-il signer des PSBT spéciaux contenant des transactions virtuelles (commeto_spenddans signet) ?- Y a-t-il des paramètres spécifiques nécessaires pour signer des PSBT signet ?
-
Descriptor
pk()non-actif :- Un descriptor
pk()avecactive: falsepeut-il être utilisé pour signer ? - Faut-il importer la clé différemment pour le mining signet ?
- Un descriptor
-
Alternatives :
- Existe-t-il une autre méthode pour signer les blocs signet avec Bitcoin Core 30.2 ?
- Faut-il utiliser une approche différente pour les descriptor wallets ?
Informations Supplémentaires
Version Bitcoin Core : 30.2.0
Type de wallet : Descriptor wallet (sqlite)
Méthode d'import : importdescriptors avec descriptor pk($PRIVKEY)#$CHECKSUM
Script de mining : Basé sur contrib/signet/miner.py de Bitcoin Core
Commandes de test :
# Vérifier le descriptor
bitcoin-cli listdescriptors | grep "pk("
# Tester walletprocesspsbt (échoue)
miner --cli="bitcoin-cli" generate --nbits=1e0377ae --set-block-time=$(date +%s)
Résultat Attendu
Le wallet devrait pouvoir signer le PSBT signet via walletprocesspsbt, permettant au miner de créer et soumettre des blocs sur le signet.
Ressources Consultées
- Documentation Bitcoin Core RPC :
walletprocesspsbt,importdescriptors - Code source :
contrib/signet/miner.py - Documentation descriptor wallets Bitcoin Core 30+
Question principale : Comment faire fonctionner le mining Bitcoin Signet avec Bitcoin Core 30.2 et descriptor wallets lorsque walletprocesspsbt échoue à signer le PSBT signet malgré un descriptor pk() correctement importé avec les clés privées ?