PSBT
部分签名比特币交易(PSBT)是一种比特币标准,可促进未签名交易的可移植性,允许多方轻松签署同一交易。当多方希望向同一交易添加输入时,这非常有用。PSBT 由 BIP 174 引入,允许用户更轻松地在冷存储设备上签署交易,然后从连接到互联网的设备广播已签名的交易。
PSBT 的主要设计目标包括:
-
简化多签名交易:PSBT 使多个参与者能够轻松地共同完成一个交易,而无需关心底层实现细节。
-
增强兼容性:PSBT 为不同钱包软件之间的交互提供了一个通用、可扩展的格式。
-
支持离线签名:PSBT 允许离线设备(如硬件钱包和隔离签名设备)在不访问比特币网络的情况下进行签名。
PSBT 包括以下几个部分:
-
未签名交易(Unsigned Transaction):包含交易的输入和输出信息,但尚未包含签名。
-
输入数据(Input Data):为每个交易输入提供签名所需的信息,如 UTXO 详细信息、公钥、部分签名等。
-
输出数据(Output Data):为每个交易输出提供额外信息,如赎回脚本和公钥等。
使用 PSBT 完成多签名交易的基本流程如下:
-
创建者:构建一个包含输入和输出信息的未签名交易。
-
更新者:为每个输入提供必要的签名信息,如 UTXO 详细信息、公钥等。
-
签名者:使用私钥对输入进行签名,并将部分签名添加到 PSBT。
-
组合者:将多个部分签名的 PSBT 合并成一个完整的 PSBT。
-
最终化者:确保所有输入已经完全签名,并将签名信息添加到原始交易。
-
提交者:将最终签名的交易广播到比特币网络。
举个例子,五位参与者要建构一笔 CoinJoin 交易,他们各自给一位协调员发送一条消息,包含自己希望放入这笔 CoinJoin 中的 UTXO。每个参与者也都提供接收比特币的地址。
协调员实用所有的 UTXO 作为输入,建构出一笔交易,并创建相应的输出,将相同数量的比特币发到各参与者的接收地址。
下一步,协调员将这笔交易转化成一个部分签名的比特币交易,然后将这个 PSBT 发送给每一位参与者。参与者们各自为自己收到的 PSBT 加入自己的签名,然后将签过名的 PSBT 发回给协调员,协调员会将这 5 个 PSBT 合并起来、形成最终的交易。最终,协调员得到了一个完整签名的交易,每个参与者的输入都有相应的签名。
这个过程是完全免信任的:虽然每个成员都依赖于协调员来创建和敲定 PSBT,无论协调员还是参与者,没有人能从其他参与中手上偷取资金。