PSBT v2 は未完成の Bitcoin トランザクションと署名資料を交換するための BIP 370 の形式です。数字は PSBT の容器のバージョンを示し、トランザクション自体のバージョンや新しいネットワーク検証方式を自動的に意味しません。
BIP 174 の PSBT v0 はグローバルな未署名トランザクションを含みます。BIP 370 はその構築データを個別のフィールドへ移します。参加者は容器の作成後にも、規則に従って入力と出力を追加できます。ただし署名済みの部分を自由に変更できるわけでも、ファイル自体が支払いになるわけでもありません。 [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION は 2 でなければならず、PSBT_GLOBAL_UNSIGNED_TX は含めてはいけません。必須の PSBT_GLOBAL_TX_VERSION は作成するトランザクションのバージョンを別に指定し、グローバルマップには入力数と出力数も入ります。古いファイルのバージョン番号を書き換えるだけでは有効な PSBT v2 になりません。 [BIP 370 — PSBT Version 2]
入力は前の TXID と使用する出力のインデックスを指定する必要があります。出力には satoshi 単位の金額と scriptPubKey が必要で、追加時には対応するグローバルの個数も更新します。入力の sequence が省略されると 0xffffffff とみなします。構築データは UTXO 資料や署名機器が必要とする他の情報の検証を代替しません。 [BIP 370 — PSBT Version 2]
PSBT_GLOBAL_TX_MODIFIABLE のビット 0 は入力、ビット 1 は出力の変更を許可します。ビット 2 は SIGHASH_SINGLE 署名があることを知らせ、入力と対応するインデックスの出力との組を維持する必要があります。構築者は実際の署名を調べなければならず、フラグを立てるだけで本来無効な変更が安全になることはありません。 [BIP 370 — PSBT Version 2]
nLockTime には全入力と両立する要求の種類を選び、その最大値を使います。両方の種類が可能ならブロック高を優先し、両立しない入力は追加できません。入力の要求がなければグローバルの代替値を使い、それもなければゼロです。署名がすでにある場合、新しい入力で nLockTime を変えてはいけません。 [BIP 370 — PSBT Version 2]
署名者は SIGHASH に従ってフラグを更新します。SIGHASH_ANYONECANPAY を使わなければ入力変更を、SIGHASH_NONE を使わなければ出力変更を禁止し、SIGHASH_SINGLE では必要な組の維持を示します。最終化後、抽出器はフィールドからネットワーク用トランザクションを組み立てます。配信とネットワークでの受理は後続の手順であり、送られた容器の属性ではありません。 [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0 と v2 は直接交換可能ではありません。v0 への変換には未署名トランザクションの構築と、その版のフィールド規則の遵守が必要です。BIP 371 は両方の版に使う Taproot 資料を別に定義します。PSBT や Taproot 対応だけでは、そのウォレットが PSBT v2 を読み込み、署名し、書き出せる証拠にはなりません。 [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
信頼できる機器で受取人、金額、自分のお釣り出力、手数料を当初の意図と照合します。UTXO 資料、スクリプト、使用する SIGHASH を検証してください。鍵導出のメタデータだけでは出力の所有を証明できません。特定の調整役と機器での試行は互換性の確認であって、将来の全トランザクションの安全性の証明ではありません。 [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
理解を深めるには、この項目とあわせて次もお読みください PSBT, Hardware Wallet, Multisig, Taproot.