ブロックチェーン技術を利用している仮想通貨は、その名の通り「通貨」です。日本円や米ドルのように、ビットコインのような仮想通貨も、その通貨の残高が管理されることで自分がいくらのコインを持っているのかを把握することができます。では、どのようにコインの残高や取引履歴を把握しているのでしょうか。それを理解するためには、UTXOという仕組みを抑えておかなければなりません。今回はそのUTXOについて見てきましょう。
UTXOの概要
ブロックチェーンを利用した仮想通貨はいくつもありますが、一番有名であるビットコインでは、コインの管理方法にUTXOという仕組みを使用しています。(以下ではUTXOを用いる仮想通貨としてビットコインを前提とします。)UTXOとは、「Unspent Transaction Output」の略で、日本語では「未使用トランザクションアウトプット」などと呼ばれています。これは簡潔に言えば、通帳のようにアカウントの残高をそのままデータとして管理・記録するのではなく、取引データのみに基いて残高を計算して求める方法です。
UTXOは「特定の所有者にロックされた分割不可能なビットコインの固まり」と表現され、これはブロックチェーンに記録されています。すなわち、利用者のビットコインというのは、アドレスや口座(ウォレット)に残高として記録されているわけではなく、いくつもの取引データの中に、UTXOとして散らばっているのです。利用者は、ウォレットを用いて、さもコインの残高を管理しているかのように思われますが、コイン残高という概念はウォレットによって作り上げられたものにすぎません。ウォレットは、ブロックチェーンを通して各利用者に属している全てのUTXOを掻き集めて残高を計算しているのです。
取引データはインプットとアウトプットで構成される
もう少し具体的に見ていきましょう。そもそもなぜ「未使用トランザクションアウトプット」と呼ばれているのでしょうか。まず、ブロックチェーン上に記録されることになるトランザクション(取引データ)はインプット(入力=送付元)とアウトプット(出力=送付先)の二つから構成されています。より正確に言うと、トランザクションによって消費される、そのUTXOは「トランザクションインプット」と呼ばれます。そしてトランザクションによって新たに作られるUTXOは「トランザクションアウトプット」と呼ばれます。そして、トランザクションインプットの合計額とトランザクションアウトプットの合計額は等しくなります。
すなわち、一連のトランザクションの流れにおいて、ある送金(アウトプット)されたコインは誰も消費していない”未使用”の”トランザクションアウトプット”なのです。そしてそのアウトプットは次に受け取る人にとってはインプットとなる(消費される)トランザクションです。そのトランザクションがインプットとして消費されると、また新たに未使用のトランザクションアウトプット(UTXO)として出力されます。この循環が永遠に続いているのが、ブロックの中の取引データの正体なのです。
coinbase
インプットとアウトプットの連鎖チェーンの例外は、coinbaseトランザクションと呼ばれる特別なトランザクションです。これは各ブロックの最初のトランザクションです。すなわち、マイニングに成功したマイナーに提供されるブロック生成報酬にあたるものです。そのマイナーによってブロックの最初に置かれ、インプットがなく、アウトプットだけが記述されています。つまり無からマイナーのアドレスにコインが割り当てられます。
UTXOの仕組み
UTXOの概要はわかりましたが、それではどのような仕組みで実際に使われているのでしょうか。簡単な例を用いて説明します。例えばAさんは20BTCをもっているとします。ですが上述したように、その20BTCは残高として通帳の最後列に記録されているわけではなく、ネットワーク上にいくつかのUTXOとして散らばっています。1BTCのUTXOと19BTCのUTXOの2つが集計されているかもしれないですし、0.1BTCのUTXOが200個が散らばっていて集計されているかもしれません。
では、例えば所有している20BTCは、5BTCのUTXOと15BTCのUTXOとして散らばっているとします。その状態でAさんはB店で3BTCの買い物をするとします。自動的に処理が行われ、Aさんは5BTCのUTXOを用いて3BTCを支払うことになります。ここで注意しなければならないのが、UTXOは2つに切ることはできません。つまり5BTCのUTXOを3BTCと2BTCに分けて3BTC分だけ支払うことは不可能です。これは何もすることなく500円玉を100円玉5つに分解することができないのと同じことです。
そこで5BTCのUTXOで3BTCの支払いをすると、支払う3BTCとおつりの2BTCの2つのアウトプットを生成し、新たなUTXOとして扱われます。支払う方の3BTCのUTXOはB店に紐付けられ、おつりの2BTCは再び自分に紐付けられます。おつり用のUTXOは元の自分のアドレスに紐付けられるのではなく、追跡を困難にしプライバシーを保護するために新たにおつり用のアドレスが作成し、そこに紐付けられることになります。
このように見てみることで、コインのやり取り・管理とはいくつかのUTXOのやり取りである、そのUTXOはそれぞれ各利用者に紐付けられて管理されているということが分かるかと思います。これで最初に述べた、UTXOは「特定の所有者にロックされた分割不可能なビットコインの固まり」であるという意味が理解できたかと思います。
UTXOの使用例
ここまでの説明は基本的にビットコインを前提として話してきましたが、仮想通貨にはUTXOという概念を使っているものと使っていないものがあります。
ビットコイン以外にUTXO方式を用いている有名なものとしては、フィンテックベンチャー企業のR3 CEVみよる分散レジャープラットフォーム「Corda」が挙げられます。使用されている理由としてはビットコインと同様で、多数の取引を同時的に支障なく処理する、プライバシーを重視するといった目的のため、CordaはUTXOを使用しています。
一方で分散型アプリケーション (DApps) やスマート・コントラクトを構築するためのプラットフォーム「Ethereum」はUTXOが使われておらず、単純にアドレスの残高を直接データとして記録し管理する方法をとっています。これはビットコインのような主に通貨決済向けのシステムではなく、ブロックチェーン2.0のような汎用的な機能を実現したいので、UTXOのような構造はあまり必要ないと判断されたためです。そのため、アカウントの状態を簡単に見られる、データの量は減らせる、システムの実装が簡単になる、といったメリットを享受することができます。一方で、UTXOを用いていないと残高データと履歴データを同時に管理し、それらの整合性を取らなくてはならないので、処理に支障をきたす可能性もあります。
このように、UTXOが必ず良いというわけではなく、目的や利用用途に応じてそのブロックチェーンや仮想通貨を設計する必要があります。
逆に言えば、ブロックチェーン技術をうまく使いこなすことで、様々な仮想通貨・プラットフォームを構築することができるということです。UTXOを理解することで、ブロックチェーンの奥深さを一段と理解することができたでしょうか。