コスモス(Cosmos/ATOM)関連の記事で頻繁に登場するブロックチェーン間通信プロトコル「IBC(Inter-Blockchain Communication)」の概要を初心者向けにわかりやすくまとめています。
IBC(ブロックチェーン間通信)とは?
IBCは「Inter-Blockchain Communication」の略で、異なる2つの ブロックチェーン の相互通信を可能にする通信プロトコル(規格)です。IBCの技術を活用することによって、任意のステートマシン間で任意のデータを相互にやり取りすることが可能になります。
ビットコイン(BTC)が誕生してから、独自に設計されたブロックチェーンが数多く世に出てきましたが、これまでのブロックチェーンの仕組み上、異なるブロックチェーン間での直接の送金やデータのやり取りをすることができず、それぞれのブロックチェーンが"鎖国"のような状態になっていることが大きな課題の一つとされていました。
この課題の解決を目指しているコスモス(Cosmos)がIBCを実装し、異なるブロックチェーンが分散型の仕組みでお互いに通信できる"ブロックチェーンのインターネット"を可能にしています。
IBCの特徴
IBCの最も大きな特徴は「信頼の必要性を最小限に抑えた仕組み」です。
ブロックチェーンにおける「信頼」とは主にセキュリティを指しますが、他の相互通信ソリューション(ポルカドットなど)とは異なり、IBCは"信頼できる第三者"の存在を必要としません。通信を行うチェーンが提供している機能を信頼することができれば、IBCではサードパーティ(第三者)を追加する必要性がなくなります。
また、IBCはトークン送金を可能にするブリッジ(橋渡し)機能だけではなく、汎用的なメッセージも通信できるプロトコルなので、どのような形式のデータであってもIBCを介して通信を行うことが可能です。
IBCの仕組み
IBCの仕組みを理解するためには「トランスポート層」と「アプリケーション層」を分けて理解することが重要です。
- トランスポート層(IBC/TAO):トランスポート・認証・順序付けを行う下位レイヤー
- アプリケーション層(IBC/APP):トランスポート層の上に構築される上位レイヤー
それぞれ解説していきます。
トランスポート層(IBC/TAO)
トランスポート層(IBC/TAO)は、2つのブロックチェーン間のパケット(1回のIBCリレーで伝達されるデータの塊)を信頼性・順序性・認証性のある方法で中継するためのレイヤーです。
IBCを介して通信されるメッセージはデータパケット内で転送され、トランスポート層は「データパケットの輸送・認証・順序付け」の役割を担います。
トランスポート層は、パケット内データの内容や受信側のチェーンでの受け取り方について何も指定しません。つまり、トランスポート層から見れば、データパケット内の情報は「単なるランダムな情報」でしかありません。
トランスポート層の主要な構成要素は、ライトクライアント(light clients)、リレイヤー(relayers)、コネクション(connections)、チャネル(channels)です。
ライトクライアント(light clients)
ライトクライアントとは、ブロックチェーンを軽量化して表現したもので、フルノード(*1)とは異なり、ブロックチェーンに含まれるすべてのメッセージの全履歴を保存しません。また、トランザクションを実行することもなく、むしろ、ライトクライアントはフルノードに接続し、ブロック内に含まれるデータの要約を検証するように設計されています。このため、ライトクライアントはストレージと計算の面で効率的です。
IBC上で2つの独立したブロックチェーン「A」と「B」が通信を行う場合、それぞれが取引相手のライトクライアントを持ちます。例えば、AからBに"メッセージX"を送信したい場合、イメージとして、そのメッセージが存在するブロックのヘッダーとメッセージの証明書をBに送信します。
証明書はAに”メッセージX”があることを検証するために使われます。このブロックヘッダーと証明書によってBは「Aが確かに”メッセージX”を送信したこと」を暗号的に検証することができます。
このように、IBCのライトクライアントを利用することにより、ブロックチェーンは信頼できるサードパーティを必要とせずに互いにメッセージを交換することができます。
リレイヤー(relayers)
しかし、AB間でこれらのメッセージやデータを互いに直接送信するわけではありません。AからBにメッセージを送る場合は、そのメッセージを含むデータのハッシュをステートマシン(*2)に保存します。そして、オフチェーン(off-chain)プロセスである「リレイヤー」がこのようなメッセージを常に監視しており、リレイヤーがB宛のメッセージをA側のステートマシンに保存したことを確認すると、そのメッセージを拾ってBに渡します。
コネクション(connections)
コネクションは、2つの異なるチェーン上のライトクライアントを接続する役割を担っており、通信をする相手を決定・認証する際に使用されます。
チャネル(channels)
チャネルは、2つの異なるチェーン上のモジュール / アプリケーションの間でパケットを転送するための導管として機能します。それぞれのチャネルの最後にはデータを正確に送信するために使用されるチャネルID(ポートID)を持ち、チャネルのもう一方の端を所有する対応するモジュールにのみ配信されることが保証されます。
現在、チャネルには主に2つのタイプがあります。
- Ordered:パケットが送信元から送信された順序で宛先に転送される
- Unordered:パケットが送信元から送信された順序に関係なく、任意の順序で転送される
チャネルはIBC内でパケットの伝送と順序付けを行う上で重要な役割を果たします。モジュールとチャネルは密接に連携しているため、アプリケーション開発者はIBCチャネルの内部・外部について熟知しておくと便利です。
アプリケーション層(IBC/APP)
アプリケーション層(IBC/APP)は、前述したトランスポート層の上に構築され「データパケットがどのようにパッケージ化され、送信チェーンと受信チェーンによってどのように解釈されるか」を正確に定義します。アプリケーション層はエンドユーザーが接続してやり取りするもので、様々なアプリケーションで構成されています。
IBCは「トークン(仮想通貨やNFT)の転送」や「Fee middleware(中継者へのインセンティブ)」など、数多くのアプリケーションをサポートしています。
例えば、トークン転送のためのIBCのアプリケーション(ICS20)は、データパケットがどのように構成されるべきか、そして受信者側のチェーンによってどのように解釈されるべきかを指定しています。
代替可能なトークン(BTCなどの仮想通貨)の場合、データパケットには送信者、受信者、金額、デノム(通貨の単位名を変更)に関する情報が含まれます。デノムフィールドは、どのトークンがどのチェーンに送信されたのかという経路をトレースします。
データパケットがどのように処理されるかに関する内容もICS20によって規定されています。
IBCは「郵便配達システム」のイメージ
IBCを理解するのに最も分かりやすい例は「郵便配達のシステム」です。あなたが誰かに手紙を送る際の流れをイメージすると分かりやすくなると思います。
一連の流れとして
- あなたが友人宛に手紙を書き郵便ポストに入れる
- 郵便局員が手紙が入った封筒を回収する
- 郵便局員が受取人のポストに投函
- 受取人である友人があなたからの手紙の内容を読む
といった流れが一般的な郵便配達のシステムになりますが、郵便局員はあなたが書いた手紙の内容を指定も把握もしておらず、また、封筒の中身が"手紙"であるということすら知りませんので、あなたからのメッセージ内容を受取人に対してどう解釈すべきかなど話すことはできません。IBCでのトランスポート層がまさしく「郵便局員」のようなイメージになり、ただシステムとして2人の間の橋渡しをするだけになります。
例えの中での「封筒」がIBCにおけるデータパケットとなり、このデータパケットには「誰が(チャネルIDで指定)誰に(受取先チャネルIDで指定)何を送信するのか」という情報が指定してあります。そして、封筒(データパケット)を開けて「何が送られてきたのか」という内容を詳しく理解するのがアプリケーションになります。
トークン転送以外にIBCができること
IBCのアプリケーションには、トークンの転送他に「インターチェーンアカウント」「インターチェーンセキュリティ」があります。
インターチェーンアカウント
インターチェーンアカウントは、単一のインターフェイスに維持しながらチェーン間の相互作用を促進します。これはホストチェーンで実行できる送金やステーキング、ガバナンス提案に対する投票などのアクションが、コントローラーチェーンから実行できることを意味します。このことからインターチェーンアカウントは、ユーザーエクスペリエンス(ユーザー体験)を向上させることにより、インターチェーン内の可能性を広げます。
インターチェーンセキュリティ
インターチェーンセキュリティは、Cosmosエコシステム版の共有セキュリティです。ブロックチェーンは、完全にオプトイン方式(*3)で他のチェーンからセキュリティをリースすることができます。これは、Cosmos Hubなどの既に確立されたネットワークによって提供されるセキュリティを活用することを選択できる新しいチェーンに特に役立ちます。インターチェーンセキュリティは、チェーンが独自のバリデータセットを起動する必要性を取り除きます。
Terra Classicチェーンとの再有効化に向けて
Terra Luna Classic(LUNC)は元々、IBCを採用して運用していましたが、2022年5月の大暴落に「停止」となり、今現在(2022年11月時点)もまだ有効化はされておらず、両チェーン間での通信が不可能な状態となっています。
再有効化に向けた提案はされていますが、問題なく再有効化されると、動かすことができなかったLUNCを動かせるようになったり、他チェーンとの相互通信によって流動性上昇やユースケース増加することに期待が集まっています。
Terra Classic「Cosmoshub IBC再有効化」の提案|fragwerdig/Rex Harrison
fragwerdig氏とバリデータを運営しているRex Harrisonが公開した記事『Cosmoshub IBC Reactivation via Client Unfreeze(凍結解除によるCosmoshub IBCの再有効化)』の内容を日本語訳した記事となります。
続きを見る