ビットコインの仕組みを学んでいると、必ず「UTXO」という聞き慣れない言葉に出会います。「ウォレットに表示される残高とどう関係しているのか」「ビットコインのトランザクションにおいてどのような役割を果たしているのか」混乱する方も多いでしょう。

UTXOはビットコイン特有の概念であり、多くの初学者がつまずいてしまうポイントの一つです。しかし、この「UTXO」というアルファベット4文字が、無意識に理解の壁を作っているだけだと私は考えています。

この記事では、初学者の方にもすんなり理解して頂けるように、UTXOの仕組みについて「商品券」を例にしてわかりやすく解説します。読み終える頃には、なぜビットコインが銀行のような「口座残高」方式ではなく「UTXO」という一見複雑な仕組みをあえて採用したのか、その本質的な理由がしっかり理解できるはずです。

UTXO (Unspent Transaction Output)とは

UTXO (Unsent Transaction Output)は直訳すると「未使用のトランザクション出力」となります。いまは未使用のビットコインという理解で一旦大丈夫です。「Unspent」の未使用とは、トランザクションに使用されていないという意味を指します。と説明されてもやや抽象的に感じるかもしれませんね。

  • トランザクションに「使用されていない」とはどういうこと?
  • 自分が取引所などで受け取ったビットコインは、取引されているので使用済み?

と疑問に持つ方もいるでしょう。抽象的な説明では難しくなってしまいますので、「商品券」に例える形でUTXOを説明します。

UTXOを「商品券」に例えて理解する

ここからは「商品券」を例に説明していきます。

なぜ商品券を例にするかというと、商品券1枚1枚がUTXOの「未使用の出力」1つ1つに対比することができるからです。具体例を以下に示します。

皆さんは手元に

  • 1万円の商品券が5枚
  • 5千円の商品券が1枚
  • 1千円の商品券が2枚

がある場面を想像してみてください。

合計では5万7千円ですが、口座残高のように1つの数字として存在せず、複数枚の商品券があることがポイントです。

💡
ビットコインも口座残高と同様に見た目では1つの数字として表されていますが、ウォレット内では複数のビットコイン (商品券のセット)が合計されて、1つの残高として表示されています。

商品券を用いてコーヒーを購入する

例えばカフェに行き、商品券を使用してコーヒーを購入しようと思います。

コーヒーの値段が400円だった場合、400円の商品券を保有していないのであなたは1千円の商品券を出すでしょう。

ここでカフェの店員は1千円の商品券に穴を開けて無効化にし特殊な機械を通して

  • カフェ側には新たに400円分の商品券
  • おつりとして600円分の商品券

を発行します。

⚠ここで注意して頂きたいのは、普段商品券はおつりを発行されないことが一般的ですが、今回の説明ではおつりが発行される特殊な商品券であることをご理解ください。

あなたの使用した1千円の商品券は穴が空いてしまったので2度と使うことはできません。一方で、新たにおつりとして未使用の600円分の商品券を得ることができました。

ビットコインのトランザクションでも、商品券と同様のことが起きています。

2枚の商品券を使用する場合

もう少しイメージを膨らませるために、もう一つ例を出そうと思います。あなたはそこのカフェを凄く気に入ったため1300円のタンブラーを購入しようとしています。

1300円ちょうどの商品券は持っていないため

  • 1千円の商品券を1枚
  • 600円の商品券を1枚 (コーヒーを買った際のおつりの商品券です!)

使うことになります。

先程同様カフェの店員は受け取った商品券に穴を開けて特殊な機械により

  • 1300円の商品券1枚
  • おつりとして300円の商品券

を新たに発行します。

商品券をUTXOに置き換えて考える

ビットコインに話を戻しましょう。

左側の青色で示された部分は「インプット」

右側の緑色で示された部分は「アウトプット」

と呼ばれます。

とても単純な仕組みとして、インプットからアウトプットが生成されているということを理解して頂けたと思います。商品券の例からわかるように未だ使用されていないビットコインのアウトプットを「UTXO」と呼んでいるというわけです。

口座残高と違う点は、UTXOごとに計算されているという部分です。口座残高のように総資産から引き算されて残高が表示されるわけではありません。

インプットは以前のトランザクションで生成されたUTXOである

ビットコインのトランザクションは、上記の例のように1つ以上のUTXOを「トランザクションインプット」として使用して、新たに「アウトプット」を生成するという構造になっています。

また、専門用語として「おつり」つまりこちら側に返ってくるアウトプットを「チェンジアウトプット」と呼んでいます。このチェンジアウトプットは他のアウトプットとの区別がありません。つまり、どのアウトプットがチェンジアウトプットかを知っているのは、トランザクションの作成者のみです。

mempoolというサイトを利用すると、全てのトランザクションの履歴を確認することができます。

mempoolサイト:https://mempool.space/ja/

