部分签名的比特币交易(Partially Signed Bitcoin Transaction, PSBT)是一种标准格式(BIP 174),用于在比特币交易的创建、签名和广播过程中传递未完成的交易数据。它支持多方协作签署交易,尤其适用于硬件钱包、多重签名钱包等场景。
PSBT 的核心功能
-
传递未完成的交易
-
PSBT 允许将未完全签名的交易数据在不同设备或参与方之间传递,逐步添加签名或其他必要信息(如脚本、公钥等)。
-
支持复杂交易
-
适用于多重签名、CoinJoin、时间锁交易等需要多方协作的场景。
-
标准化格式
-
通过二进制或 Base64 编码的格式统一数据交换,确保兼容性。
PSBT 的工作流程
-
创建交易框架
-
由发起者(如钱包软件)构建交易的输入(UTXO)、输出(接收地址)、手续费等基本信息,生成未签名的 PSBT 文件。
-
传递并部分签名
-
PSBT 被发送给签名者(如硬件钱包或多签参与方),各方依次添加自己的签名,但交易仍未完全有效。
-
合并签名
-
当所有必需的签名收集完成后,PSBT 会被组合成一个完全签名的比特币交易。
-
广播交易
-
最终交易被广播到比特币网络。
PSBT 的优势
-
安全性
私钥始终保存在离线设备(如硬件钱包)中,签名过程无需暴露私钥。 -
灵活性
支持多步骤签名,适应复杂的协作场景。 -
兼容性
主流钱包(如 Electrum、Ledger、ColdCard)和软件(如 Bitcoin Core)均支持 PSBT。
常见使用场景
-
硬件钱包签名
-
热钱包生成未签名交易 → 通过 PSBT 传给硬件钱包签名 → 返回广播。
-
多重签名(Multisig)
-
需要多个参与者分别签名,PSBT 简化了数据传递流程。
-
CoinJoin 或隐私交易
-
协调器通过 PSBT 收集多方输入和签名。
技术细节
-
PSBT 包含多个字段:
-
unsigned_tx
:未签名的交易骨架。 -
inputs
:每个输入的脚本、公钥、签名等元数据。 -
outputs
:输出的相关数据(如地址)。 -
扩展性:可通过
global
或per-input/output
字段添加自定义数据(如 BIP 370 的 Taproot 支持)。
示例
PSBT 文件(Base64 格式): cHNidP8BAH0CAAAAAri6BLjKQZGO9Y1iVIYbxlxBJ2kqsTPWnxGaFYs0sc8dAAAAAAD+////AqCGAQAAAAAAF6kU5Tqtp37w2GHoG5Q1dd4QFqJUSYC50gAAAAAAABepFLj0jg8AAAAXqRRY1ilqY0iA8Lk5i4V1BZCHCQ3jZAAAAAAAAAA=...
PSBT 可通过工具(如 bitcoin-cli decodepsbt
)解码查看详情。
总结来说,PSBT 是比特币生态中提升交易协作安全性和效率的重要工具,尤其适合需要离线签名或多方参与的复杂交易场景。