知っておきたいブロックチェーンの基礎知識|UTXO vs アカウントベース

知っておきたいブロックチェーンの基礎知識|UTXO vs アカウントベース

はじめに

今回はブロックチェーンの基本的な構成要素である「残高管理の方法」について概観していきましょう。暗号通貨やトークンの残高管理には、「UTXO」(Unspent Transaction Output)と「アカウント」という2つの方式あります。

それぞれ違いがあり、どちらの方式を採用するかによって、ブロックチェーンの特徴が規定されるため、基礎知識として両者の基本や特徴を抑えておくことは重要です。

例えば、ビットコインやZcash、イーサリアムのセカンドレイヤー技術である「Plasma」はUTXOであり、これによってプライバシーの保護や複数のトランザクションを並行して処理することができます。一方で、イーサリアムのようなアカウントベースのブロックチェーンの方が、スマートコントラクトプラットフォームとして適しています。

UTXO(Unspent Transaction Output)とは?

ビットコインなどでは、未使用のトランザクションアウトプット(=Unspent Transaction Output)であるUTXOのリストを合算することで、残高を把握することができます。

ただし、UTXOベースのブロックチェーン自体に、あるアドレスに対応する残高表示の機能が組み込まれているわけではありません。UTXOベースのブロックチェーンには、アカウントや残高という概念が無いのです。特定のアドレス宛に送られたUTXOの総和を、アプリケーション(ウォレット)側で算出することによって、残高が表示されています。

また、UTXOは分割することができません。UTXOをインプットとして使用する場合はそのすべてが消費されるため、インプットの合計よりもアウトプットの合計が少ない場合は、余剰分を自分宛てのUTXOとして作成しています(お釣りとして位置づけられる)。

例えば、過去に10BTC分のUTXOを受け取っており、新たに1BTC分の送金を行いたい場合は、10BTC分のUTXOをインプットとして消費し、新たに相手への1BTC分のUTXOと自分宛てに9BTC分のUTXOを作成する必要があるのです(正確には自分宛てのUTXOは、10BTCから1BTCとマイナーへの手数料の差し引いた数量になる)。

それでは、UTXOベースの特徴を整理していきましょう。

プライバシーという点ではアカウントベースよりも優れている

プライバシーという観点から見ると、後述するアカウントベースと比べて、UTXOベースの方が優れていると考えられます。

残高がひとつのアカウントで管理されているわけではなく、あくまでもUTXOが存在するだけであるため、取引毎にアドレスを変えるといった対応が可能だからです。基本的にはUTXOベースにおいて、異なるコインをひとりの所有者に紐付けることは困難だと言えるでしょう。

実際にビットコインのウォレットでは、UTXOを受け取る際、受け取り用のアドレスを毎回新しく自動生成する機能がデフォルトで搭載されています。また、階層的決定性ウォレット(Hierarchy Deterministic Wallet)という仕組みによって、ひとつの「シード」と呼ばれる数値から秘密鍵や公開鍵、アドレスを階層的に生成可能です。

参考:bip-0032.mediawiki

並行してトランザクション検証が可能

UTXOベースのトランザクションにおいては、同じUTXOが複数のトランザクションで消費されることは無いため、同時並行で検証可能です。新規のトランザクションは、(インプットとして)消費される予定であり、正しいデジタル署名が付与されたUTXO以外をインプットとして参照することができません。

スマートコントラクトプラットフォームとしては不向き

UTXOベースでは、限られた範囲であれば取引の執行条件を規定できますが、複雑な計算や外部入力としてのオラクルの参照などには向いていません。したがって、UTXOベースのブロックチェーンを、スマートコントラクトプラットフォームとして利用することは容易では無いのです。

アカウントベースとは?

イーサリアムやEOSのようなスマートコントラクトプラットフォームでは、アカウントベースが採用されているケースがほとんどです。UTXOとは異なり、アカウントベースでは暗号通貨やトークンは、特定のアカウント内の残高(balance)として表現されています。また、アカウントは対応する秘密鍵やスマートコントラクトによって制御可能です。

UTXOとアカウントベースの大きな違いとしては、UTXOはトランザクション処理の結果を正確に指定できる一方、アカウントベースの場合はトランザクションの結果が、実行時の状態に依存する点が挙げられます。端的に表現すれば、UTXOはステートレス、アカウントベースはステートフルなのです。

その他のアカウントベースの特徴を整理していきます。

柔軟性のあるトランザクションが可能

アカウントベースにおけるトランザクションは、より高い柔軟性を有しています。トランザクション実行時の状態や外部からのインプットによって、トランザクションの結果が変わるのです。オラクルやその他のロジックのようなインプットが、トランザクションの結果に影響を与えるため、条件に応じたスマートコントラクトによる処理の自動化・効率化が期待できます。

一方で、場合によっては意図しない結果を引き起こす可能性は否定できません。また、トランザクションの結果が、実行時の状態に依存するため、関連するトランザクションを並行して処理するときには注意が必要です。基本的には、同じアカウントに影響を与えるトランザクションは、順序付けてひとつずつ処理する必要があります。

トランザクションサイズが小さい

アドレスに紐付いたUTXOをすべて集約して残高を算出(参照)するUTXOよりも、アカウントベースの方がデータサイズが小さくなります。この点では、アカウントベースの方がストレージの若干の節約になると言えるでしょう。

アカウントベース方式のプライバシーは高くない

UTXOベースとは異なり、アカウントベースでは同じアドレスが繰り返し使用されます。したがって、多くのトランザクションがひとつのアカウントおよび、その持ち主にリンクされるため、プライバシーは高くありません。

まとめ:ブロックチェーンの基本的な構成要素を知ることは重要

本記事では、ブロックチェーンの基本的な構成要素である残高管理の方式について、UTXOベースとアカウントベースそれぞれの基本的な事項や特徴を紹介してきました。

どちらが優れているということではなく、残高管理のような基礎設計によってデータの保存方法やブロックチェーン自体の目的(最適な活用方法)がどのような影響を受けるのかを知ることが重要です。

例えば、プライバシーの観点ではアカウントベースよりもUTXOの方が優れていると考えられますし、より柔軟なプログラムを実行したい場合はアカウントベースの方が優れていると言えるでしょう。

したがって、基本的な構成要素を知ることは、採用するブロックチェーンのプラットフォームを選ぶ際の参考になるのです。

ブロックチェーンカテゴリの最新記事