Bitcoin Core的PSBT使用指南

  • bitcoin
  • 发布于 2024-01-06 22:57
  • 阅读 23

本文档介绍了使用Bitcoin Core的PSBT创建签名交易的整个流程,以及典型场景中使用的特定RPC命令。

Bitcoin Core 的 PSBT 使用指南

自 Bitcoin Core 0.17 起,存在一个用于部分签名比特币交易(PSBT,如 BIP 174 中所规定)的 RPC 接口。

本文档描述了通过使用 PSBT 生成签名交易的总体工作流程,以及典型场景中使用的特定 RPC 命令。

PSBT 概述

PSBT 是一种比特币交易的交换格式,这些交易尚未完全签名,但包含了相关的元数据,以帮助实体完成签名。其旨在简化多个参与方需要合作生成交易的工作流程。示例包括硬件钱包、多重签名设置和 CoinJoin 交易。

总体工作流程

总的来说,构造一个完全签名的比特币交易需要经过以下步骤:

  • 创建者(Creator) 提议创建一个特定的交易。他们构造一个 PSBT,其中包含某些输入和输出,但没有额外的元数据。
  • 对于每个输入,更新者(Updater) 将关于交易正在花费的 UTXO 的信息添加到 PSBT 中。他们还会添加关于 PSBT 的每个输入(以及可能的输出)中涉及的脚本和公钥的信息。
  • 签名者(Signers) 检查交易及其元数据,以决定是否同意该交易。他们可以使用来自 UTXO 的金额信息来评估所涉及的价值和费用。如果他们同意,他们会为他们拥有相关密钥的输入生成部分签名。
  • 对于每个输入,运行 定稿者(Finalizer) 以将部分签名和可能的脚本信息转换为最终的 scriptSig 和/或 scriptWitness
  • 提取器(Extractor) 从 PSBT 中生成一个有效的比特币交易(以网络格式),该 PSBT 的所有输入都已定稿。

通常,上述每个角色(不包括创建者和提取器)都会简单地向特定的 PSBT 添加越来越多的数据,直到所有输入都完全签名。在一个简单的工作流程中,他们都必须按顺序操作,将 PSBT 从一个传递到下一个,直到提取器可以将其转换为真正的交易。为了允许并行操作,可以使用 组合器(Combiners),它可以合并来自同一未签名交易的不同 PSBT 的元数据。

上面以粗体显示的名称是在 BIP174 中定义的角色名称。它们有助于理解底层步骤,但在实践中,软件和硬件实现通常会同时实现多个角色。

Bitcoin Core 中的 PSBT

RPCs

  • converttopsbt (创建者) 是一个实用工具 RPC,可将未签名的原始交易转换为 PSBT 格式。它忽略现有的签名。
  • createpsbt (创建者) 是一个实用工具 RPC,它接受输入和输出的列表,并将它们转换为没有额外信息的 PSBT。它等同于调用 createrawtransaction,然后调用 converttopsbt
  • walletcreatefundedpsbt (创建者,更新者) 是一个钱包 RPC,它创建一个具有指定输入和输出的 PSBT,向其添加额外的输入和更改以使其平衡,并添加相关的元数据。特别是,对于钱包知道的输入(计入其正常或仅观察余额),将添加 UTXO 信息。对于存在 UTXO 信息的输出和输入,将添加钱包知道的密钥和脚本信息。它等同于运行 createrawtransaction,然后运行 fundrawtransactionconverttopsbt
  • 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)

工作流程

具有多个 Bitcoin Core 实例的多重签名

有关快速入门,请参阅 使用描述符钱包和 PSBT 的基本 M-of-N 多重签名示例

  • 原文链接: github.com/bitcoin/bitco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
bitcoin
bitcoin
江湖只有他的大名,没有他的介绍。