**Motivations:** - Miner stopped producing blocks after bitcoind and mempool restart - PSBT signing failed with "PSBT signing failed" error - descriptorprocesspsbt failed with "Argument list too long" error due to large PSBT size (1.5MB) **Root causes:** - descriptorprocesspsbt called via command line exceeded argument length limit when PSBT is large - walletprocesspsbt succeeded but could not mark PSBT as complete because it cannot sign artificial signet transactions (to_spend/spend) which are not real UTXOs in wallet - After restart, the miner needed descriptorprocesspsbt to sign artificial signet transactions, but command line approach failed **Correctifs:** - Modified miner to use JSON-RPC HTTP API directly for descriptorprocesspsbt instead of command line - PSBT is now passed via HTTP request body, avoiding command line argument length limit - Added fallback to walletprocesspsbt if HTTP RPC fails - Updated mine.sh to use -rpcwallet and -datadir correctly for wallet operations **Evolutions:** - Miner now uses HTTP JSON-RPC for large PSBTs, making it more robust for signet mining with many transactions - Improved error handling with fallback mechanisms **Pages affectées:** - miner: Modified PSBT signing logic to use HTTP JSON-RPC for descriptorprocesspsbt - mine.sh: Updated to use -rpcwallet and -datadir correctly
27 lines
1.5 KiB
Bash
27 lines
1.5 KiB
Bash
#!/bin/bash
|
|
NBITS=${NBITS:-"1e0377ae"} #minimum difficulty in signet
|
|
WALLET=${WALLET:-"custom_signet"} # Wallet name for descriptor wallet
|
|
|
|
while true; do
|
|
ADDR=${MINETO:-$(bitcoin-cli -rpcwallet=$WALLET getnewaddress)}
|
|
if [[ -f "${BITCOIN_DIR}/BLOCKPRODUCTIONDELAY.txt" ]]; then
|
|
BLOCKPRODUCTIONDELAY_OVERRIDE=$(cat ~/.bitcoin/BLOCKPRODUCTIONDELAY.txt)
|
|
echo "Delay OVERRIDE before next block" $BLOCKPRODUCTIONDELAY_OVERRIDE "seconds."
|
|
sleep $BLOCKPRODUCTIONDELAY_OVERRIDE
|
|
else
|
|
BLOCKPRODUCTIONDELAY=${BLOCKPRODUCTIONDELAY:="0"}
|
|
if [[ BLOCKPRODUCTIONDELAY -gt 0 ]]; then
|
|
echo "Delay before next block" $BLOCKPRODUCTIONDELAY "seconds."
|
|
sleep $BLOCKPRODUCTIONDELAY
|
|
fi
|
|
fi
|
|
echo "Mine To:" $ADDR
|
|
# PRIVKEY should be available from .env via run.sh environment
|
|
# The miner will automatically use PRIVKEY from environment for descriptorprocesspsbt
|
|
# Export PRIVKEY to ensure it's available to the miner process
|
|
export PRIVKEY=${PRIVKEY:-$(cat ~/.bitcoin/PRIVKEY.txt 2>/dev/null || echo "")}
|
|
# Get block template and pipe it to miner
|
|
# Use bitcoin-cli with -datadir but without -rpcwallet for miner (descriptorprocesspsbt is node RPC, not wallet RPC)
|
|
bitcoin-cli -rpcwallet=$WALLET getblocktemplate '{"rules": ["segwit", "signet"]}' | \
|
|
miner --cli="bitcoin-cli -datadir=/root/.bitcoin" generate --grind-cmd="bitcoin-util grind" --address=$ADDR --nbits=$NBITS --set-block-time=$(date +%s)
|
|
done |