上記の図では、左の赤色はインプット、右側の緑色はアウトプットを示します。先ほどの商品券の例と同様に、複数のインプットを使用している例を確認することができます。確かに、2つのアウトプットのうちどちらがチェンジアウトプットかは、私たちにはわかりませんね。

ビットコインが口座残高方式を採用しない理由

UTXOについての基本を抑えたところで、ビットコインにおいてなぜ「口座残高」方式が採用されていないかを説明しましょう。

結論から申し上げますと、世界中のコンピュータで管理する際に、残高にズレ生じる恐れがあるからです。仮に「口座残高」方式を採用した場合、残高が正しいかどうかは「取引の順番」に強く依存します。

例えばAさん (残高1万円)が「Bさんに8千円」「Cさんに7千円」という2つの指示を同時に出した場合に、銀行の中央サーバーが瞬時に順番を決め捌きます。

  • 13:01 Bさんに8千円送金。Aさんの残高を2千円に更新。
  • 13:02 Cさんへの7千円送金を受付。Aさんの残高が足りないため拒否。

口座残高方式が可能なのは「すべての取引の順番を決める中央サーバー」が存在するからです。

ビットコインの場合は中央サーバーが存在しません。世界中のコンピュータがトランザクションを検証してブロックに取り込みます。つまりネットワークの遅延により、あるサーバーにはBさんの取引が先に届き、別のサーバーにはCさんの取引が先に届く、という順序のズレが発生することがあります。

世界中のコンピュータが「全人類の残高リスト」を全て一致させるための複雑なコンセンサスが必要になってくるということです。

ここでビットコインは「残高」という考え方を捨てUTXOという考え方を選びました。

UTXOが世界中の残高ズレをどう解決するか

先ほどの説明のように、ビットコインにおいて「口座残高」方式が適切でない理由は、世界中で残高のズレが生じるからであります。

ではどのように解決したかというと、UTXOという概念により、BTCが使用済みなのか、それとも未使用なのかを検証できるようにしたことが理由の1つに挙げられます。

検証できることによりブロックチェーンにおいて残高のズレを解決しています。

仮にAさんは「1万円のUTXO (未使用の商品券)」を1枚持っているとしましょう。

  • Bさんへの取引を検証するマイナー
  • Cさんへの取引を検証するマイナー

この2つの取引が存在するとします。

ここで「ブロックチェーン」と「マイニング(採掘)」が登場します。

Bさんの取引を検証するマイナーや、Cさんの取引を検証するマイナーが存在するわけですが、マイニングに成功したブロックに入っている取引が優先されます。

💡
マイナー視点
1つのブロックに対して
・Bさんへの取引をブロックに取り込むのか
・Cさんへの取引をブロックに取り込むのか
選ぶことが可能

仮にマイナーXさんがBさんへの取引をブロックに取り込んでマイニングに成功した場合、Bさんへの取引が優先されることになります。

そうするとBさんへの取引のUTXOは使用済みとして登録されます。

その後Cさんへの取引を検証した際に、UTXOは使用済みとしてコンピュータに認識され支払いが拒否されるという仕組みです。

このように、UTXO方式では「口座残高」を管理する必要がなく、「そのUTXO(商品券)が未使用か」という事実だけを確認すればよいため、二重支払いの検証がシンプルになります。

複数のUTXOを使うと手数料が高くなる?

ビットコインのトランザクションにおいて、複数のUTXOセットを使用すると、手数料が高くなるという懸念点が1つ挙げられます。

ビットコインのブロックチェーンにおける取引手数料(Transaction Fee)は、送金額ではなく「データの大きさ」「手数料率」で決まります。つまり「多くのBTCを送ると高い」のではなく、「データが重いほど高くなる」という仕組みです。

手数料の基本式は次のとおりです:

手数料 (sats) = 仮想サイズ (vB) × 手数料率 (sat/vB)

マイナーは、1ブロック( 約1MB相当)の限られた容量の中に、より高いsat/vBの取引を優先的に詰め込みます。そのため「手数料率」が高いほど、トランザクションはブロックに早く取り込まれやすくなります。

💡
用語整理
sats:BTCの1憶分の1の単位
vB:virtual bytes (仮想サイズ)
ビットコインは単なるバイト数ではなく、weightという仕組みで測定されており、weightを4で割った値を仮想サイズと呼んでいます。

ここで1つ例を取り上げてみましょう。

手数料率が30sat/vBでデータ量が200vBと400vBの2つのトランザクションが存在するとします。

  • 200vB × 30sat/vB = 6,000sats
  • 400vB × 30sat/vB = 12,000sats

データ量が多いと式の通り、後者のインプット数が多い取引(400vB)の方が、手数料が高くなっているのが見て取れます。

トランザクションに含まれるインプット(入力)数が増えると、その分だけ署名データが増え、仮想サイズ (vB)が大きくなります

結果として、同じ金額を送る場合でも、UTXOの使用が多い=インプットが多いトランザクションは手数料が高くなりやすいというわけです。

ブロックに取り込まれなかった場合の対応策

