You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bitcoin Core RPC调用创建含自定义P2SH地址的交易?

用Bitcoin Core RPC创建自定义P2SH地址交易的完整流程

嘿,你的思路方向完全正确!确实需要先创建指向P2SH地址的未签名交易,再通过签名接口传入redeemScript完成验证签名。下面是一步步的具体操作:

1. 准备自定义redeemScript(十六进制格式)

首先你得先有自己的自定义脚本(比如多签、时间锁脚本等),并把它转换成十六进制编码。举个例子,如果你要做2-of-2多签脚本,可以用createmultisig生成:

createmultisig 2 '["公钥1","公钥2"]'

返回结果里的redeemScript字段就是你需要的十六进制脚本。如果是自己编写的自定义脚本,也可以用decodescript验证格式是否正确。

2. 获取对应的P2SH地址

有了redeemScript后,调用decodescript传入脚本十六进制,就能得到对应的P2SH地址:

decodescript "你的redeemScript十六进制"

返回结果中的p2sh字段就是你要用来作为交易输出的目标地址。

3. 创建未签名原始交易

用createrawtransaction指定你的UTXO作为输入,输出设置为刚才拿到的P2SH地址:

createrawtransaction '[{"txid":"你的UTXO交易ID","vout":输出索引}]' '{"P2SH地址": 转账金额}'

执行后会得到一串未签名的交易十六进制字符串,记下来(比如叫unsigned_tx)。

4. 传入redeemScript完成签名

这一步是关键!你需要用signrawtransactionwithkey(新版本推荐,替代旧的signrawtransaction)来签名,并且在解锁参数里传入redeemScript,这样节点才能验证签名是否符合P2SH的解锁规则。命令格式如下:

signrawtransactionwithkey "unsigned_tx" '["你的私钥"]' '[{"txid":"UTXO的txid","vout":输出索引,"scriptPubKey":"UTXO对应的脚本公钥","redeemScript":"你的自定义redeemScript十六进制"}]'
  • 第二个参数是用来签名的私钥列表(如果是多签,需要对应数量的私钥)
  • 第三个参数是输入的解锁详情,必须包含redeemScript,否则节点无法识别P2SH的解锁条件

执行后会返回签名后的交易数据,其中hex字段就是已签名的交易十六进制。

5. 广播交易

最后用sendrawtransaction把已签名的交易广播到比特币网络:

sendrawtransaction "已签名的交易十六进制"
几个关键注意事项
  • 确保你的私钥满足redeemScript的验证要求(比如多签需要对应数量的私钥签名)
  • 旧版signrawtransaction也可以用,但参数格式略有不同,建议优先用signrawtransactionwithkey
  • 如果是嵌套隔离见证的P2SH-P2WSH交易,流程类似,但需要在签名时额外指定witnessScript字段

内容的提问来源于stack exchange,提问作者Jesper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:19:25