PSBT 流程完全指南
深入解析比特幣部分簽署交易(PSBT)的標準格式、協作簽署流程與實際應用場景。
PSBT 流程完全指南
概述
PSBT(Partially Signed Bitcoin Transactions,部分簽署的比特幣交易)是 BIP-174 定義的標準格式,用於在多方之間安全地協作創建和簽署比特幣交易。PSBT 使得硬體錢包、多簽名設置、冷錢包管理等場景的交易簽署變得更加簡便和安全。
為什麼需要 PSBT?
傳統交易的問題
在傳統比特幣交易流程中,簽署過程面臨幾個挑戰:
- 私鑰暴露風險:要簽署交易,私鑰必須暴露在線上設備中
- 多方協調困難:多個簽名者需要親自到場或傳遞未簽名的交易
- 離線簽署複雜:冷錢包離線簽署需要複雜的交易構造流程
- 交易詳細資訊不透明:簽名者可能無法驗證交易的完整細節
PSBT 的解決方案
PSBT 提供了一個標準化的交易傳遞格式,使得:
- 交易構造和簽名可以分離
- 硬體錢包可以在不解私鑰的情況下參與簽署
- 多方可以依次對同一交易進行簽署
- 驗證和簽署過程更加透明和安全
PSBT 的生命週期
1. 交易構造(Creation)
交易發起者使用比特幣節點或錢包軟體創建交易:
# 使用 Bitcoin Core 創建未簽名的交易
createrawtransaction '[{"txid":"...","vout":0}]' '[{"address":"bc1q...":0.01}]'
此時產生的交易稱為「未簽署的交易」,需要轉換為 PSBT 格式。
2. 轉換為 PSBT(Conversion)
將原始交易轉換為 PSBT 格式:
# Bitcoin Core 指令
converttopsbt "raw_transaction_hex"
3. 添加輸入數據(UTXO 填充)
PSBT 需要包含每個輸入的完整 UTXO 資訊,以便後續簽名者驗證:
# Bitcoin Core 指令
utxoupdatepsbt "psbt"
這一步會自動從節點的 UTXO 集 合中查找並填入所需的輸入數據。
4. 本地簽署(Local Signing)
第一個簽名者(通常是軟體錢包)進行本地簽署:
# 使用錢包中的私鑰進行簽署
walletprocesspsbt "psbt"
簽署後,PSBT 會包含對應的簽名數據,但可能仍需要其他簽名者的簽署。
5. 传递给下一个签名者
簽署後的 PSBT 可以安全地傳遞給下一個簽名者(例如硬體錢包):
# 解碼 PSBT 查看詳細資訊
decodepsbt "psbt"
解碼後可以看到:
- 輸入和輸出詳細資訊
- 已有哪些簽名
- 還需要哪些簽名
- 見證數據(如果有)
6. 硬體錢包簽署
硬體錢包可以在不解私鑰的情況下對 PSBT 進行簽署:
# 透過硬體錢包簽署
hardwarewalletprocesspsbt "psbt"
硬體錢包會顯示交易詳細資訊(包括目標地址和金額),用戶確認後才會進行簽署。
7. 最終廣播(Finalization & Broadcast)
所有必要的簽名收集完成後,需要完成交易並廣播:
# 完成交易(添加最終見證數據)
finalizepsbt "psbt"
# 提取最終的原始交易
extracttransaction "psbt"
# 廣播交易
sendrawtransaction "hex_string"
PSBT 欄位詳解
全局欄位
| 欄位 | 說明 |
|---|---|
| 版本號 | 交易版本 |
| 輸入計數 | 輸入數量 |
| 輸出計數 | 輸出數量 |
輸入欄位(每個輸入)
| 欄位 | 說明 |
|---|---|
| UTXO | 未花費的交易輸出 |
| UTXO 數量 | UTXO 的比特幣數量 |
| 見證腳本 | SegWit 交易的見證腳本 |
| 贖回腳本 | P2SH 腳本的贖回腳本 |
| 簽名數據 | 該輸入的簽名(如果有) |
| 最終化標誌 | 是否已完成簽署 |
輸出欄位(每個輸出)
| 欄位 | 說明 |
|---|---|
| 金額 | 輸出的比特幣數量 |
| 腳本 | 輸出腳本(鎖定腳本) |
PSBT 使用場景
場景一:硬體錢包 + 熱錢包
- 熱錢包創建交易並轉換為 PSBT
- 將 PSBT 傳遞給硬體錢包
- 硬體錢包顯示交易詳情,用戶確認
- 硬體錢包返回簽署後的 PSBT
- 熱錢包完成交易並廣播
這是最常見的使用場景,私鑰始終保留在硬體設備中。
場景二:多簽名交易
多簽名設置中,多個簽名者依次對 PSBT 進行簽署:
- 第一個簽名者使用
walletprocesspsbt進行本地簽署 - 將 PSBT 傳遞給第二個簽名者
- 重複直到所有簽名者完成
- 任何人可以廣播最終交易
場景三:冷錢包離線簽署
- 線上設備創建交易並轉換為 PSBT
- 將 PSBT 透過 USB/QR 碼傳遞到離線設備
- 離線設備(冷錢包)驗證並簽署交易
- 將簽署後的 PSBT 導回到線上設備
- 線上設備完成並廣播
場景四:CoinJoin 協作
PSBT 使得多方可以協作創建 CoinJoin 交易:
- 參與者各自創建自己的輸入和輸出
- 透過 PSBT 交換輸入數據
- 各自簽署自己的輸入
- 聚合所有簽名並廣播
常見問題
PSBT 和原始交易有什麼區別?
PSBT 是一個「部分簽署」的狀態,可以包含多方簽名。而原始交易(raw transaction)要么是完全未簽署的,要么是已經完全簽署可以廣播的。
PSBT 是否可以重複簽署?
是的,可以對同一個 PSBT 進行多次簽署。每次簽署都會添加新的簽名數據,直到所有必要的簽名都收集完成。
PSBT 支援哪些地址類型?
PSBT 支援所有現代比特幣地址類型:
- P2PKH(Legacy)
- P2SH
- P2WPKH(Native SegWit)
- P2WSH(Multi-sig SegWit)
- P2TR(Taproot)
如何確保 PSBT 的安全性?
- 驗證 UTXO:在簽署前確認輸入確實屬於你
- 驗證輸出:確認目標地址和金額正確
- 使用硬體錢包:讓硬體錢包顯示並確認交易詳情
- 離線驗證:離線設備上驗證交易後再簽署
總結
PSBT 是比特幣生態系統中重要的標準化工具,它極大地簡化了多方協作簽署的流程,增強了交易安全性,並使得硬體錢包和冷錢包的使用更加便利。隨著比特幣應用場景的日益複雜,PSBT 的重要性將持續增長。
相關文章
- 比特幣腳本語言入門 — 理解 Bitcoin Script 的基本指令與運作原理。
- Taproot 全面解析 — 比特幣最新的腳本升級:MAST、BIP-340/341/342。
- 比特幣密碼學基礎 — 深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。
- Nakamoto 共識機制 — 深入分析比特幣的革命性共識機制:工作量證明、最長鏈原則、激勵相容性與安全性分析。
- Bitcoin Core 節點運作 — 運行完整節點,理解比特幣網路的運作機制。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!