如何在Bitcoin Core中使用PSBT?
作者:mjdietzx
来源:https://github.com/bitcoin/bitcoin/blob/master/doc/psbt.md
自 0.17 版本开始, Bitcoin Core 就有了一套给 “部分签名的比特币交易(Partially Signed Bitcoin Transactions,PSBT,由 BIP 174 定义)” 准备的 RPC 接口。
PSBT 简介
PSBT 是尚未完全签好名的比特币交易的传输格式,它携带有相关的元数据,可帮助人们签名交易。它的设计初衷是简化多个参与者合作生成一笔交易的流程。这样的场景包括硬件钱包、多签名钱包和 CoinJoin 交易。
流程概述
构建一笔完整签名的比特币交易需要经历下列步骤:
一位创建者提出需要创建的某一笔交易。他们构造一个 PSBT,包含特定的输入和输出,但不包含其它元数据。
对每个输入,都由一位更新者为该 PSBT 加入关于被花费的 UTXO 的信息。他们也在该 PSBT 的每一个输入(可能的时候包括输出)中加入关于脚本和公钥的信息。
签名者检查交易及其元数据,来决定是否同意该交易。他们可以利用来自 UTXO 的数额信息,知晓相关的价值和手续费。如果他们同意,就为自己具有相关公钥的输入生成一个部分签名。
为每个输入运行一个定稿器,将部分签名和可能的脚本信息转化为一个最终的 scriptSig (脚本签名)以及/或者 scriptWitness (脚本见证数据)。
抽取器从各输入已经定稿的 PSBT 中产生一笔有效的比特币交易(变成可在网络中广播的形式)。
一般来说,上述的每一个流程(除了创建者和抽取器)都会为处理中的 PSBT 加入越来越多的数据,直至所有输入都被签名。在一个粗疏的工作流中,他们必须按照顺序、一个接一个地参与,直到抽取器将 PSBT 转化为一笔真实的交易。为了允许并行操作,可以增加一个合并者,由 TA 来为同一笔未签名的交易合并来自不同 PSBT 的元数据。
上述所有加粗的名词及其角色都由 BIP174 定义。这些名词在理解背后的流程时是有帮助的,但在实际操作中,软件和硬件实现往往会同时实现多个角色。
Bitcoin Core 中的 PSBT
RPCs
converttopsbt (创建者可用)是一个效用型 RPC,可以将一笔未签名的原始交易转化成 PSBT 格式。它会忽略存在的签名。
createpsbt (创建者可用)是一个效用型 RPC,可以读取一组输入和输出,并将他们转化成一个不带其它信息的 PSBT。等价于在 createrawtransaction 之后调用 converttopsbt 。
walletcreatefundedpsbt (创建者、更新者可用)是一个钱包 RPC,会使用具体的输入和输出创建一个 PSBT。具体来说,对于该钱包已经直到的输入(识别为普通余额或观察余额的),该方法会为 PSBT 加入 UTXO 信息。对于已有 UTXO 信息的输出和输入,会加入钱包知晓的公钥和脚本信息。等价于在运行 fundrawtransaction 和 converttopsbt之后运行 createrawtransaction。
walletprocesspsbt (更新者、签名者、定稿器可用)是一个钱包 RPC,取一个 PSBT 作为输入,为缺少数据的输入和输出加入 UTXO、公钥和脚本数据,还可以选择签名输入。可以做到的时候,它还会敲定部分签名。
utxoupdatepsbt (定稿器可用)是一个节点 RPC,取一个 PSBT 作为输入,并从 UTXO 集合中获得可用的信息来更新它(仅对 SegWit 输入可用)。
finalizepsbt (定稿器、抽取器可用)是一个效用型 RPC,可以敲定任何部分签名;而且,如果所有的输入都已经敲定,该方法会将结果转化为一笔完整签名的、可以使用 sendrawtransaction 在网络中广播的交易。
combinepsbt (合并者可用)是一个效用型 RPC,实现了合并者,它可以用在整个工作流的任一时间点,合并添加到同一个 PSBT 的不同版本中的信息。具体来说,它可用于合并来自多个更新者和签名者的输出。
**joinpsbts**(创建者可用)是一个效用型 RPC,可以将多个 PSBT 结合在一起,汇总输入和输出。可以用来构建 CoinJoin 交易。
decodepsbt 是一个诊断型效用 RPC,可以将一个 PSBT 中的所有信息以人类可读的形式表现出来,还可以计算出最终的手续费(如果 PSBT 中已有的话)。
analyzepsbt 是一个效用型 RPC,可以检查一个 PSBT 并报告其输入的当前状态、操作流程的下一个步骤(如果可知的话);而且,如果可行的话,它还会计算最终交易的手续费,并估计最终的重量和手续费率。
操作流程
多个 Bitcoin Core 设备参与的多签名
想要快速上手,请看《使用描述符钱包和 PSBT 的 M-of-N 多签名基本示例》。如果你用的是传统钱包,那么请继续了解这里提供的例子。
Alice、Bob 和 Carol 希望创建一个 2-of-3 的多签名地址。他们都使用 Bitcoin Core。我们假设他们的钱包中只包含多签名资金。与此同时他们各有一个个人钱包,这可以通过 Bitcoin Core 的多钱包特性来实现 —— 可能因此在使用 bitcoin-cli (命令行工具)时需要使用 rpcwallet=name 来指明调用哪个钱包。
启动:
三人各使用 getnewaddress 来创建一个新地址;我们把这三个地址分别叫做 Aalice、Abob 和 Acarol。
三人各自调用 getaddressinfo "X" ,X 就是他们各自的地址,并记录相应的公钥;我们把这几个公钥分别叫做 Kalice、Kbob 和 Kcarol。
现在,三人可以各自运行 addmultisigaddress 2 ["Kalice","Kbob","Kcarol"] 以产生多签名脚本并告知钱包模块;这条命令所产生的多签名地址,我们叫做 Amulti。他们可以需要手动指定相同的地址类型,以免因为不同的节点设置而建构出不同版本的地址。
他们还各自运行 importaddress "Amulti" "" false ,命令钱包跟踪 Amulti 所收到的支付并作为观察钱包余额。
其他人可以通过运行 createmultisig 2 ["Kalice","Kbob","Kcarol"] 、检查结果是否为 Amulti 来验证这个地址。同上,可能有必要指定地址类型,才能获得匹配的地址。不过,这个命令不能用来初始化交易。
他们现在可以对外给出 Amulti,作为其他人可以支付的地址。
后来,Amulti 收到 V BTC 之后,Bob 和 Carol 想把资金全部移到 Asend,没有找零。Alice 不需要参与。
其中一人 —— 这里假设是 Carol —— 初始化创建流程。她运行 walletcreatefundedpsbt [] {"Asend":V} 0 {"subtractFeeFromOutputs":[0], "includeWatching":true} 。我们把这个命令所返回的 PSBT 叫做 P。P 不包含任何签名。
Carol 需要自己签名这笔交易。为此,她运行 walletprocesspsb "P" ,然后将结果 P2 (也是一个 PSBT)交给 Bob。
Bob 使用 decodepsbt "P2" 来检查这个 PSBT,确认这笔交易是否有预期的输入、有一个输出给 Asend、手续费合理。如果他也同意这笔交易,他调用 walletprocesspsbt "P2" 来签名。结果是 P3,包含了 Carol 和 Bob 的签名。
现在,任何一人都可以调用 finalizepsbt "P3" ,抽取出完整签名的交易 T。
最后,任何人都可以使用 sendrawtransaction "T" 来广播这笔交易。
在需要更多签名者参与的情形中,让所有者并行签名而不是按顺序处理可能会有一些好处。在我们的例子中,就会变成 Carol 分别给每个签名者传递 P 的拷贝;这些签名者各自调用 walletprocesspsbt "P" 来签名,最终得到各自签名的 PSBT 结构体。然后,他们将各自的 PSBT 结构体发回给 Carol(发给其他某一人也可以),由后者来运行 combinepsbt 。最后的两个步骤( finalizepsbt 和 sendrawtransaction )保持不变。
(完)
您可能感兴趣
-
Cycle Network:打造加密领域的 VisaNet 支付网络
核心要点:Cycle Network采用三层架构设计:将以太坊作为安全锚点,实现跨源网络的连接扩展,并通过zkEVM rollup整合交易活动,从而消除对传统跨链桥的依赖。 该基础设施已支持全链稳定币
-
5 年 20 倍,美国最贵国运股诞生记
在这个愈发危险的世界里,美国需要 Palantir。作者:David & Liam,深潮 TechFlow2025 年 8 月 8 日,Palantir Technologies(PLTR)股价触及
-
日本放宽加密货币监管,EDCON 2025 重磅回归大阪
EDCON 将于 9 月 16 日至 19 日回归,Vitalik Buterin 和以太坊基金会的 Adrian Li 将在会上发表主题演讲。随着日本金融厅(FSA)近期推动新的立法,将加密货币重新
-
陷入困境的公司为何纷纷大举购买比特币?
文章作者:Nikou Asgari文章编译:Block unicorn 三个月前,乔治·卡拉姆从未考虑过他的半导体公司会开始购买比特币。 他的纽约上市公司股价长期低迷,卡拉姆在读到一家医疗保健公司购买
-
政策型周期:美国正在用监管政策重塑加密版图
我坚定地认为,这一轮的加密周期,是美国政府用政策来推动的。 就在上周,特朗普签署了一项关于401(k)退休金投资的行政令,允许把部分退休金资金投入私募股权、房地产、甚至是数字资产。而我们把时间线往前拉
-
CoinW 全栈融合 · 智能驱动——开启未来交易新格局
不仅是一场升级,更是“未来交易”的正式启航。随着数字资产和去中心化技术的快速发展,用户对交易平台的需求已从单一交易,拓展至全场景、全资产、全模式的综合体验。生态一体化正逐渐成为行业发展的必然趋势。全球
-
日报 | 美 SEC 主席将于今晚 8:30 就 Project Crypto 发表讲话;OKB 销毁后总量已正式降至为 2100 万枚
整理:Jerry,ChainCatcher重要资讯:华检医疗拟斥资不超 30 亿港元购入加密货币 币安钱包将于 8 月 18 日上线第 34 期 TGE 项目 Rice AI(RICE) Binanc
-
8月15日市场关键情报,你错过了多少?
精选要闻1、Hyperliquid 桥接资金突破 52 亿美元,创历史新高2、彭博社公开 Justin Sun「246 亿美元」资产清单,后者以泄露隐私为由提起诉讼3、价值 46 亿美元 BTC 与
- 成交量排行
- 币种热搜榜

