EthereumからInternet Computerへのクロスチェーン通信を、オンチェーンのライトクライアントを使用して確保
インターネットコンピュータ(ICP)は、分散型アプリケーションとサービスのハブとなることを目指して進化を続けています。マルチチェーンの世界において、ICPに固有のチェーンキーシグネチャは、キャニスタースマートコントラクトがトランザクションに署名することを可能にし、HTTPSアウトコールを通じて他のチェーンからステートを取得できるようにします。後者のセキュリティを向上させるために、高い価値を持つアプリケーション向けに、EigerチームがEthereumのライトクライアントをICPに移植する作業に取り組んでいます。
「Light Client」と「Helios」とは?
Light Client (ライトクライアント)は、ブロックチェーンノードが他のブロックチェーンとやり取りするための特殊なソフトウェアであり、全体のブロックチェーン履歴をダウンロードして検証せずに済みます。代わりに、暗号学的な証明とデータの制限されたサブセットに頼り、トランザクションを検証し関連情報にアクセスします。ライトクライアントは効率的で速いことが設計されており、インターネットコンピュータのようなリソースに制約のある環境に適しています。
Heliosは、Rustで実装された新興のEthereumライトクライアントで、この統合の中心です。これは、Internet Computerのキャニスタースマートコントラクトに統合できるソフトウェアコンポーネントであり、Ethereumブロックチェーンとのやり取りを可能にします。Heliosは、Merkleプルーフとシンクコミッティーを活用し、効率的にEthereumのステートとイベントを検証し、完全なブロックチェーンの検証が不要となります。この軽量なアプローチは、インターネットコンピュータのアーキテクチャと目標と完璧に合致しています。
ICP上でなぜライトクライアントが必要なのか?
ICPは、Ethereumネットワークとのネイティブな統合を目指して、ICPノードと同じ場所でEthereumノードを実行します。ただし、現在の状態では、この統合はInfuraやAlchemyなどの1つまたは複数のRPC APIプロバイダへのJSON-RPC呼び出しに基づいています。Ethereumライトクライアントを追加することで、この統合のセキュリティが向上します。なぜなら、RPCプロバイダから取得したすべてのデータが暗号的に検証されるからです。
ICP上でのHeliosのポーティング体験
ICPは強力なWASMベースのコンピューティングプラットフォームを提供しています。これにより、開発者はさまざまなプログラミング言語でスマートコントラクトを記述でき、Rustで実装されたHeliosなどのアプリケーションをゼロから書き直すことなく移植することが可能です。
それにもかかわらず、ICPへのHeliosのポーティングには、互換性と効率を確保するためにいくつかの重要な変更と最適化が必要でした。いくつかの注目すべき変更には以下が含まれます:
- HeliosをRustの安定したツールチェーンと互換性があるようにアップグレード
- ブラウザ関連のWebAssembly(WASM)コンポーネントへの依存を削除
- wasmと互換性のないTokio関連のコードを削除
- ethers-coreライブラリを活用し、ethers-providersを削除
- wasmを対象とする場合、reqwestをHTTPSアウトコールで置き換え
これらの変更は、HeliosをICPの固有の要件に適応させ、それをInternet Computer上のEthereumキャニスターに適したコンポーネントにしました。
使い方
ICP上でEthereumブロックチェーンデータにアクセスするためにEthereumキャニスターを使用するには、以下の手順に従うことができます:
Ethereumキャニスターの実行と使用:
dfx start — clean — background — artificial-delay 100
# deploy
dfx deploy
# start it
dfx canister call ethereum_canister setup ‘record {
network = variant { Mainnet };
execution_rpc_url = “https://ethereum.publicnode.com";
consensus_rpc_url = “https://www.lightclientdata.org";
}’
# utilize it
dfx canister call ethereum_canister erc20_balance_of ‘record {
contract = “0xdAC17F958D2ee523a2206206994597C13D831ec7”;
account = “0xF977814e90dA44bFA03b6295A0616a897441aceC”;
}’
(2_100_000_000_000_000 : nat) # canister’s output
エンドツーエンドのキャニスターテストの実行:
dfx start — clean — background — artificial-delay 100
cargo test — target x86_64-unknown-linux-gnu
# or using nextest
cargo nextest run — target x86_64-unknown-linux-gnu
私たちの目標は、EthereumキャニスターがEthereumデータと対話するための包括的なAPIを提供することです。利用可能な関数やその使用方法の詳細については、candid.didファイル内のAPI定義を参照してください。
まとめ
インターネットコンピュータ上でのEthereumライトクライアント、特にHeliosの実装は、キャニスター、アプリ、サービス、およびスマートコントラクトが独立してEthereumデータにアクセスできるようにすることで、分散型アプリケーションとサービスを向上させることを目指しています。これにより、Ethereumからの安全なデータ取得が確保されます。また、これはインターネットコンピュータとその強力なコンピューティング環境のユニークな機能を示し、他の分散型プラットフォームと比較できないアプリケーションの実行が可能です。
Internet Computerの詳細はこちら: internetcomputer.org
Internet Computer の 公式 Twitter: @dfinity
Internet Computer の 公認 日本語翻訳 Twitter: @ICP_JPCM