進階
PSBT:部分簽章交易
PSBT 是一種標準格式,讓未完成的交易可以在多個軟體和設備之間安全傳遞。
15 分鐘
什麼是 PSBT?
PSBT(Partially Signed Bitcoin Transaction)是 BIP-174 定義的標準格式, 用於在不同軟體和硬體之間傳遞尚未完成簽章的比特幣交易。
PSBT 解決的問題
- • 冷錢包/氣隙電腦的離線簽章
- • 多簽錢包的多方協調
- • 不同錢包軟體之間的互通
- • 硬體錢包與軟體錢包的配合
PSBT 的角色
| 角色 | 職責 | 範例 |
|---|---|---|
| Creator | 創建交易框架(輸入/輸出) | 觀察錢包、協調軟體 |
| Updater | 添加簽章所需的資訊 | 添加 UTXO、派生路徑 |
| Signer | 使用私鑰生成簽章 | 硬體錢包、離線電腦 |
| Combiner | 合併多個簽章 | 多簽協調軟體 |
| Finalizer | 組裝最終的 scriptSig/witness | 完成交易 |
| Extractor | 提取可廣播的交易 | 產生原始交易 |
PSBT 流程圖
Creator: 創建 PSBT
↓
Updater: 添加 UTXO 資訊
↓ Signer(s): 簽章
↓
Combiner: 合併簽章
↓
Finalizer: 完成 witness
↓ Extractor: 廣播
PSBT 結構
PSBT 使用鍵值對格式存儲資訊:
PSBT 結構:
├── 全域欄位
│ ├── 未簽章交易 (PSBT_GLOBAL_UNSIGNED_TX)
│ ├── xpub (可選)
│ └── 版本號
├── 輸入欄位 (每個輸入)
│ ├── 前序交易或 UTXO 資訊
│ ├── Redeem Script / Witness Script
│ ├── BIP-32 派生路徑
│ └── 部分簽章
└── 輸出欄位 (每個輸出)
├── Redeem Script / Witness Script
└── BIP-32 派生路徑 常見應用場景
1. 硬體錢包簽章
軟體錢包創建 PSBT,透過 USB 或 SD 卡傳給硬體錢包簽章, 再返回已簽章的 PSBT 進行廣播。
流程
- 1. Sparrow Wallet 創建 PSBT
- 2. 通過 SD 卡傳給 Coldcard
- 3. Coldcard 驗證並簽章
- 4. 返回已簽章的 PSBT
- 5. Sparrow 廣播交易
2. 多簽錢包協調
2-of-3 多簽中,PSBT 在三個簽章者之間傳遞,收集足夠的簽章。
2-of-3 多簽流程
- 1. 協調者創建 PSBT
- 2. 發送給簽章者 A → 返回帶 A 簽章的 PSBT
- 3. 發送給簽章者 B → 返回帶 A+B 簽章的 PSBT
- 4. 已達到 2 個簽章,可以廣播
3. CoinJoin 協調
多個參與者各自簽署自己的輸入,協調者合併所有簽章。
PSBT 傳輸方式
- • Base64 文字:適合複製貼上
- • QR Code:適合手機和氣隙設備
- • .psbt 文件:適合 SD 卡和 USB
- • NFC:某些硬體錢包支援
Base64 編碼範例
cHNidP8BAHUCAAAAASaBcTce3/KF6Tig7cez...
開頭的 "cHNidP8" 解碼後是 "psbt" 魔術字節
PSBT v2 (BIP-370)
PSBT v2 改進了原始格式,主要變化:
- • 交易欄位分散存儲,而非完整的未簽章交易
- • 支援更靈活的交易構建(可增減輸入/輸出)
- • 改善了 Creator 和 Updater 角色的分離
- • 更好地支援多方交易協議(如 CoinJoin)
實際操作
Bitcoin Core CLI
# 創建 PSBT
bitcoin-cli walletcreatefundedpsbt '[]' '[{"bc1q...": 0.01}]'
# 處理 PSBT(添加 UTXO 資訊)
bitcoin-cli walletprocesspsbt "cHNidP8..."
# 簽章 PSBT
bitcoin-cli walletprocesspsbt "cHNidP8..." true
# 完成並提取交易
bitcoin-cli finalizepsbt "cHNidP8..."
# 廣播
bitcoin-cli sendrawtransaction "0200000001..." Sparrow Wallet
- 創建交易後,點擊「Save Transaction」
- 選擇「PSBT」格式
- 傳給硬體錢包簽章
- 導入已簽章的 PSBT
- 廣播交易
安全考量
- ✓ PSBT 本身不包含私鑰,可以安全傳輸
- ✓ 簽章設備應驗證交易詳情(地址、金額、手續費)
- △ 確保 PSBT 來源可信,避免簽署惡意交易
- △ 硬體錢包應顯示完整交易資訊供用戶確認
相關 BIP
延伸閱讀: 多簽錢包入門 詳細說明了 PSBT 在多簽場景的應用。
已複製連結