PSBT 流程完全指南

深入解析比特幣部分簽署交易(PSBT)的標準格式、協作簽署流程與實際應用場景。

PSBT 流程完全指南

概述

PSBT(Partially Signed Bitcoin Transactions,部分簽署的比特幣交易)是 BIP-174 定義的標準格式,用於在多方之間安全地協作創建和簽署比特幣交易。PSBT 使得硬體錢包、多簽名設置、冷錢包管理等場景的交易簽署變得更加簡便和安全。

為什麼需要 PSBT?

傳統交易的問題

在傳統比特幣交易流程中,簽署過程面臨幾個挑戰:

  1. 私鑰暴露風險:要簽署交易,私鑰必須暴露在線上設備中
  2. 多方協調困難:多個簽名者需要親自到場或傳遞未簽名的交易
  3. 離線簽署複雜:冷錢包離線簽署需要複雜的交易構造流程
  4. 交易詳細資訊不透明:簽名者可能無法驗證交易的完整細節

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 使用場景

場景一:硬體錢包 + 熱錢包

  1. 熱錢包創建交易並轉換為 PSBT
  2. 將 PSBT 傳遞給硬體錢包
  3. 硬體錢包顯示交易詳情,用戶確認
  4. 硬體錢包返回簽署後的 PSBT
  5. 熱錢包完成交易並廣播

這是最常見的使用場景,私鑰始終保留在硬體設備中。

場景二:多簽名交易

多簽名設置中,多個簽名者依次對 PSBT 進行簽署:

  1. 第一個簽名者使用 walletprocesspsbt 進行本地簽署
  2. 將 PSBT 傳遞給第二個簽名者
  3. 重複直到所有簽名者完成
  4. 任何人可以廣播最終交易

場景三:冷錢包離線簽署

  1. 線上設備創建交易並轉換為 PSBT
  2. 將 PSBT 透過 USB/QR 碼傳遞到離線設備
  3. 離線設備(冷錢包)驗證並簽署交易
  4. 將簽署後的 PSBT 導回到線上設備
  5. 線上設備完成並廣播

場景四:CoinJoin 協作

PSBT 使得多方可以協作創建 CoinJoin 交易:

  1. 參與者各自創建自己的輸入和輸出
  2. 透過 PSBT 交換輸入數據
  3. 各自簽署自己的輸入
  4. 聚合所有簽名並廣播

常見問題

PSBT 和原始交易有什麼區別?

PSBT 是一個「部分簽署」的狀態,可以包含多方簽名。而原始交易(raw transaction)要么是完全未簽署的,要么是已經完全簽署可以廣播的。

PSBT 是否可以重複簽署?

是的,可以對同一個 PSBT 進行多次簽署。每次簽署都會添加新的簽名數據,直到所有必要的簽名都收集完成。

PSBT 支援哪些地址類型?

PSBT 支援所有現代比特幣地址類型:

如何確保 PSBT 的安全性?

  1. 驗證 UTXO:在簽署前確認輸入確實屬於你
  2. 驗證輸出:確認目標地址和金額正確
  3. 使用硬體錢包:讓硬體錢包顯示並確認交易詳情
  4. 離線驗證:離線設備上驗證交易後再簽署

總結

PSBT 是比特幣生態系統中重要的標準化工具,它極大地簡化了多方協作簽署的流程,增強了交易安全性,並使得硬體錢包和冷錢包的使用更加便利。隨著比特幣應用場景的日益複雜,PSBT 的重要性將持續增長。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!