PSBT(Partially Signed Bitcoin Transaction)是“部分签名的比特币交易”,是一种在不同钱包和设备之间传递未完成交易的标准格式,由 BIP174 定义。它把待签名的交易和签名所需的信息打包在一起,让硬件钱包、离线设备和多签的各个签名人可以各自核对、各自签名,最后合并成一笔可以广播的交易。
为什么需要 PSBT?
签名者需要知道每个输入花费的 UTXO 金额和脚本,而离线设备或其他签名人通常没有这些信息,PSBT 用一个各家钱包都读得懂的统一格式把它们带了过去。
PSBT 里包含什么?
PSBT 由三部分组成:全局信息,里面是未签名的交易;每个输入的信息,包括花费的 UTXO、锁定脚本、密钥的派生路径,以及已经收到的签名;每个输出的信息,比如哪个输出是自己的找零。
PSBT 本质上是一串二进制数据,以固定的字节“psbt”开头。它常以 .psbt 文件、Base64 字符串或动态二维码的形式传递,Base64 形式的 PSBT 总是以 cHNidP8 开头。
一笔 PSBT 交易经过哪些步骤?
BIP174 把流程分成几个角色。创建者生成未签名的交易;更新者补充 UTXO、脚本和派生路径等信息;签名者核对后加上自己的签名;合并者把多份各自签过的 PSBT 合并成一份;完成者把签名放进最终位置;提取者输出可以广播的完整交易。
这些角色可以由同一个软件完成,也可以分散在不同的人和设备上。
PSBT 主要用在哪些场景?
PSBT 最常见的两个用途,一是让硬件钱包和离线设备在不联网的情况下签名,二是让多签的各位签名人用不同厂商的设备协作。买卖双方共同出资构造一笔交易时也会用到它。
签名 PSBT 时要核对什么?
PSBT 只是一个传递格式,本身不保证内容可信。如果生成 PSBT 的联网电脑被入侵,攻击者可以篡改收款地址、金额,甚至把找零输出指向自己的地址。签名设备必须在自己的屏幕上显示收款地址和金额,并用派生路径独立验证找零地址确实属于本钱包,否则就是盲签。
手续费也要核对。手续费等于输入总额减输出总额,签名设备要根据 PSBT 里的 UTXO 信息自己计算,而不是相信联网端给出的数字。对企业来说,还应在签名前用策略规则检查收款地址是否在白名单内、金额是否超限。
结语
PSBT 为比特币的待签交易提供了统一格式,让硬件钱包、离线设备和多签签名人能分头签名、最后合并。它解决了协作问题,却不替签名人把关,每个签名设备都要独立核对地址、金额和手续费。Safeheron 的 MPC 钱包即服务为企业提供 MPC 密钥管理和策略引擎。
想让每一笔比特币交易在签名前都经过策略核对?