本文档介绍了使用Bitcoin Core的PSBT创建签名交易的整个流程,以及典型场景中使用的特定RPC命令。
自 Bitcoin Core 0.17 起,存在一个用于部分签名比特币交易(PSBT,如 BIP 174 中所规定)的 RPC 接口。
本文档描述了通过使用 PSBT 生成签名交易的总体工作流程,以及典型场景中使用的特定 RPC 命令。
PSBT 是一种比特币交易的交换格式,这些交易尚未完全签名,但包含了相关的元数据,以帮助实体完成签名。其旨在简化多个参与方需要合作生成交易的工作流程。示例包括硬件钱包、多重签名设置和 CoinJoin 交易。
总的来说,构造一个完全签名的比特币交易需要经过以下步骤:
scriptSig
和/或 scriptWitness
。通常,上述每个角色(不包括创建者和提取器)都会简单地向特定的 PSBT 添加越来越多的数据,直到所有输入都完全签名。在一个简单的工作流程中,他们都必须按顺序操作,将 PSBT 从一个传递到下一个,直到提取器可以将其转换为真正的交易。为了允许并行操作,可以使用 组合器(Combiners),它可以合并来自同一未签名交易的不同 PSBT 的元数据。
上面以粗体显示的名称是在 BIP174 中定义的角色名称。它们有助于理解底层步骤,但在实践中,软件和硬件实现通常会同时实现多个角色。
converttopsbt
(创建者) 是一个实用工具 RPC,可将未签名的原始交易转换为 PSBT 格式。它忽略现有的签名。createpsbt
(创建者) 是一个实用工具 RPC,它接受输入和输出的列表,并将它们转换为没有额外信息的 PSBT。它等同于调用 createrawtransaction
,然后调用 converttopsbt
。walletcreatefundedpsbt
(创建者,更新者) 是一个钱包 RPC,它创建一个具有指定输入和输出的 PSBT,向其添加额外的输入和更改以使其平衡,并添加相关的元数据。特别是,对于钱包知道的输入(计入其正常或仅观察余额),将添加 UTXO 信息。对于存在 UTXO 信息的输出和输入,将添加钱包知道的密钥和脚本信息。它等同于运行 createrawtransaction
,然后运行 fundrawtransaction
和 converttopsbt
。walletprocesspsbt
(更新者,签名者,定稿者) 是一个钱包 RPC,它接受一个 PSBT 作为输入,将 UTXO、密钥和脚本数据添加到缺少它的输入和输出,并可选地对输入进行签名。在可能的情况下,它还会最终确定部分签名。descriptorprocesspsbt
(更新者,签名者,定稿者) 是一个节点 RPC,它接受一个 PSBT 和一个描述符列表作为输入。它使用 UTXO 集和内存池中可用的信息更新 SegWit 输入,并使用提供的描述符对输入进行签名。在可能的情况下,它还会最终确定部分签名。utxoupdatepsbt
(更新者) 是一个节点 RPC,它接受一个 PSBT 并更新它,以包括 UTXO 集中可用的信息(仅适用于 SegWit 输入)。finalizepsbt
(定稿者,提取器) 是一个实用工具 RPC,用于最终确定任何部分签名,如果所有输入都已最终确定,则将结果转换为完全签名的交易,该交易可以使用 sendrawtransaction
进行广播。combinepsbt
(组合器) 是一个实用工具 RPC,它实现了一个组合器。它可以在工作流程中的任何时间点使用,以合并添加到同一 PSBT 的不同版本的信息。特别是,它对于合并多个更新者或签名者的输出非常有用。joinpsbts
(创建者) 是一个实用工具 RPC,它将多个 PSBT 连接在一起,连接输入和输出。这可以用于构建 CoinJoin 交易。decodepsbt
是一个诊断实用工具 RPC,它将以人类可读的形式显示 PSBT 中的所有信息,如果已知,还会计算其最终费用。analyzepsbt
是一个实用工具 RPC,它检查 PSBT 并报告其输入的当前状态,工作流程中的下一步(如果已知),并且如果可能,计算结果交易的费用并估计最终权重和 费率(feerate)。有关快速入门,请参阅 使用描述符钱包和 PSBT 的基本 M-of-N 多重签名示例。
- 原文链接: github.com/bitcoin/bitco...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!