ビットコイン技術 中級

UTXOモデル (Unspent Transaction Output)

ビットコインは口座残高ではなく、未使用トランザクション出力(UTXO)の合計で残高を管理する。コインモデルの原理とプライバシー・セキュリティ上の利点。

· 1分

**UTXO(Unspent Transaction Output、未使用トランザクション出力)**は、ビットコインが残高を管理する根本的な方式である。銀行のように「口座残高」を記録するのではなく、まだ使用されていない個々の出力値の合計で残高を計算する。

graph LR
  subgraph 入力
      U1["UTXO A
0.5 BTC"] U2["UTXO B
0.3 BTC"] end subgraph トランザクション TX["トランザクション"] end subgraph 出力 O1["受取人
0.7 BTC"] O2["お釣り
0.0999 BTC"] end U1 --> TX U2 --> TX TX --> O1 TX --> O2 FEE["手数料: 0.0001 BTC"] TX -.-> FEE style TX fill:#f7931a,stroke:#f7931a,color:#000 style FEE fill:none,stroke:none,color:#8b949e

コインモデル

現金取引を思い浮かべると理解しやすい。財布に1万円札2枚と5千円札1枚があれば、残高は「25,000円」という数字ではなく、3枚の個別紙幣の合計である。ビットコインも同様だ。

ビットコイントランザクションが発生すると:

  1. 入力(Input):以前に受け取ったUTXOの一つ以上を「消費」する
  2. 出力(Output):新しいUTXOを生成する — 受信者への送金額と自分に戻るお釣り
  3. 消費されたUTXOは永久に消滅し、新しいUTXOが誕生する

例えば、0.7 BTCのUTXOを持つ人が0.3 BTCを送金する場合:

  • 0.7 BTC UTXOが消費され
  • 0.3 BTC UTXOが受信者に生成され
  • 約0.3999 BTC UTXOがお釣りとして自分に戻り
  • 残りの0.0001 BTCがマイナーへの手数料となる

なぜアカウントモデルではないのか

イーサリアムは銀行のようなアカウント残高モデルを使用する。ビットコインが一見複雑に見えるUTXOモデルを選択した理由:

  • 並列検証:各UTXOは独立しているため、トランザクションを同時に検証できる。アカウントモデルでは順序依存性が生じる
  • 二重支払い防止:UTXOは「消費済み」または「未消費」の二つの状態しか存在しない。部分的な使用は不可能なため、二重支払いの検出が単純
  • プライバシー:取引ごとに新しいアドレス(新しいUTXO)を生成すれば、取引追跡が困難になる

UTXO管理の実践

UTXOの数とサイズは手数料に直接影響する:

  • ダストUTXO:極少額のUTXOが多いと、それを消費する手数料が金額を上回ることがある
  • UTXO統合(Consolidation):手数料が低い時期に複数の少額UTXOを一つにまとめる戦略
  • コインコントロール(Coin Control):どのUTXOを入力として使用するかを手動で選択し、プライバシーと手数料を最適化

Sparrow Walletのようなデスクトップウォレットは、UTXOを個別に確認・管理できる機能を提供する。

関連する概念

関連記事