もし手数料率を低くしすぎると、ブロックに取り込まれず未承認のまま長時間停滞することがあります。この場合はRBF(Replace-By-Fee)に対応していればより高い手数料率で未承認トランザクションを置換できます(未承認であることが条件)。
こちらに関しては専門的な内容となるため以下の過去記事をご参照ください。

Bitcoin Core 24.0からのFull RBF既定化についての議論まとめ
この1週間ほど世間の話題はFTXの信用不安問題で持ちきりですが、ビットコイン開発者の多くは全然違う論争に巻き込まれていました。Bitcoin Coreの次期リリースである24.0において、ノードのポリシーとしてFull RBF (mempoolfullrbf)というものが導入される予定のところ、これに反対する意見が出たためです。 結果的には導入継続という流れになりましたが、このように誰でも意見・議論できることがビットコイン開発における健全性維持の1つの仕組みです。 それでは議論の内容を見ていきましょう。 RBFとは RBFとはReplace-by-Feeの略で、配信したがまだブロックに取り込まれていないトランザクションを、より高い手数料を払って置換することをいいます。トランザクション作成時にそのトランザクションにRBF有効のフラグが立てられている場合、同じコインを使用する別のトランザクション、つまり相反するトランザクションを配信して古いものを置き換えることができます。(置換されるトランザクションより手数料が高いこと、置換されるトランザクションがまだブロックに取り込まれていない

UTXOを統合する方法に関しては別記事にて説明しますが、もし気になった方はぜひ調べてみてください。

特殊なトランザクションについて

インプットを持たないコインベーストランザクションとは

実は、トランザクションの中にはインプットを持たないものも存在します。

インプットを用いてアウトプットを生成すると学んだのに、インプットを持たないというのはどういうこと???となった方もいるでしょう。

では試しに、先程のmempoolにて適当なトランザクションを選びインプットを辿ってみてください。といってもかなり大変なのでおすすめしませんが、インプットを辿っていくとマイニングで生まれたビットコインにたどり着くはずです。

マイナーはビットコインのマイニングに成功すると「コインベーストランザクション」という特別なトランザクションを作成します。コインベーストランザクションはアウトプットだけで、インプットがありません。

なぜなら、マイニングにより新しいビットコインを発行するためです。

mempool coinbase transaction
💡
コインベーストランザクションというマイニングで発生した特別なトランザクションのみ、インプットが存在しない

ここまで読んでくださった皆さんはどんどんmempoolとUTXOに慣れ親しんできたのではないでしょうか?

最後に、ジェネシスブロックという最初期にマイニングされたブロックについて解説しようと思います。

ジェネシスブロックという最初のブロックに関する秘密

2009年1月3日に「ジェネシスブロック」と呼ばれる最初のブロックのマイニングが行われました。当時、世界に存在するマイナーはただ一人であり、それはビットコインの生みの親である「サトシ・ナカモト」です。

mempool Genesis Block

サトシはジェネシスブロックのみマイニングの成功報酬である50BTCを使用不可にしました。使用不可にした理由は語られておらず、現在も全世界で考察されており、ジェネシスブロックを特別なものとして考える人も多い印象です。

💡
有力な説としては「ジェネシスブロックはマイニングで作ったものではないので報酬を得るのには不適当と考えたから」というのがあります。

さらに興味深い点として、ブロックに添付することができるテキストデータに、イギリスの新聞「The Times」の見出しを書き込んでいることです。(上画像:mempool内のトランザクションでも読み取れます)

Wikipedia The Times 2009年1月3日号
💡
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks (The Times 2009年1月3日 銀行への2回目の救済融資を目前に控えた財務大臣)

このメッセージが書き込まれた理由も、サトシ・ナカモト本人のみ知るという現状です。

理由について様々な考察がされており、銀行救済(ベイルアウト)政策への批判や「中央銀行や政府に依存しない通貨システムの必要性」と解釈されています。また単に、マイニングのプログラムがその日以前に作られてないことを証明するために載せたなどが考えられています。

まとめ:UTXOは中央管理者なしで二重支払いを防ぐビットコインの核心技術

UTXO(未使用トランザクション出力)は、ビットコインにおける残高管理の仕組みで、商品券に例えると理解しやすい概念です。 口座残高のように1つの数字ではなく、複数のUTXOの集合として残高が構成されており、トランザクションでは既存のUTXOを「インプット」として消費し、新たなUTXOを「アウトプット」として生成します。

ビットコインが中央サーバーなしで二重支払いを防ぐため、「残高」ではなく「UTXOが使用済みか未使用か」という事実だけを検証するこの方式を採用しています。 ただし、複数のUTXOを使用するとデータサイズが増え、トランザクション手数料が高くなるというトレードオフがあります。

UTXOを理解することでビットコインに対する解像度がより深まり、新たな面白さに気づけたと思います。ビットコインの中でもUTXOは重要な概念の一つなので、この機会に慣れ親しんで頂けたら幸いです。