PSBT 是一种标准格式,用于在检查和签署交易的钱包及设备之间传递尚未完成的比特币交易。它的全称是 Partially Signed Bitcoin Transaction,意为部分签名的比特币交易,但文件也可能尚无任何签名。它承载交易草案、辅助数据和签名,而不是私钥。所需材料齐备后,就可以生成一笔发往网络的普通交易。数字签名是用私钥生成、可供验证的授权凭证。私钥是让持有者能够签名的秘密数据,签名时并不需要公开它。
安娜想给帕维尔转 60 000 sat,也就是六万个比特币最小单位。她的钱包选用一笔以前收到、尚未花费的 100 000 sat 输出。输出记录了一笔金额,以及花费它所需满足的条件。在这个例子里,草案把 60 000 sat 给帕维尔,把 39 000 sat 作为找零退回安娜,剩下 1 000 sat 用作手续费。此时这些还只是付款指令。应用把它们装入 PSBT,再按照设备支持的方式,通过数据线、二维码或存储卡交给硬件钱包。安娜在设备屏幕上核对付款并批准签名。传回电脑的是签名,不是秘密密钥。因此,准备付款的设备和有权签名的设备不必是同一台。 [1] [4]
文件以 .psbt 结尾,并不代表付款安全。创建它的电脑可能已被入侵,也可能只是设置有误。安娜需要用从帕维尔那里可靠取得的地址核对收款人,同时检查金额、总手续费,以及找零是否回到自己的钱包。使用硬件钱包时,应以可信设备屏幕为准,并遵循厂商的操作流程。签名软件也会验证辅助数据,以及签名究竟覆盖哪些数据。技术术语 sighash 表示签名保护交易的哪些部分不被修改。新手不应在尚未理解时批准不常见的模式。如果地址不对,或手续费无法核实,应重新检查草案,而不是绕过检查。 [1]
在三把密钥中需要两把签名的 Multisig 钱包里,安娜可以先签,帕维尔再用自己的设备补上第二个签名。他们不必交换恢复词,也不必同时在线。协调器,也就是组织这套流程的应用,会收集同一笔付款的材料并合并签名。但每个签名人仍须自己确认付款意图,协调器不能代替他们作决定。BIP 174 把工作分为 creator(创建草案)、updater(补充数据)、signer(签名)和 combiner(合并对应版本)。finalizer 组装满足输入花费条件的最终数据,extractor 则提取网络可接收的普通交易。一个程序经常承担多种角色。这些名称描述的是工作,并不是必须有六个参与者。 [1] [4]
PSBT 可能暴露你打算使用哪些币、向谁付款、收到多少找零,以及地址之间的联系。文件还可能包含 xpub,即用于派生更多公钥的公开数据。结合钱包的地址规则,这些公钥可用于生成地址。文件也可能包含派生路径,用来标明密钥在钱包结构中的位置。不要为了看看文件内容,就把它交给来历不明的在线解析服务。已经签名的 PSBT 还有另一层意义:如果材料齐全,别人可能据此完成并广播你已授权的那一笔交易。删除自己的文件副本不会撤销签名。PSBT 也不能代替 Seed Phrase(用于恢复密钥的备份词语)或完整的 Multisig 配置备份。它服务于某笔具体付款,不是整个钱包的恢复方案。 [1] [4]
添加签名,不代表网络已经知道这笔付款。最终交易组装好以后,仍需有人广播它。节点是运行比特币验证软件的计算机,负责检查交易和区块。节点随后依据网络规则及自身的交易接收策略进行检查,矿工则可能将它放入区块。缺少签名、输入已被花费、手续费不足,是三种不同的问题,按下“完成”并不能自动解决。在依赖这套流程之前,应先测试具体的应用、设备和钱包类型组合。在 Bitcoin Core 29 中,analyzepsbt 可以指出缺少的数据或签名,finalizepsbt 可以生成完成后的交易;发送仍是下一步。即使成功完成组装,也不等于获得区块确认。 [4] [5] [6]
BIP 174 将 PSBT 定义为以键值对保存信息的二进制格式。这里的“键”是字段标识,不应理解为比特币私钥。全局映射描述整笔交易,输入映射描述将被花费的输出,输出映射描述新创建的输出。除了交易草案,文件还可以携带脚本,也就是花费条件,以及密钥来源和部分签名。数据可以保存为 .psbt 文件,也可以用 Base64 将二进制编码为文本。Base64 不是加密。PSBT 并不是比特币规则中的一种新交易类型:网络接收的是最终交易,而不是整份工作文件。 [1]
没有连接网络的设备,也必须知道自己被要求签署什么。UTXO 是之前产生、尚未花费的输出,新交易的输入会引用它。Non-Witness UTXO 可以提供完整的前一笔交易,Witness UTXO 则提供特定输出及其金额和花费条件。需要哪些证明材料,取决于输入类型和签名软件的规则。检查包括前一笔交易的标识及对应输出、脚本之间的关系,以及 sighash 是否可接受。金额缺失不能被当成手续费为零,证据缺失也不能被当成验证通过。应通过可信流程补齐数据,而不是猜测。 [1]
PSBT 版本描述的是格式结构,不是签名数量,也不是比特币交易本身的版本。PSBT v0 把未签名交易存入全局字段;如果未注明 PSBT 版本,就表示 v0。BIP 370 定义的 PSBT v2 不允许使用该字段,而是把构建交易所需的信息拆到各个独立字段中。这支持在允许的修改范围及已有签名约束下添加输入和输出,并不表示已经签名的付款可以随意重写。传递文件的双方都必须理解所用版本。因此,仅说“支持 PSBT”,不足以说明兼容性。 [2]
BIP 371 添加了 Taproot 所需的信息,包括签名、脚本和密钥来源。这些字段既适用于 PSBT v0,也适用于 PSBT v2。因此,钱包可以在前一种格式中处理 Taproot,却不支持后一种格式。反过来,支持 v2 也不意味着设备能处理所有 Taproot 场景。通过密钥路径签名和通过脚本分支花费,是满足 Taproot 输出条件的不同方式。对用户而言,最终要问的是:我这套具体设备和软件,能否处理我要签署的付款?答案来自文档和经过测试的流程,而不是功能列表中的一个缩写。 [3]
要获得更完整的理解,请将本词条与以下词条结合阅读: Multisig, Hardware Wallet, Cold Storage, Output Descriptor. 反向关联还来自: Multisig, Cold Storage, Hardware Wallet, Watch-only Wallet.