- デジタル通貨には残高確認方式が2通りある
- すべてのUTXOを集めて残高を計算する
- UTXOはプライバシー保護に優れている
仮想通貨をはじめとしたデジタル通貨の残高管理方式は、2つあります。UTXOを用いた方式と、アカウントに直接記録する方式です。
それぞれ異なった方法で残高や履歴を把握しています。しかしUTXOは複雑なしくみで残高を算出しているため、理解しにくい人もいるかもしれません。
本記事ではUTXOについて解説します。UTXOの概要、メリットやデメリットなどをお伝えするので、ぜひ参考にしてみてください。
デジタル通貨では2通りの残高確認方式がある
現金をどれぐらい持っているのか確認する場合、財布や貯金箱にある現金を数えるのが一般的です。仮想通貨や銀行口座などのデジタル通貨では、次の2通りの残高確認方式があります。どういった違いがあるのかご紹介しましょう。
残高をアカウントに記録する
金融機関の口座や電子型ポイントカードなどはアカウントを連携し、残高を記録しています。また入出金の履歴も残るため大変便利です。
たとえばAさんの所持金が5,000円で、Bさんの所持金が3,000円としましょう。AさんがBさんに3,000円を送金すると入出金のデータはすぐに記録され、Aさんの残高は2,000円、Bさんの残高は6,000円になります。
イーサリアムで採用されているのは、残高をアカウントに記録する方式です。
UTXOを用いて管理する
ビットコインで採用されている残高確認方式は、UTXOを用いて管理する方式です。UTXOとは「Unspent Transaction Output」の略称で、日本語では「未使用トランザクションアウトプット」などと示されます。
ビットコインにおいて口座や残高はデータ管理されていません。しかしそのままでは利用者が使いにくいため、アドレスに記録したUTXOの集計を行っています。ウォレット内で残高として表示される数字は、UTXOの計算結果によるものです。
UTXOの概要
仮想通貨でもっとも有名ともいえるビットコインでは、UTXOを用いてコインを管理しています。UTXOは通帳や口座のようにアカウントを用いた残高の管理はせず、取引データだけを用いて残高を計算する方式です。
UTXOは「まだ送金されていないアウトプット」と訳すことができ、残高とほぼ同じ意味といえます。
利用者のビットコイン残高は、アドレスやウォレットに直接記録されているわけではありません。ウォレットがブロックチェーンを使用し、利用者に属するUTXOをすべて集めて、残高を計算しているのです。利用者のなかにはビットコインの残高を「ウォレットで管理している」と思う人もいるかもしれません。しかしウォレットに示された残高はあくまでもウォレットが作り上げたものです。
なお取引が増えるほど、UTXOを集めて計算する手間も増えます。
UTXOは分割できない
UTXOは1つの塊であり、分割できません。1万円札を1,000円札に分解できないのと似ています。
たとえばUTXO1に15BTC、UTXO2に5BTC、合計20BTCを所有していると仮定しましょう。お店で5BTCのものを買った場合、15BTCで支払います。ただしUTXOは分割できないため、「15BTCから5BTCだけを支払う」といった使い方はできません。
15BTCで5BTCを支払い、残った10BTCはおつりとして自分のアドレスへ送られます。またもとのアドレスには紐づけられません。新たに作成されたおつり用のアドレスに紐づけられます。このようにUTXOは利用者ごとに紐づけられ、分割されずに管理されています。
取引データはインプットとアウトプットで管理される
ブロックチェーンに記録されるトランザクション (取引データ) は、インプット (入力) とアウトプット (出力) の2つで管理されます。
もう少し正確な表現をすれば、トランザクションで消費されるUTXOは「トランザクションインプット」、トランザクションで新たに作成されるUTXOは「トランザクションアウトプット」です。
送金 (アウトプット) されたビットコインはまだ消費 (=使用) されていません。よって日本語では「未使用トランザクションアウトプット」と呼ばれています。
インプットとアウトプットは同一でない
UTXOをすべて合算すると、ビットコインの総量とみなされます。しかし利用者個人のインプットとアウトプットを合算しても、合計額は等しくなりません。
手数料がかかるため、送金された分は実際の送金額よりも減っています。自分から送金する場合も同様で、手数料によって金額どおりには送れません。
仮想通貨の手数料は自由に設定できますが、極端に安いと承認されず、取引が進まなくなります。しかし手数料を高く設定してしまうと、従来の金融機関と変わりません。ほどよい手数料を設定し、利用者に提示することをおすすめします。
coinbase
トランザクションはインプットとアウトプットで構成されています。
最初に位置するブロックのトランザクションは「coinbaseトランザクション」と呼ばれる特別なものです。ビットコインはマイニング時にのみ新規発行されます。coinbaseは、マイニングに成功したマイナーに支払われるブロック生成報酬です。マイニングに成功したマイナーによって、coinbaseがブロックの最初に配置されます。このような場合インプットはなく、存在するのはアウトプットだけです。
UTXOのしくみ
トランザクションにおいてアウトプットされたコインは、受け取った側のインプットとして消費されます。
インプットとしてトランザクションが消費されると、新しい未使用トランザクションアウトプット (UTXO) としての出力が行われます。ブロックの取引データでは、このようなトランザクションのやりとりを繰り返しています。
UTXOのメリット
プライバシー保護に優れている
UTXOベースで送金する際、おつりは新たなアドレスに送るのが望ましいとされています。アドレスAから送金し、おつりは新たに作成されたアドレスBに送られるとしましょう。外部からはアドレスAとBが同じ利用者のものとはわからないため、UTXOはプライバシー保護に優れていると言えます。
アカウントベースにはUTXOの概念がなく、残高は直接記録されるため、新たなアドレスの必要性がありません。新たなアドレスにもおつりを送れますが、送金手数料がかかってしまいます。
リプレイアタックへの耐性が強い
リプレイアタックとはハードフォークを実行してブロックチェーンが分岐した際に、第三者がコインを大量に獲得しようとする攻撃のことです。またハードフォークとは、ブロックチェーンの仕様変更を指します。
もしリプレイアタックの耐性が弱ければ、ビットコインを取引所から引き出す際、ビットコインと同じ量のビットコインキャッシュも一緒に引き出すことが可能になってしまいます。
アカウントベースは残高が直接記載されるので、トランザクションの判別が難しく、リプレイアタックへの耐性は弱くなります。一方UTXOベースであれば、残高はUTXOの計算で判明するため、リプレイアタックへの耐性は強いと言えます。
UTXOのデメリット
実装が複雑
UTXOベースで残高を求める場合、すべてのUTXOを用いて計算します。
残高確認も送金時も計算は複雑です。もし特定のアドレスが複数のUTXOを持っていれば、どのUTXOを送金に、どのUTXOをおつりにするのかを選ぶ必要があります。またUTXOベースは複雑な計算が必要なため、実装も複雑となってしまいます。したがって、スマートコントラクトプラットフォームには不向きです。
イーサリアムやEOSといったスマートコントラクトプラットフォームにおいては、アカウントベースを採用している事例の方が多いです。アカウントベースは残高が記録されているので、送金額と手数料を引けばかんたんに残高を算出可能です。このようにウォレットを管理しているシステムが計算を行ってくれるため、利用者は複雑な計算を意識せずに取引できます。
UTXOの使用例
UTXOベースを採用している事例として、フィンテックベンチャー企業のR3 CEVが提供する「Corda」が挙げられます。Cordaは分散台帳技術プラットフォームです。
イーサリアムや分散型アプリケーションなどでは、UTXOを採用していません。このようなプラットフォームは、ブロックチェーン2.0のような汎用的な機能を構築するため、複雑な構造をしているUTXOは必要ないと判断したようです。
しかしUTXOを用いない場合、残高および履歴のデータを同時に管理し、整合性を取らなければなりません。
UTXOのまとめ
UTXOベースを採用すると、すべてのUTXOを計算して残高を求めます。取引データはインプットとアウトプットで管理され、UTXOは分割できません。
またUTXOはプライバシー保護に優れ、リプレイアタックへの耐性が強いといったメリットがあります。しかしUTXOが必ずしも優秀とは限りません。アカウントベースはUTXOよりも柔軟性が高く、システムの実装をかんたんに進められます。