本文へスキップ
buybitcoinsmart

用語集 / ウォレットとカストディ

PSBTバージョン2

別名はPSBTv2です。

PSBTバージョン2とは?
PSBTバージョン2は、固定の未署名トランザクションを持たない部分的署名済みトランザクション形式であり、ファイルが作成された後でも参加者がインプットとアウトプットを追加できるようにします。

BIP-370で規定されています。

バージョン0は作成時にインプットとアウトプットの集合を固定しますが、バージョン2はすべての詳細をインプットごとおよびアウトプットごとのマップに移します。BIP-370は2021年1月14日に割り当てられ、番号1を飛ばしています。BIP-174の形式はバージョン0であり、口頭ではバージョン1と呼ばれていたためです。保有者にとって、バージョン2が重要になるのは、すでに開始したトランザクションに別の参加者がコインを追加する署名セッションだけです。

仕組み

PSBTバージョン2はBIP-174の外側のコンテナを維持し、その中身を再配置します。切り替えを定義する規則は2つあります。PSBT_GLOBAL_UNSIGNED_TXが存在してはならず、PSBT_GLOBAL_VERSIONが存在して2に設定されていなければなりません。

削除されたトランザクションがかつて担っていた内容は、12の新しいフィールドに再配分されます。5つはグローバルです。トランザクションバージョン(0x02)、フォールバックlocktime(0x03)、インプット数(0x04)、アウトプット数(0x05)、変更可能フラグのバイト(0x06)です。5つは各インプットに置かれます。32バイトの前のtxid(0x0e)、使用されるアウトプットのインデックス(0x0f)、シーケンス番号(0x10)、そして2つの必須locktime、すなわち500000000以上のタイムスタンプベースのもの(0x11)と、それ未満かつゼロより大きい高さベースのもの(0x12)です。アウトプットには2つが加わります。サトシ単位の金額を64ビットの符号付きリトルエンディアン整数で表したもの(0x03)と、スクリプト(0x04)です。

実際の役割を果たすのは変更可能フラグのバイトです。ビット0はインプットをまだ追加または削除できることを示し、ビット1はアウトプットについて同じことを示し、ビット2は、ある署名がすでにSIGHASH_SINGLEで確定しているため、そのインプットとアウトプットの対応を保持しなければならないことを記録します。署名者は作業を進めながらこれらのビットを厳しくしていかなければなりません。SIGHASH_ANYONECANPAYを使わない署名はビット0をクリアし、SIGHASH_NONEを使わない署名はビット1をクリアします。編集を続ける許可は、次の保有者の良識に委ねられるのではなく、署名が揃うにつれてひとりでに失効します。

BIP-370は、失われたトランザクションが残した2つの問いに決着をつけます。locktimeはインプットが一致する最大の値となり、それがなければグローバルフィールド、それもなければ0にフォールバックし、同点の場合は高さベースの要件が優先されます。同一性は、すべてのシーケンス番号を0に固定してフィールドを組み立てることで得られるtxidとなります。シーケンスは後からでも編集できるためです。

どこで見られるか

PSBTバージョン2は、BIP-174に対応するものがない役割、すなわちConstructorを導入します。Creatorは0個のインプットと0個のアウトプットでファイルを開いて引き渡し、Constructorは変更可能フラグを確認したうえでそれらを追加します。貢献を見込むCreatorは、トランザクションバージョンを少なくとも2に設定する必要もあります。そうすることで、OP_CHECKSEQUENCEVERIFYのようにそれに依存する機能が引き続き利用できます。

バージョン2はBIP-174のシリアライズを再利用するため、ファイルは外見上同じに見えます。この分離は意図的なものです。BIPにある24件の無効なテストベクターのうち、13件は通常のバージョン0のファイルであり、場違いなフィールドやバージョン番号によって拒否されたものです。変換は下り方向にのみ進みます。バージョン2のファイルは、それ自身のフィールドからバージョン0のファイルとして再構築できるためです。参照実装はBitcoin Coreのプルリクエスト21283であり、BIPのヘッダーはステータスをDeployedと記録しています。

当サイトの41件のウォレットレビューのうち、PSBTに言及しているのは2件、Sparrow(評価4.7)とBlueWallet(4.2)であり、いずれもバージョンには言及していません。ソフトウェアが別段の記載をしていない限りバージョン0とみなし、使い慣れないツールは少量で試してから残りの金額を扱わせてください。

PSBTバージョン2 vsトランザクションバージョン番号

PSBTバージョン2はファイル形式に番号を振るものであり、トランザクションバージョン番号はその中で組み立てられるトランザクションに番号を振るものです。どちらも同じグローバルマップに存在しますが、BIP-370はそれらが同じフィールドではないと明言しています。PSBT_GLOBAL_VERSIONはすべてのバージョン2のファイルで2です。PSBT_GLOBAL_TX_VERSIONは組み立て中のトランザクションのための32ビットの符号付き整数であり、BIP-370は、Creatorが貢献を見込む場合にはそれが少なくとも2であることを要求します。これが両者が混同される理由です。前者を変更すれば、古いパーサーはファイルを拒否します。後者を変更すれば、その支出がどのコンセンサスルールで判定されるかが変わります。

混同しやすい用語

よくある質問

ハードウェアウォレットを使うのにPSBTバージョン2は必要ですか?

いいえ。BIP-174が定義した形式であるバージョン0は、署名が始まる前にインプットとアウトプットが確定している通常の支出を対象としています。バージョン2がその価値を発揮するのは、すでに開始したトランザクションに別の参加者がコインを追加しなければならない場合だけです。

PSBTバージョン1が存在しないのはなぜですか?

その番号は意図的に飛ばされました。BIP-174の形式はバージョン0ですが、BIP-370が設計されている間は口頭でバージョン1と呼ばれていたため、新しい形式はバージョン1と呼ばれるものを2つ残すのではなく、番号2を取ったのです。

バージョン0のソフトウェアはバージョン2のファイルを開けますか?

そのままでは開けません。BIP-370はグローバルバージョンフィールドを通じて、2つの形式を意図的に互換性のないものにしています。ただし、バージョン2のファイルは、そのフィールドから未署名トランザクションを組み立てることでバージョン0のファイルに変換できます。

次に読む

出典

最終確認日は2026年9月6日です。

関連用語

ウォレットとカストディのその他の用語

このページを英語で読む