跳至主要內容
Standards Track Draft

BIP-370: PSBT 版本 2

改進的 PSBT 格式,支援更靈活的交易構建和多方協議。

Andrew Chow 2021年1月14日
BIP 編號

370

類型

Standards Track

狀態

Draft

創建日期

2021-01-14

摘要

PSBT v2 是對 BIP-174 (PSBT v0) 的重大改進。它重新設計了 PSBT 的結構, 使其更適合多方交易構建協議,如 CoinJoin 和交互式交易構建。

PSBT v0 的限制

原始 PSBT 格式存在一些限制:

  • 不可修改:創建後無法添加/移除輸入輸出
  • 完整交易必須存在:全域欄位包含完整的未簽章交易
  • 角色混淆:Creator 和 Updater 角色難以分離
  • 多方困難:不適合 CoinJoin 等需要動態構建的協議

v2 的關鍵改進

1. 交易欄位分散存儲

v2 不再在全域區域存儲完整的未簽章交易。相反,交易的各個部分(版本、locktime、輸入、輸出) 分別存儲在各自的區域,允許獨立修改。

PSBT v0 結構:
├── Global
│   ├── PSBT_GLOBAL_UNSIGNED_TX (完整交易)
│   └── ...
├── Inputs[...]
└── Outputs[...]

PSBT v2 結構:
├── Global
│   ├── PSBT_GLOBAL_TX_VERSION
│   ├── PSBT_GLOBAL_FALLBACK_LOCKTIME
│   ├── PSBT_GLOBAL_INPUT_COUNT
│   ├── PSBT_GLOBAL_OUTPUT_COUNT
│   └── ...
├── Inputs[...]
│   ├── PSBT_IN_PREVIOUS_TXID
│   ├── PSBT_IN_OUTPUT_INDEX
│   ├── PSBT_IN_SEQUENCE
│   └── ...
└── Outputs[...]
    ├── PSBT_OUT_AMOUNT
    ├── PSBT_OUT_SCRIPT
    └── ...

2. 可修改狀態

新增 PSBT_GLOBAL_TX_MODIFIABLE 欄位, 明確指示 PSBT 是否可以被修改。這允許 Constructor 角色動態添加輸入和輸出。

可修改標誌

Bit 0

可添加輸入

Bit 1

可添加輸出

Bit 2

有 SIGHASH_SINGLE

3. 新角色:Constructor

v2 引入 Constructor 角色,負責添加輸入和輸出。這與 Updater(添加簽章資訊)明確分離。

v2 角色模型

角色 v0 v2
Creator 創建完整交易框架 創建空 PSBT(只有版本)
Constructor 不存在 添加輸入和輸出
Updater 添加所有資訊 只添加簽章所需資訊
Signer 簽章 簽章(相同)
Combiner 合併 合併(相同)
Finalizer 完成 完成(相同)
Extractor 提取 提取(相同)

多方交易構建

PSBT v2 特別適合需要多方參與的協議:

CoinJoin 示例

  1. 1. 協調者創建空 PSBT v2
  2. 2. 參與者 A 作為 Constructor 添加自己的輸入和輸出
  3. 3. 參與者 B 添加自己的輸入和輸出
  4. 4. 參與者 C 添加自己的輸入和輸出
  5. 5. 協調者鎖定 PSBT(設置不可修改)
  6. 6. 每個參與者作為 Signer 簽署自己的輸入
  7. 7. 合併、完成、廣播

新增全域欄位

欄位 說明
PSBT_GLOBAL_TX_VERSION 交易版本號
PSBT_GLOBAL_FALLBACK_LOCKTIME 預設 locktime
PSBT_GLOBAL_INPUT_COUNT 輸入數量
PSBT_GLOBAL_OUTPUT_COUNT 輸出數量
PSBT_GLOBAL_TX_MODIFIABLE 可修改標誌

新增輸入/輸出欄位

欄位 類型 說明
PSBT_IN_PREVIOUS_TXID Input 前序交易 ID
PSBT_IN_OUTPUT_INDEX Input 前序輸出索引
PSBT_IN_SEQUENCE Input nSequence 值
PSBT_OUT_AMOUNT Output 輸出金額(聰)
PSBT_OUT_SCRIPT Output 輸出腳本

向後相容

PSBT v2 與 v0 不直接相容。轉換規則如下:

  • • v0 可以轉換為 v2(分解未簽章交易)
  • • v2 可以轉換為 v0(重建未簽章交易,僅當不可修改時)
  • • 版本號存儲在 PSBT_GLOBAL_VERSION 欄位

相關 BIP

  • BIP-174:PSBT v0(原始格式)
  • BIP-371:Taproot PSBT 欄位
已複製連結
已複製到剪貼簿