ILP(InterLeger Protocol、インターレジャープロトコル)は世界中に散らばっている異なる価値を高速で移動させることを目指しています。例えば、ビットコインが記録されているブロックチェーンと日本円が記録されている銀行口座システムはそれぞれ規格が大きく異なる台帳ですがILPはこのような規格の異なる台帳同士でスムーズに送金が行えることを可能にするのです。
ILPはリップル社によって提唱されたものですが、オープンソースのプロジェクトであり誰でもILPを応用して自身のプロダクトに使うことが可能です。また、W3C(World Wide Web Consortium)という非営利団体によってILPを使った価値の標準化が進められています。
そこで、当記事ではILP(インターレジャー・プロトコル)の概要とその仕組みについてお伝えしていきます。
ILPとは
ILPとは、異なる台帳間でのお金の高速移動を可能にするプロトコルです。この「台帳」(レジャー)とは以下のようなさまざまなネットワークを想定しています。
- ビットコインなどのブロックチェーンネットワーク
- 銀行などの金融機関とのネットワーク
- クレジットカードネットワーク
- PayPalなどのモバイル決済ネットワーク
このような異なる通貨を持っているレジャー同士をつなぎ、それぞれのネットワークで高速なやり取りを実現するのがILPの目指しているところです。
つまり、インターネットで情報を高速にやり取りしている標準化されたプロトコルがIP(Internet Protocol)で、世界中の価値を高速にやり取りできるように標準化されたプロトコルがILP(InterLedegr Protocol)となろうとしているのです。
インターレジャー(ILP)の仕組み
まずは異なるレジャーを持つ2者間でILPを使ってやり取りするケースを見ていきましょう。
Interledgerは下図のように異なるレジャー(台帳)間をConnector(コネクター)を中継することで、最終的に送り手(Sender)と受け手(Receiver)をつなぐモデルです。ここでは、送り手がアリス、受け手がボブ、コネクターがクロエでアリスが持つユーロをボブがドルとして受け取っています。
(source: interledger overview)
上図のユーロからドルの移動は以下の流れで行われます。
- アリスのレジャーにある100ユーロがクロエのレジャーに移動する
- クロエのレジャー内で100ユーロを107ドルに両替する
- クロエのレジャーにある107ドルがボブのレジャーに移動する
流れを見て分かる通り、アリスとボブのコネクターであるクロエがとても重要な働きをしていることが分かります。しかし、このままの仕組みだとクロエが受け取ったお金をそのまま盗んでしまうことが可能になってしまいます。
ILPでは仲介するコネクターに資金が盗まれないように後述するアトミックモードとユニバーサルモードという2つの方法を主に用意しています。
このようなILPを使った送金ににおいて、仲介するコネクターの数を増やしていくことで以下のようにネットワークに応用することが可能です。
(source: interledger overview)
このようなネットワークを作ることがILPの目指しているところであり、送り手と受け手はもちろん、それぞれのコネクターも異なるレジャーを持っている状況下で行われます。つまり、世界中のさまざまな形で存在する価値をシームレスに高速かつ安全に移動できるような仕組みを目指しているといえます。
ILPの3つのモード
上述した例において、アリスからクロエにお金を送り、そのお金をクロエがボブに送っていたのではクロエがそのお金を簡単に盗むことができてしまいます。これを防ぐために、ILPではまず取引に参加するアカウント(コネクターを含む)間で準備をして、その後実際の送金を行います。
(source: interledger overview)
この①〜③の準備(Prepare)と④〜⑥の実行(Execute)はILPのそれぞれの仕様によって変えることが可能であり、ILPでは以下の3つのモードを用意しています。
- オプティミスティックモード(Optimistic Mode)
- アトミックモード(Atomic Mode)
- ユニバーサルモード(Universal Mode)
オプティミスティックモードは全ての参加者が信頼できることが前提で行われるのでセキュリティ的に問題がありテスト環境以外で一般的に使われることはありません。
アトミックモード
アトミックモードは、信頼のできる第三者を承認者(バリデーター)として取引に仲介させる方法です。この場合は、まず準備段階として送金者はレジャーに資金をデポジットします。そして、受け手に対してデポジットしていた資金を送るときにはバリデーターの承認が必要になるのです。
つまり、バリデーターが承認しなければアトミックモードでの送金は行われることはありません。必要複数のバリデーターを存在させることも可能です。また、バリデーターに対して送金額などの知られたくない情報は隠して実行することができます。(アトミックモードでも後述するHTLAなどの暗号学的に安全な送金が行われます。それに加えバリデーターの承認が必要になるのです)
アトミックモードのメリットは、バリデーターが信頼できる限り送金が確実に行われることです。なので、銀行などの金融機関の間での送金では確実性を最重視するためILPのアトミックモードが用いられています。実際に、リップルのxCurrentという金融機関などをつなぐプロダクトではアトミックモードのILPが導入されています。
逆に、パブリック向けのILPではアトミックモードは使えずにユニバーサルモードのみが使用可能です。
ユニバーサルモード
ユニバーサルモードでは、アトミックモードのような第三者のバリデーターは存在しません。その代わり、他の暗号学的に安全な方法で送金を実現します。例えば、HTLAs(Hashed-Timelock Agreements)という仕組みがあげられます。
HTLAとはビットコインのライトニングネットワークで用いられているHTLCという仕組みを規格の異なる台帳間でも使えるように一般化したものです。HTLCは暗号学的なトリックとタイムロック(時間制限)が組み合わされた仕組みになります。
お金の流れを逆にすることでコネクターがお金を盗むチャンスをなくしています。つまり、まずコネクターが受け手にお金を送り、次に送り手がコネクターにお金を送るのです。冒頭の例で言えば、クロエ→ボブ:107ユーロの送金を実行した後にアリス→クロエ:100ドルを実行します。
以下のように、まず、「送金を行う」という合図を送り、コネクター達に準備をさせます(①〜③)。その後、逆方向に送金を実行していくのです。(④〜⑥)
また、途中で何らかのネットワーク異常が起きた場合を考えて、タイムロックが定められており一定時間の間に送金が実現しなければ資金は元の保持者に返金されるようになっているのです。
ILPにおけるHTLAはについてはこちらの記事で書いています。
参考:ILP(インターレジャー)で安全かつ柔軟な送金を行える仕組み「HTLA」
また、ここまでのILPの概要は以下の動画で説明されています。
ILP内部の階層構造
上記まではILPのモデルを横から平面的に見た視点からの解説です。ここからはILPを縦に割って見ていきましょう。
ILPは以下のような4つの階層から成っています。(一般的に以下の構造全体のことを指してILPと呼ばれますが、厳密にはその中のあるひとつの階層のことをILPと言います。)
(source: Interledger Architecture)
上図から分かるように、送り手と受け手はアプリケーション、トランスポート、インターレジャー、レジャーという4つの層があります。一方、それを仲介するコネクター達はインターレジャーとレジャーの2つの層を持っています。
レジャー層
送り手、受け手、コネクター関わらずILPでアカウントを作る場合は、レジャー層の実装が必須になります。レジャー層の役目はそれぞれの台帳(レジャー)と通信し、実際に送金の実行を行うことです。この通信方法によってさまざまな種類が存在し、上図でもL1プラグイン、L2プラグイン、LNプラグインと分類されていることが分かります。
「プラグイン」という言葉から分かるようにそれぞれの台帳の仕様に合わせて機能を拡張するアダプターのように使われるのです。なぜなら、ILPはブロックチェーンだけでなく、銀行システムやインターネット決済サービスなどさまざまな台帳をつなぐ必要があるからです。
これらの異なる仕様をつなぐためにプラグインという形でレジャー層が実装し、実際の送金が行われています。
インターレジャー層
下から2層目に位置しているのがインターレジャー層です。レジャー層同様、アカウントの種類に限らずILPのに参加している場合はインターレジャー層の実装が必須です。インターレジャー層の働きは、送金に必要な情報を作り、それを下層のレジャー層に渡すことです。
このインターレジャー層はILPとILQPという2つのプロトコルから主に構成されています。(厳密にILPとはシステム全体のことではなく、このインターレジャー層のコア機能のことを言っています。)
ILP(Interledger Protocol)では、取引におけるアカウントのアドレスを定義しています。アドレスとは、住所のようなもので例えばビットコインのアドレスは以下のようになります。
- g.crypto.bitcoin.1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
このようなアドレスに対して送金することで、お金を移動させることができるのです。また、異なる台帳間で通信を行うためのパケットのフォーマットを定めるのもILPの役目です。
ILQP(Interledger Quoting Protocol)では、ILPでの通信において取引先(コネクター)から見積もりを得ることができます。つまり、ILQPではどのくらいの資金が送金されるのか計算を行います。このILQPの方法で得た見積もりに基いて送金の準備を行なっていくのです。
以上のように、インターレジャー層ではILPとILQPに基いて、アドレスやパケットのフォーマットを定め、取引の見積もりを行う働きをしています。
トランスポート層
トランスポート層は下から3層目に位置し、送り手と受け手によって使われます。トランスポート層の役目は資金が送り手から受け手に対して安全に送られるような方法を作ることです。
この方法は主にPSKとIRPという2つの方法がありますが、PSKの方が安全なため推奨されています。
PSK(Pre-Shared Key)では、あらかじめ送り手と受け手の間で鍵を共有しておき、その2人だけが知っている共有鍵を使うことで、安全な取引を行います。具体的には、その共有鍵によってILPで作られたデータに権限を与えたり、データを暗号化したりすることができます。
またこの共有鍵は下記のアプリケーション層で安全に共有されます。
アプリケーション層
アプリケーション層は一番上層に位置し、送り手と受け手のみが用意しています。アプリケーション層の役目は、送信先を発見し安全な通信を確立することがです。
図中にあるSPSP(Simple Payment Setup Protocol)は代表的なアプリケーション層のプロトコルです。SPSPでは、送り手と受け手の間で取引に関する詳細なデータを安全にやり取りすることができます。この通信はHTTPSという通信が暗号化されている手段が用いられるので外部に情報が漏れることはありません。
ILPの具体的な流れ
ここでは公式ドキュメントにしたがってILPを使った具体的な送金について見ていきます。
少し分かりにくいですが、これは受け手と送り手の間にひとりのコネクターがいるILPモデルになります。アプリケーションは上記のアプリケーション層とトランスポート層がまとまっています。
インターレジャーモジュールがインターレジャー層で、LLI-1やLLI-2がレジャー層のプラグインです。(LLIはローカルレジャーインターフェースの略です)送り手とコネクターの間、コネクターと受け手の間それぞれにローカルレジャーがあり、このローカルレジャーにデータを記録することで送金を行なっていきます。
カッコ内の数字が手順の番号と一致しているのでどこの層でどの手順を行っているのか確認しながら追っていきましょう。
①送り手のアプリケーションが受け手のアドレス、送金量、暗号学的な送金方法の種類(HTLAの種類)、タイムアウトの時間を定め、これらの情報をインターレジャーモジュールに与える。
②インターレジャーモジュールがILPパケットをローカルレジャーに情報を送る。このILPパケットにはコネクターのアドレスや送金量などの情報が含まれている
③ローカルレジャーインターフェース1(LLI-1)がローカルレジャー1に送信するための準備を行う
④ローカルレジャー1に送り手の資金がロックされ、そのことがコネクターに伝わる(実際の送金はまだ行われていなく、ただデポジットされているだけ)
⑤コネクターのLLI-1が送り手の資金がローカルレジャー1にデポジットされた事実を受け取り、その情報をコネクターのインターレジャーモジュールに送る
⑥コネクターのインターレジャーモジュールは受け取った情報からILPパケット(アドレスや送金量の情報)を作り、受け手のレジャーに合わせてLLI-2を呼び出す。
⑦LLI-2がローカルレジャー2に送信するための準備を行う
⑧ローカルレジャー2にコネクターの資金がロックされ、そのことが受け手に伝わる(実際の送金はまだ行われていなく、ただデポジットされているだけ)
⑨受け手のLLI-2がその情報を受け取り、受け手のインターレジャーモジュールに送る
⑩受け手のインターレジャーモジュールは受け取った情報からILPパケットを作り、アプリケーションに送る
⑪受け手のアプリケーションは、送り手とコネクターの資金がレジャーにロックされていることを知り、詳細な情報を確認する。もしOKだったら、送金の実行合図をコネクターのインターレジャーモジュールに送る。
ここまでで、送り手から受け手までのアプリケーションに送金情報が伝わりました。ここからはデポジットした資金を実際に送金していくために、ここまでの流れを逆走していきます。
⑫受け手のインターレジャーモジュールは実行合図をLLI-2に送る
⑬受け手のLLI-2はローカルレジャー2に実行合図を送る
⑭送金実行が承認されると、実際にローカルレジャー2にデポジットしていたコネクターの資金が受け手に送られる。ここでの承認条件はアトミックモードやユニーバーサルモードなどにより異なる
⑮コネクターのLLI-2は送金が実行されたことを知り、その情報をコネクターのインターレジャーモジュールに伝える
⑯コネクターのインターレジャーモジュールはLLI-1に送金実行の合図を送る
⑰コネクターのLLI-1はローカルレジャー1に実行合図を送る
⑱送金実行が承認されると、実際にローカルレジャー1にデポジットしていた送り手の資金がコネクターに送られる。ここでの承認条件はモードによって異なる
⑲送り手のLLI-1は送金が実行されたことを知り、その情報を送り手のインターレジャーモジュールに伝える
⑳インターレジャーモジュールは送金が実行されたことをアプリケーションに伝える
㉑送り手のアプリケーションが無事送金が実行されたことを知る
コネクターが間にひとりだけいる場合のILPモデルの流れは以上のようになります。もしコネクターが間に10人いる場合も、上記の流れでコネクターを増やすだけです。コネクターの数は基本的にその通貨間の流動性によって決まります。
例えば、日本円-ドル間の流動性は高いのでコネクターは1人で足りるでしょう。しかし、ケニア・シリング-メキシコ・ペソのようなマイナーな通貨同士での交換は流動性が少ないので、多くのコネクターが必要になる可能性が高いです。その分、送金時間も増え、送金手数料も高くなります。(コネクターが手数料を受け取るため)
なので、リップルではxRapidというプロダクトを用意しILPの間にXRPという独自のデジタルアセットを持ったコネクターを用意し、どのマイナーな通貨間でも送金が早く、安く行えるようにしています。つまり、ケニア・シリング-XRP-メキシコ・ペソのように1人のコネクターだけのILPモデルが実現できるようにしているということです。
ILPとアトミックスワップの違い
ここまでのILPの解説を見て、ビットコインでのアトミックスワップに似ていると感じる方も多いはずです。実際に、アトミックスワップで用いられている技術がILPでも使われています。
アトミックスワップとは、異なるブロックチェーン間で取引を行う方法で実際にビットコイン-ライトコイン間、ビットコイン-イーサリアム間での実験的アトミックスワップは実現しています。
参考:【図解】アトミックスワップのすべて。その仕組みとメリットと問題点
このように異なるレジャー間での送金を可能にするという点ではILPとアトミックスワップは似ていますが、目指している方向性が異なります。
アトミックスワップは、仮想通貨間でのブロックチェーンで適用されるコインの交換です。つまり、仮想通貨の経済圏をひとつにまとめようとしていると言えます。一方、ILPはブロックチェーンに限らず、金融機関などのネットワークを含めさまざまな規格の台帳をつなごうとしています。つまり、価値の標準化に徹していると言えます。