拆解比特币 PSBT:一笔交易为什么需要“多方签名拼装术”?

·

关键概念预览:比特币、PSBT(部分签名比特币交易)、多重签名、去中心化交易市场、离线签名、硬件钱包

什么是比特币 PSBT?

比特币 PSBT(Partially Signed Bitcoin Transaction,部分签名比特币交易)是一种可跨设备、跨实体协作签名的交易格式。它的出现让“这把私钥不在线就能完成签名”成为现实,把“完整的交易”拆成可拼装的“图纸”。
一句话概括:
PSBT = 未签名的原始交易 + 所有必要的元数据 + 每个人依次签名的空位

诞生动机

早期多重签名或冷钱包签名流程极为繁琐:

  1. 用户 A 在离线电脑构造交易 →
  2. 把交易 U 盘拷到在线电脑 →
  3. 再次 U 盘拷回冷电脑 → …
    步骤多、易中毒、难以脚本化。
    BIP 174 用可扩展的“PSBT”封装所有信息,浏览器插件、硬件钱包、手机端都能各司其职,管钥匙的只签名,管数据的只广播

PSBT 结构拆解

一份 PSBT 由键值对(KV)顺序拼接而成,各字段都带类型标识,因此各软件既能“只看自己懂的”,也不担心兼容旧工具。整体分为 4 个区段:

区段作用关键词示例
Global交易全局数据unsigned_tx, version, xpub
Input每个 UTXO 的输入信息previous_txid, redeem_script, witness_utxo
Output每个输出的校验与找零数据redeem_script, bip32_derivation
Partial Signature多轮签名累积处partial_sig, final_scriptsig, final_scriptwitness
不含任何私钥!就连公钥也只放推导路径,安全边间拉满。

典型使用场景

场景一:2/3 多重签名冷钱包

场景二:去中心化 Marketplace

Maker 把 PSBT 发到群聊,Taker 填入找零、签名,最后双方用原子交换保证公平:
👉 点击了解无需信任的跨链交割冷知识


PSBT 实现方案对比

方法优势典型工具
Bitcoin Core 命令行原生支持、极低耦合bitcoin-cli walletprocesspsbt
HWI 协议支持 Trezor、Ledger 一键签名Python 脚本
Web Broadcasting浏览器插件直接二维码传输Sparrow、Unisat
小提示:测试网先玩一轮,节约高费时段 Gas。

安全注意清单

  1. 验证输入金额:永远核对手续费率 = (输入 − 输出) / 交易体积,别被钓鱼地址把大额输出偷偷改写。
  2. 固件校验:硬件钱包签名前检查固件校验和,防止恶意升级。
  3. 冷端隔离:最后的 finalizer 环节必须在隔离网段完成,避免泄露完整交易结构。

FAQ(常见问题与解答)

Q1:PSBT 里能包含 SegWit 与普通地址混用吗?
A:能。它本质上仍是“待签交易骨架”,只要求每个输入写明 scriptPubKey 类型即可。

Q2:PSBT 文件会泄露我的资产额度吗?
A:会披露 UTXO 的来源和额度,因此建议仅在受信任的多签伙伴之间传输;或者对文件加密后点对点传输。

Q3:如果某一步忘了签名,能恢复吗?
A:PSBT 可随时回写任意区段。甚至可以“加签”再进行下一轮传递,极为灵活。

Q4:硬件钱包不显示完整目标地址怎么办?
A:这是防篡改策略。确认前务必在离线工作站上通过 decodepsbt 检查后四位,再决定放行签名。

Q5:想给莱特币也用 PSBT?
A:莱特币、比特币现金等 UTXO 链都维持兼容。只需各自节点返回的 feerate 不同,其余流程完全一致。

Q6:在哪里在线查看 PSBT 的 JSON 视图?
👉 点此获得 PSBT 解码器 1 秒看懂


下一步:用代码生成 PSBT 最小示例

如果你有 Rust 环境,可直接跑 bitcoin crate 生成:

use bitcoin::{TxIn, TxOut, Transaction, Network};
use bitcoin::psbt::PartiallySignedTransaction;

let unsigned_tx = Transaction {
    version: 2,
    lock_time: 0,
    input: vec![TxIn::default()],
    output: vec![TxOut::default()],
};
let psbt = PartiallySignedTransaction::from_unsigned_tx(unsigned_tx).unwrap();

一分钟后你会拿到 Base64 字符串,再交给您的硬件钱包即可体验真实环节。记住:
可见即可读,PSBT 不神秘,却仍需谨慎对待每一步签名。