XRP Ledgerはリップル社により開発された分散型の台帳になります。このネットワークに参加しているユーザーはネイティブ通貨のXRPを高速かつ低手数料で送金を行うことが可能です。
XRP Ledgerはビットコインのブロックチェーンとは大きく仕組みが異なり、高速な送金と手数料の削減が行える反面、ネットワーク内である程度の信頼が必要になります。
当記事ではXRP Ledgerの構造やコンセンサスアルゴリズムを見ることで全体的なプロセスの仕組みについて紹介していきます。また、記事中の画像は記事末の公式ドキュメントのものになります。
XRP Ledgerの構造
XRP Ledgerにはトランザクションなどの情報が保存されます。トランザクションとは、送金による取引データのことです。例えば、アリスがボブに10XRP送ったときその取引データはトランザクションとして保存されます。ブロックチェーンを基盤としているビットコインなどは、ブロックにトランザクションが保存されますがXRP Ledgerはレジャーに保存されることになります。
ある一定の時間にネットワークで作成された複数のトランザクションがひとつのレジャーにまとめられ保存されるのです。レジャーにはトランザクション以外にもさまざまなデータが保存されており具体的なXRPレジャーの構造は以下のようになります。
それぞれのレジャーに主に以下の情報が記録されています。
- レジャー番号
- アカウント情報:アカウントID、アカウント残高、以前のトランザクションハッシュなど
- トランザクション:送金額、作成者、送金先など
- タイムスタンプ
- 承認サイン
レジャー番号はそれぞれのレジャー固有の値であり、時系列に沿って増えていきます。また、ユーザーのアカウント情報やトランザクション、レジャーが作成された時刻であるタイムスタンプ、そのレジャーが正当かどうかを表す承認サインなどのデータがあります。
このようなXRP Ledgerは作成されたレジャーごとにインデックス番号が1ずつ増えていきます。また、XRPのネットワークでは常にユーザー同士で送金が行われているので、それにより作成されたトランザクションが「候補トランザクション」としてネットワークに存在します。
このような候補トランザクションはネットワークを構成するノードによって承認されることでレジャーに組み込まれ、それに伴いレジャー番号も増えるのです。
下図のように、新しいトランザクションによって新しいレジャーが作成されると、それによってアカウント情報も変化します。なぜなら、そのトランザクションに関わっているユーザーの残高などが変化するからです。逆に関わっていないユーザーのアカウント情報は以前のレジャーから変化しません。
XRP Ledgerでは作成された候補トランザクションが承認作業を経て承認されてからレジャーに記録されます。それでは、どのような過程を経てXRPネットワーク内でトランザクションが承認されるのか見ていきましょう。
コンセンサスアルゴリズム
コンセンサスアルゴリズムとは、作成されたトランザクションが正当かどうかネットワーク内で合意を得るための仕組みです。
例えば、アリスが「ボブに10XRP送金」と「チャーリに10XRP送金」という2つのトランザクションを同時にネットワークにブロードキャストすることで、アリスは10XRPしか支払っていないのに、ボブとチャーリーはそれぞれ10XRPを受け取れるという問題が生じます。これを二重支払いといい、「物」として実在していない仮想通貨であればデータの偽造により可能になってしまいます。
このような不正なトランザクションを承認しないようにし、ネットワーク全体で正当なトランザクションのみを承認するのがコンセンサスアルゴリズムの役割です。
このコンセンサスアルゴリズムは仮想通貨によりそれぞれ種類が異なり、例えばビットコインではプルーフ・オブ・ワーク、イーサリアムではプルーフ・オブ・ステークが採用されています。
リップルが開発しているXRP Ledgerでは通称プルーフ・オブ・コンセンサス(PoC)と呼ばれるコンセンサスアルゴリズムで、正当なトランザクションのみをネットワークで共有しています。
XRPネットワーク構造
XRPネットワークは以下のようになっており、たくさんのノードによって構成されています。
ノードは主に2種類いて、承認ノード(validating node)とトラッキングノード(tracking node)が存在します。それぞれのノードの役割は以下の通りです。
- トラッキングノード:受け取ったトランザクションを他のノードに送る
- 承認ノード:トランザクションノードの役割に追加してトランザクションの承認作業を行う
流れを見ていきましょう。まず、ウォレットアプリケーションなどからトラッキングノードがトランザクションを受け取り、それを隣のノードに送ることでリレー方式でネットワーク全体に伝播していきます。承認ノードがトランザクションを受け取った場合は後述する承認作業を行なっていきます。
それぞれの候補トランザクションが全てのノードに同じように共有されている状態が理想的ですが、実際には伝播遅延などがあるのでそれぞれのノードが持っているトランザクションの状態は少し異なります。このような状況下でも、ネットワーク全体としては同じトランザクションが処理され承認されるように以下のコンセンサスプロセスが行われます。
コンセンサスプロセス
上述したしたように、承認作業は承認ノードのみによって行われます。承認ノードはリップル社などにより認定されており、UNL(Unique Node List)とも呼ばれ基本的に信頼できることが前提です。1人のUNLだけが悪意を持つことは問題ありませんが、UNL同士で結託して悪意を持つと不当なトランザクションが承認されてしまい二重支払いなどが可能になってしまうのです。なので、UNLは慎重に選ばれる必要があります。
トランザクションが作成されるとトラッキングノードを中継するようにして、それぞれの承認ノードに候補トランザクションとして送られますが、それぞれの承認ノードが持っている候補トランザクションのリストは少しずつ異なるはずです。(伝播遅延のため)
このような状況のとき、十分な数の承認ノードによって承認されたトランザクションのみが承認トランザクションとなり、十分な数の承認が得られなかったトランザクションは次回の承認作業に回されるのです。例えば、1回目の承認作業では50%以上の承認が必要、2回目の承認作業では80%以上の承認が必要、といったイメージです。
この承認作業のプロセスはトランザクションが「LastLedgerSequence」というパラメーター持つことでかなり効率化されています。このパラメーターにより、以前の承認作業においてそのトランザクションが承認されたのか、それとも不承認であったのかチェックできるのです。
承認ノードは承認作業が完了すると、承認されたトランザクションをトラッキングノードを含めたネットワーク全体にブロードキャストをします。
また、ノードはそれぞれのUNLから送られてきたXRPレジャーのハッシュ値を比較し、それらの結果のほとんどと一致しているか確認を行うことでネットワーク全体で共通の正しいレジャーのみが共有されるようになっています。
トランザクションが作成されXRPレジャーに記録されるまでの流れをまとめると以下のようになります。
- アカウントの所有者によって署名されたトランザクションが作られる
- 作成されたトランザクションはトラッキングノードを介して承認ノードに伝わっていく
- コンセンサスプロセスの間にトランザクションはレジャーに保存されていく
- レジャーがネットワークで承認されると承認サインがつく
XRP Ledgerの良いところ
XRP Ledgerではマイニングによりコンセンサスをとっていないため送金にかかる時間が数秒(3〜6秒)ほどとかなり高速にすることが可能です。
また、取引手数料も低くマイニングによる環境面の負荷などもメリットとしてあげられます。さらに、XRP Ledgerはネイティブ通貨のXRP以外もサポートしているので他のデジタルアセットを動かすことも可能です。
このようなXRP Ledgerのメリットを活かし、リップル社のプロダクトでは異なる台帳同士をつなぐILP(インターレジャープロトコル)にXRP Ledgerを組み込むことで送金の高速化、手数料の削減を促しています。
参考:【図解】リップルが提唱したインターレジャープロトコル(ILP)の仕組み
XRP Ledgerの課題点
XRP Ledgerの課題点はUNLによるネットワークの集中化があげられます。
XRP Ledgerは承認作業を行うUNLをある程度信頼し多くの権限を与えることになるのでUNLを分散化していくことが必要です。なぜなら、悪意のあるUNL同士が互いに結託すると二重支払いなどが可能になりネットワークの根本的な信頼性がなくなってしまうからです。
そのため、UNLの数を増やすとともに、そのUNL同士で結託しないように身分(立場、アイデンティティ)の分散化、地理的な分散化を促進しています。また、さらに分散化を促すためにリップル社以外の第三者により認められたUNLを2つ追加するごとに、リップル社が指定したUNLを1つ除くというプロセスも行われています。