Bitcoin Core 24.0未导入私钥调用signrawtransactionwithkey报错求助
Bitcoin Core 24.0 未导入私钥签名交易报错解决方案
问题背景
在Bitcoin Core 24.0环境下,尝试使用未导入钱包的私钥调用signrawtransactionwithkey签名原始交易时,返回错误:"Unable to sign input, invalid stack size (possibly missing key)"。
原始交易十六进制
0200000001d882ccfb5b012fc7f0ff80f88ad455397364b05924aa757eae6bc5ad686f02040100000000fdffffff0180841e00000000001976a9147270eaf36eb7849c81a1d21a8f4d15d81d03f54c88ac00000000
解码交易结果
执行命令:
bitcoin-cli decoderawtransaction "0200000001d882ccfb5b012fc7f0ff80f88ad455397364b05924aa757eae6bc5ad686f02040100000000fdffffff0180841e00000000001976a9147270eaf36eb7849c81a1d21a8f4d15d81d03f54c88ac00000000"
返回结果:
{ "txid": "b9a6f80ecc13920db5d47e7a08cc50a271827c689fc95ef9b86721533d274de0", "hash": "b9a6f80ecc13920db5d47e7a08cc50a271827c689fc95ef9b86721533d274de0", "version": 2, "size": 85, "vsize": 85, "weight": 340, "locktime": 0, "vin": [ { "txid": "04026f68adc56bae7e75aa2459b064733955d48af880fff0c72f015bfbcc82d8", "vout": 1, "scriptSig": { "asm": "", "hex": "" }, "sequence": 4294967293 } ], "vout": [ { "value": 0.02000000, "n": 0, "scriptPubKey": { "asm": "OP_DUP OP_HASH160 7270eaf36eb7849c81a1d21a8f4d15d81d03f54c OP_EQUALVERIFY OP_CHECKSIG", "desc": "addr(mqx4bb2C4gZehqDoPKVZifkGXTdGghbPSZ)#a49n9ch9", "hex": "76a9147270eaf36eb7849c81a1d21a8f4d15d81d03f54c88ac", "address": "mqx4bb2C4gZehqDoPKVZifkGXTdGghbPSZ", "type": "pubkeyhash" } } ] }
签名命令及输出
执行命令:
bitcoin-cli signrawtransactionwithkey "0200000001d882ccfb5b012fc7f0ff80f88ad455397364b05924aa757eae6bc5ad686f02040100000000fdffffff0180841e00000000001976a9147270eaf36eb7849c81a1d21a8f4d15d81d03f54c88ac00000000" "[\"<privkey>\"]"
返回结果:
{ "hex": "0200000001d882ccfb5b012fc7f0ff80f88ad455397364b05924aa757eae6bc5ad686f02040100000000fdffffff0180841e00000000001976a9147270eaf36eb7849c81a1d21a8f4d15d81d03f54c88ac00000000", "complete": false, "errors": [ { "txid": "04026f68adc56bae7e75aa2459b064733955d48af880fff0c72f015bfbcc82d8", "vout": 1, "witness": [ ], "scriptSig": "", "sequence": 4294967293, "error": "Unable to sign input, invalid stack size (possibly missing key)" } ] }
问题解答
1. 是否可以不导入私钥进行交易签名?
可以。signrawtransactionwithkey的核心设计就是无需将私钥导入钱包,直接用私钥签名交易。报错原因不是私钥未导入,而是缺少签名所需的前置UTXO上下文信息。
2. 正确的操作方式是什么?
签名时必须提供输入UTXO的完整锁定脚本(scriptPubKey)和金额,Bitcoin Core需要这些信息构建正确的签名脚本。具体步骤:
步骤1:获取前置交易的UTXO信息
查询你要花费的UTXO所属的原始交易:
bitcoin-cli getrawtransaction "04026f68adc56bae7e75aa2459b064733955d48af880fff0c72f015bfbcc82d8" true
从返回结果中提取vout[1]的scriptPubKey(hex格式)和value。
步骤2:构造prevtxs参数
将UTXO信息整理为JSON数组:
[ { "txid": "04026f68adc56bae7e75aa2459b064733955d48af880fff0c72f015bfbcc82d8", "vout": 1, "scriptPubKey": "<提取到的scriptPubKey hex>", "amount": 0.02000000 } ]
步骤3:传入参数完成签名
修改签名命令,加入prevtxs参数:
bitcoin-cli signrawtransactionwithkey "<原始交易十六进制>" "[\"<你的私钥>\"]" "[{\"txid\":\"04026f68adc56bae7e75aa2459b064733955d48af880fff0c72f015bfbcc82d8\",\"vout\":1,\"scriptPubKey\":\"<实际scriptPubKey hex>\",\"amount\":0.02000000}]"
执行后会返回包含完整签名的交易十六进制,且complete字段为true。
内容的提问来源于stack exchange,提问作者waira
相关产品推荐
相关产品推荐

