はじめに
ブロックチェーン領域では「異なるブロックチェーン同士を接続し、相互にデータを読み書きできる性質」を相互運用性と呼びます.
各々のブロックチェーンが分断された状態では,データがサイロ化されてしまい,十分な活用が見込めません.また,より多くのデータを高速に処理する(スケーラビリティを向上させる)ために,複数のブロックチェーンやLayer21を組み合わせた運用が増えており,それぞれのシステムを繋げる技術の需要が高まっています.
(関連記事)
- ブロックチェーンをつなげるIBCとは 〜Relayerを用いたトークン転送〜|Qiita
- ブロックチェーンの相互運用性とは ~クロスチェーンの通信技術~|日本総研
- ブロックチェーンをつなげるLayerZeroの仕組み|Qiita
Chainlinkとは
Chainlinkは分散型オラクルネットワークの一つで,現実世界のデータをブロックチェーンに取り込むためのプラットフォームです.
ブロックチェーン上で動作するスマートコントラクトは,原則としてブロックチェーン内のデータにのみアクセスでき,ブロックチェーン外(オフチェーン)のデータを参照できません.一方,ユースケースによっては外部のデータを利用する需要があるため,正しいデータを取り込むための仕組み(=オラクル)が必要になります.
分散オラクルネットワークは,複数のノードからデータ提供を受けることでデータの信頼性を高め,単一障害点を作り出さないという特徴をもちます.
Chainlinkでは,Offchain Reporting (OCR) 2という仕組みでオフチェーンデータを収集・統合しており,トークンの取引価格やRWA(Real World Asset)関連データ,L2シーケンサーのステータスなど3を参照できるデータフィードを提供しています.
データ収集の仕組み
Offchain Reporting2とは,オフチェーンでのデータ統合,コンセンサスを経てブロックチェーンにオラクルデータを保存する仕組みです.
Chainlinkの各ノードは,さまざまなデータソースから直接,あるいはデータを収集しているアグリゲーターを介して間接的にデータを収集しています.
ChainlinkのノードはオフチェーンでP2Pネットワークを形成しており,その中で選出されたリーダーノードの指示に従い,各ノードが互いにデータを提出,検証して,最終的なオラクルデータを作成します.
各ノードはデータの検証が成功したら署名を行い,一定数の署名が集まればデータの信頼性が高いものとして,リーダーノードがブロックチェーンにオラクルデータを提出します.
ブロックチェーンにデータを提出するときのみトランザクションを用いるため,トランザクション手数料を節約し,ブロック更新のタイミングに左右されないデータ更新を実行しています.
Chainlinkの方向性
分散型オラクルとして始まったプロダクトですが,近年は今回取り上げる相互運用性プロトコル "Chainlink CCIP" を用いた既存金融との関わりが強くなっています.
相互運用性プロトコルの多くはDeFiを主なターゲットとする一方,Chainlink CCIPは既存金融機関や機関投資家などTradFiをターゲットとしたインフラ戦略を展開しています.
その一つがSwiftとの連携です.ChainlinkはSwift,UBSアセットマネジメントと共同で,ChainlinkとSwiftの各ネットワークを接続してトークン化ファンドの決済を行うといったパイロット実験を実施しています.
Chainlink CCIPとは
CCIP v1.6について解説しています.以下はEthereumを前提としていますが,Solanaなど他のブロックチェーンネットワークにも対応しています.
Chainlink CCIP (Cross-Chain Interoperability Protocol) とは,オフチェーンの独立したChainlinkノードのネットワークを経由し,ブロックチェーン間で安全にトークンやメッセージを転送する仕組みです.
前段で説明したように,Chainlinkはオフチェーンのデータをブロックチェーンに反映させる仕組みをもちます.ブロックチェーン間でデータを転送する際には,そのデータがオフチェーンを経由することが多く,その部分にChainlinkの仕組みを当てはめて相互運用性を実現するという考え方です.
主な役割・機能
CCIPの仕組みを理解するにあたり,主に以下の役割が登場します.これ以外にも,ブロックチェーンやトークンを管理するためのコントラクトが存在しますが,概観の把握には不要なため割愛します.
| 名称 | エンティティ | 役割・機能 |
|---|---|---|
| 送信者 / 受信者 | EOA / コントラクト | トークンやデータを送受信する主体 |
| DON4 | Chainlinkノードの集合 | 送信元チェーンの状態を監視し,送信先チェーンでのメッセージの処理を実行 |
| オンランプ | コントラクト | 送信元チェーンで動作し,メッセージの検証や送信先チェーンの状態確認,トークンプールへの指示などを実行 |
| オフランプ | コントラクト | 送信先チェーンで動作し,DON経由で送られたメッセージを検証 |
| ルーター | コントラクト(変更不可) | 受信者・送信者とオンランプ,オフランプ間のルーティングを制御 |
| トークンプール | コントラクト | Lock/Burnなどの処理を実装し,トークンを制御 |
上記のうち,トークンプールに限り,Chainlinkではなく各トークンの発行者(事業者)が実装します.別のブロックチェーンにトークンを転送するにあたって,送信元・先となる各ブロックチェーン上でトークンの扱い方を決める必要がありますが,CCIPは複数の方式に対応しています.
- Burn and Mint
- Lock and Mint
- Lock and Release (Unlock)
メッセージ転送の流れ
送信元チェーンでの処理
メッセージの生成
メッセージには,受信者(EOAまたはコントラクト),送信したいデータ,送信したいトークン,手数料トークンなどが含まれます.送信したいトークンは,必須ではありません.
メッセージの転送
送信者はルーターを介してオンランプ(コントラクト)にメッセージを送ります.ここでは,メッセージの内容の検証と,手数料トークンの確認が行われます.
メッセージの検証では,データ長やガスリミット5などのパラメーターに誤りがないかを確認します.トークンを転送する場合は,各トークンの転送量に基づいてトークンプールにトークンを転送し,Lock/Burnなどの処理を行います.
手数料トークンにはネイティブトークンだけでなく,それ以外のトークンも利用できます.ネイティブトークン以外を利用するときは,送信者が事前にその利用を承認しておく必要があります.承認されていなかった場合は,オンランプがトークンを管理するコントラクトに照会した際,処理失敗という結果が返ってきます.
検証した結果,問題が生じていなければメッセージIDが送信者に返されます.また,オンランプはメッセージが転送された旨を示す CCIPMessageSent イベントを発します.
このイベントによって,次に説明するCommit DONはメッセージが送信されたことを検出できます.
その他に,転送前に送信先チェーンが正常に動作しているかを確認する機能もあります.
この機能はRMN6と呼ばれ,セキュリティリスクが高い場合にトランザクションの処理を一時停止(cursed)できるようになっています.
DONでの処理
コミットフェーズ
Commit DONと呼ばれるノード群が以下の処理を行います.
- 複数のメッセージに対するマークルルートを含む,コミットレポート(OCRレポート)を生成
- リーダーノードが(DON内の)その他のノードにコミットレポートを共有
- 共有されたノードはその内容の正しさを検証し,有効性を判断
- 有効と判断されたメッセージからなる,最終的なコミットレポートを送信先チェーン(のオフランプ)に転送
実行フェーズ
Executing DONと呼ばれるノード群が以下の処理を行います.名称上はCommit DONと使い分けられていますが,一つのChainlinkノードがコミットと実行の両方の役割を担うこともあります.
- 実行前(保留中)のコミットレポートを取得
- 保留中のレポートに含むメッセージを参照し,送信元チェーン上のイベントを検証
- 検証完了後,ガスリミットなどを考慮しながらメッセージの実行順などをバッチ単位で最適化
- 送信先チェーンでメッセージを実行(以下に詳細を記載)
送信先チェーンでの処理
送信先チェーン上のオフランプ(コントラクト)は,Commit DONから送られたコミットレポートを受け取り,有効性を確認して CommitReportAccepted イベントを発します.
次に,Executing DONがこのイベントを検出し,コミットレポートに紐づくメッセージを収集して各メッセージのマークルプルーフを計算,そのレポートをオフランプに送ります.
オフランプは上記のマークルプルーフを用いて,コミットレポート内のマークルルートを検証します.
メッセージにトークンを含む場合は,トークンプールを用いてトークンをRelease/Mintします.また,バイトコードを含む場合は,その内容を受信者(コントラクト)に送信します.
ここまでの処理の流れを簡単に図示すると,以下のようになります.
おわりに
本記事では,オラクルの仕組みを応用して相互運用性を実現する技術であるChainlink CCIPについて概説しました.
相互運用にあたって課題とされる,オフチェーンの信頼性に長く向き合ってきたプロジェクトだからこその解決策だと感じます.
参考資料
- Chainlink CCIP - Cross-Chain Interoperability Protocol | Chainlink Documentation
- GitHub - smartcontractkit/chainlink-ccip
- Chainlink: CCIP Router | Address: 0x80226fc0...ba1146f7d | Etherscan
- Address: 0x23a5084F...4f6AD9DeE | Etherscan Sepolia