本文へ移動

UTXOモデル

ビットコインが未使用トランザクション出力で支出可能な価値を表し、支出を検証し、釣銭を作成し、取引空間を価格付けする仕組みと、コイン選択・プライバシーのトレードオフを解説します。

更新日

教育目的の情報であり、投資助言ではありません。投資により損失が生じる可能性があります。

端的な答え

未使用トランザクション出力(UTXO)モデルは、支出可能な価値を、口座に記録された一つの残高ではなく、個別の出力として表します。ビットコインでは、通常のトランザクション入力がトランザクション識別子と出力インデックスによって以前の出力を指定します。その出力には金額とロックスクリプトが記録されています。ウォレットに表示される残高は、一つのアドレス内の残高フィールドではなく、ウォレットが支出できる出力を合計した派生値です。

出力は全額が一度に支出されます。選択した入力が支払額と手数料の合計を上回る場合、トランザクションは釣銭出力を明示的に作成しなければなりません。プロトコルが釣銭を自動返却することはありません。一つのトランザクションは複数の既存UTXOを消費し、それぞれ独自の金額と支出条件を持つ複数の新しいUTXOを作成できます。

仕組み

通常の非coinbaseトランザクションが有効であるには、参照する各出力が存在して未使用であり、各入力が参照先出力のロック条件を満たし、出力総額が入力総額を超えないことが必要です。差額はトランザクション手数料に充てられます。

fee = sum(inputs) - sum(outputs)

ノードはブロックを受け入れるたびに、現在のUTXOセットから消費済み出力を削除し、新しく作成された出力を追加します。この状態の検証と再構築には、引き続きブロック履歴が必要です。チェーン再編成で最近のブロックが置き換わると、先端付近の出力は未確認に戻るか、受け入れ済み履歴から消える場合があります。

受け入れられた一つのチェーン履歴では、特定の出力を消費できるのは一度だけです。競合する未確認トランザクションが同じ出力を使おうとすることはありますが、mempoolへの受け入れと置換はノード方針であり、オンチェーンの二重支出を有効にする規則ではありません。BIP 125は選択的な置換シグナルと方針を定義しているため、未確認トランザクションの受領は最終決済ではありません。

ビットコインのブロック空間は、送金額ではなく、主にトランザクションのウェイトと手数料率で価格付けされます。BIP 141は virtual size = ceil(weight / 4) と定義しています。一般に入力は出力より多くのデータを追加するため、同じ手数料率なら、多数の小さなUTXOを支出する方が一つの大きなUTXOより高くなることがあります。正確なサイズは使用するスクリプトとwitnessの種類によって異なります。

異なるUTXOを支出するトランザクションは入力依存関係が分かれているため、検証やトランザクション構築を並列化しやすくなります。ただし、あらゆる実装やアプリケーションで自動的に独立するわけではありません。同じ出力を選ぶ二つのトランザクションは競合し、子トランザクションは未確認の親に依存します。ウォレットのコイン選択は、こうした依存関係を調整する必要があります。

UTXOは匿名性を提供しません。入力の結合は共通管理を示唆し、釣銭判定パターンやアドレス再利用も活動を関連付ける可能性があります。これらは暗号学的証明ではなくヒューリスティックですが、統合によって、別々に支出すれば見えなかった関係が露出することがあります。

口座モデルと比べ、UTXOモデルでは各支出可能オブジェクトと消費経路が明示されます。口座システムは通常、残高やnonceなどの共有口座状態を更新します。どちらかが常に優れているわけではなく、状態表現、プログラマビリティ、並行性、ウォレット設計で異なるトレードオフを取っています。

計算例

Aliceは 0.08 BTC0.12 BTC0.50 BTC のUTXOを管理しています。Bobに 0.15 BTC を支払うため、ウォレットは最初の二つの入力、合計 0.20 BTC を選び、手数料を 0.0002 BTC と見積もります。作成する出力は次のとおりです。

  • Bob:0.15 BTC
  • Aliceの釣銭:0.0498 BTC

計算は 0.20 - 0.15 - 0.0002 = 0.0498 BTC です。承認後、0.08 BTC0.12 BTC の出力は使用済みとなり、Bobの出力とAliceの釣銭が新しいUTXOになります。0.50 BTC の出力はそのままです。

トランザクションがBobの 0.15 BTC 出力だけを作成した場合、省略した 0.05 BTC は自動返金ではなく手数料になります。ウォレットは別の入力セットを選び、複数の支払いをまとめ、または手数料率が低い時に小額出力を統合することもできます。そこでは現在と将来の手数料、承認の信頼性、プライバシーを比較する必要があります。

リスクと対策

  • 手数料リスク: 断片化したUTXOは入力ウェイトを増やします。ブロードキャスト前に署名済みトランザクションと手数料率を見積もります。
  • プライバシーリスク: 入力の統合と識別しやすい釣銭はアドレスを結び付けます。新しいアドレスでも関連付け不能とは限りません。
  • 承認リスク: 競合トランザクション、置換方針、チェーン再編成により、未確認の受領は取り消され得ます。
  • 復旧リスク: チェーンはUTXOを保存し、ウォレットはそれらの発見と支出に必要な鍵や探索データを保存または導出します。必要な復旧要素をすべてバックアップします。

よくある誤解

アドレスは恒久的な口座である

アドレスは支出条件を符号化または表現します。ウォレットは多数の受取用・釣銭用アドレスへの出力を管理できるため、一つのアドレスがウォレットの全状態ではありません。

手数料は支払額に比例する

手数料は主にトランザクションのウェイトと選択した手数料率で決まります。入力の少ない高額支払いが、多数の入力から作る低額支払いより小さく安い場合があります。

プロトコルが釣銭を自動作成する

釣銭は支払者のウォレットが意図的に構築する通常の出力です。出力に割り当てられなかった入力価値は、マイナーが手数料として取得できます。

未確認なら決済済みである

mempoolはノードの暫定的な見方であり、合意台帳ではありません。受け入れ、置換、排除の方針は異なり、承認リスクは時間とともに下がりますが、ブロードキャスト時には消えません。

関連トピック

出典

ナビゲーション

Wiki を検索...