ブロックチェーン/レベル II · 仕組み/2.2 トランザクション/レッスン 1
UTXOモデル
ビットコインにアカウントが存在しない理由と、台帳が使用済みかどうかを把握する仕組み
用意するものブロックエクスプローラー(例:mempool.space)にアクセスできるウェブブラウザ複数のUTXOを持つ公開ビットコインアドレスアウトプットIDと金額を記録するためのノート
問い
- 更新すべきアカウントが存在しないとき、残高はどうなるのでしょうか?
- ノードは、過去のすべてのトランザクションを確認することなく、あるインプットがまだ使用されていないことをどのように検証するのでしょうか?
- コインが全履歴を引き継いでいると、なぜ匿名性を保つのが難しくなるのでしょうか?
探究
- ビットコインは、銀行の台帳やイーサリアムが採用しているアカウントモデルを使用していません。これらのシステムでは、残高がアドレスに保存され、その場で更新されます。送金すると、ある残高から差し引かれ、別の残高に加算されます。ビットコインにはこのような保存の仕組みはありません。代わりに、価値が個別の未使用の単位としてのみ存在する、現金に似た構造を採用しています。「アリスの合計残高」を記録する中央の台帳は存在せず、現在使用可能な個々のアウトプットの集合があるだけです。
- これらの単位は未使用トランザクションアウトプット(Unspent Transaction Outputs、UTXO)と呼ばれます。各UTXOは、サトシ単位の特定の金額と、それを誰が使用できるかを定めるロッキングスクリプトを持っています。トランザクションが行われると、インプットとしてUTXOを丸ごと消費し、アウトプットとして新しいUTXOを作成します。使用されたアウトプットは使用可能なコインの集合から外れ(トランザクション自体はチェーンの履歴に残ります)、新しいアウトプットがその集合に加わります。ウォレットの「残高」は保存された数値ではなく、そのウォレットの秘密鍵で条件を満たせるロッキングスクリプトを持つ、すべてのUTXOの合計です。
- この構造により、ネットワーク上のノードによる検証が簡素化されます。各インプットは、それまで未使用だった特定のアウトプットを参照しているため、ノードはその特定のアウトプットが現在の状態に存在し、まだ使用されていないことを確認するだけで済みます。全体の残高を再計算したり、複雑なアカウント履歴を検証したりする必要はありません。すべてのフルノードは「チェーンステート(chainstate)」を保持しており、これは実質的に、その時点で有効なすべてのUTXOの集合です。これにより、二重支払いの試みを高速かつ決定論的に検証できます。
- イーサリアムと比較すると、重要な設計上の選択が浮かび上がります。イーサリアムはアカウントモデルを採用しており、各アドレスには残高と、リプレイ攻撃を防ぐためのナンス(トランザクションカウンター)が保存されています。アカウントを更新するには、ステートツリー全体を変更する必要があります。一方、ビットコインは残高をその場で書き換えるのではなく新しいアウトプットを作成するため、コインは履歴を引き継ぎ、過去のトランザクションと現在の保有分が結びつきます。
- こうした履歴上のつながりは、プライバシーと代替可能性(ファンジビリティ)に大きな影響を及ぼします。すべてのインプットが以前のアウトプットを指しているため、分析者はUTXOの連鎖をたどって資金の流れを追跡できます。ミキシングサービスなどの手法も存在しますが、根本的な構造上、コインの出所と現在の保有者とのつながりを完全に断ち切ることは困難です。この透明性は、ビットコインが本当に代替可能かどうかをめぐる議論でたびたび取り上げられます。一部の市場参加者は、追跡可能な履歴が少ない「クリーンな」コインを好む場合があるためです。
- これを実際に確認するには、複数の支払いを受け取ったウォレットのコインコントロール(または「UTXO」)画面を開いてみましょう。各アウトプットが、それぞれの金額とトランザクションIDとともに個別に一覧表示されます。ブロックエクスプローラーのアドレスページにも、同じ内容が受け取ったアウトプットの一覧として表示され、使用済みのものと未使用のものが含まれています。この個々のアウトプットの一覧こそがオンチェーンにおける所有の実態であり、画面に表示される「残高」は、この集合からクライアント側で計算された値にすぎません。
重要な事実
- ビットコインのチェーン上にはアカウントも残高も保存されておらず、所有権は未使用トランザクションアウトプット(UTXO)のみで構成されます。
- 各UTXOには、サトシ単位の金額と、それを使用するための条件を定めるロッキングスクリプトが含まれます。
- トランザクションはインプットとしてUTXOを丸ごと消費し、アウトプットとして新しいUTXOを作成します。使用されたアウトプットはUTXOセットから外れます。
- すべてのフルノードは「チェーンステート」を保持しています。これは、検証に使われる、現在未使用のすべてのアウトプットの完全な集合です。
- ウォレットに表示される残高は、ブロックチェーンに保存された値ではなく、そのウォレットの秘密鍵で管理されているUTXOの金額を合計した、ローカルでの計算結果です。
- ナンスと可変の残高を持つイーサリアムのアカウントモデルとは異なり、ビットコインのUTXOモデルでは、コインを履歴を引き継ぐ個別の単位として扱い、更新するのではなく置き換えます。
演習 九・六・三・一
9集める異なるデジタル資産または通貨を9つ挙げてください。それぞれが(イーサリアムのような)アカウントベースの残高方式か、(ビットコインのような)UTXOベースのアウトプット方式かを記録してください。
6まとめる9つを、ステート(状態)の扱い方に基づいて6つのカテゴリーに分類してください:可変の残高、不変のアウトプット、ハイブリッドモデル、中央集権型台帳、その他など。
3絞り込む6つのグループを、プロトコルが台帳構造としてアカウントではなくUTXOを選ぶ3つの根本的な理由に絞り込んでください。
1結晶化する保存された残高が存在しないことで、従来の銀行と比べてビットコインにおける二重支払いの防止方法がどう変わるのかを、1文で説明してください。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。