Base から Chiliz Chain へ bridge する
LayerZero v2 を使用して Base に OFT Adapter を、Chiliz Chain に Native OFT をデプロイし、既存の ERC-20 トークンを Base から Chiliz Chain へ bridge します。
既存のトークンを Base から Chiliz Chain へ bridge するには、2 つの別々の smart contract を記述して deploy する必要があります。トークンがすでに存在するチェーン(Base)上の OFT Adapter と、宛先チェーン(Chiliz Chain)上の Native OFT です。
LayerZero は OFT contract 用の独自の QuickStart を提供しているほか、Base から別の EVM チェーンへ mint する方法 を学べるチュートリアルも提供しています(Chiliz Chain など)。そのチュートリアルでは対象チェーンとして Optimism を使用していますが、Chiliz Chain の詳細 に置き換えることができます。
前提条件
このガイドには以下が必要です。
Base 上の ERC20 トークン contract アドレス。
Base と Chiliz Chain の両方で動作するように設定された Web3 ウォレット(MetaMask など)。
contract の deploy と、メッセージ送信のための gas 手数料を支払うのに十分な gas トークンを各チェーン上に保有していること。
Base 上: ETH トークン。
Chiliz Chain 上: CHZ トークン。
開発環境として Hardhat と Node/npx を使用します。
ステップ 1: Contract の開発
Base 上の OFTAdapter の準備
OFTAdapter の準備これは準備ステップです。すぐに deploy しないでください! deploy はステップ 3 で行います。
OFTAdapter contract は、既存のトークンのためのロックボックスとして機能します。ユーザーがトークンを Base から bridge して移動すると、この contract が元の ERC20 トークンをロックします。
contracts フォルダに BaseTokenAdapter.sol という名前の新しいファイルを作成します。
ご覧のとおり、この contract は LayerZero OFT Adapter contract を拡張しているほか、管理用のキーを付与するための標準的な Ownable.sol contract も拡張しています。あなただけが安全にチェーン同士を接続(wire)できるようにするため、両方が必要です。
これを Base Mainnet に deploy する際には、既存のトークンの contract アドレスを _token として、Base Endpoint V2 アドレス(0x1a44076050125825900e736c501f859c50fE728c)を _lzEndpoint として渡す必要があります。
Chiliz Chain で利用可能なすべての endpoint はこちらで確認できます。
Chiliz Chain 上の OFT の準備
OFT の準備トークンはまだ Chiliz Chain 上にネイティブに存在しないため、標準的な OFT contract を deploy する必要があります。この contract は、Base に deploy された OFT Adapter から有効なメッセージを受信したときに新しいトークンを mint し、ユーザーが bridge して戻すときにそれらを burn する権限を持ちます。
contracts フォルダに ChilizTokenOFT.sol という名前の新しいファイルを作成します。
ご覧のとおり、この contract は LayerZero OFT contract を拡張しているほか、上記と同じ理由で標準的な Ownable.sol contract も拡張しています。
これを Chiliz Chain に deploy する際には、ユーザーの混乱を避けるため、_name と _symbol が Base 上の元のトークンと一致していることを確認してください。Chiliz Chain Endpoint V2 アドレス(0x6F475642a6e85809B1c36Fa62763669b1b48DD5B)を _lzEndpoint として渡します。
Chiliz Chain で利用可能なすべての endpoint はこちらで確認できます。
ステップ 2: LayerZero の設定
contract の準備ができたら、それらがどのように接続されるかを LayerZero ツールに伝える必要があります。これは Hardhat プロジェクトのルートにある layerzero.config.ts ファイルを使用して行います。
この設定ファイルは、クロスチェーンアーキテクチャの設計図として機能します。deploy した smart contract をそれぞれの LayerZero Endpoint ID(EID)にマッピングし、それらの間のパスウェイ(接続)を定義します。
Simple Config Generator は、双方向の wiring を自動化し、推奨されるセキュリティ設定を裏側で適用するため、wiring 設定を生成する推奨される方法です。
Hardhat プロジェクトのルートに layerzero.config.ts ファイルを作成または更新します。
[EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS] という配列は、Chiliz へメッセージを配信する際に 200,000 gas ユニットを、Base へメッセージを戻す際にも同じく 200,000 gas ユニットを enforce するよう LayerZero Executor に指示します。
ステップ 3: Deploy ワークフロー
contract が記述され、layerzero.config.ts が準備できたら、それぞれのネットワークに contract を deploy する時です。LayerZero V2 ツールボックスは、deploy を効率的に管理するために hardhat-deploy プラグインに依存しています。
プロジェクトの deploy/ ディレクトリに 2 つの deploy スクリプトを作成する必要があります。1 つは Base Mainnet 用、もう 1 つは Chiliz Chain Mainnet 用です。
Base Adapter の Deploy スクリプト
deploy/ フォルダに 01_deploy_base_adapter.ts という名前のファイルを作成します。このスクリプトは、既存のトークンアドレスと Base Endpoint V2 アドレスを constructor に渡します。
Chiliz Chain OFT の Deploy スクリプト
deploy/ フォルダに 02_deploy_chiliz_oft.ts という名前の 2 つ目のファイルを作成します。このスクリプトは Chiliz Chain 上で新しい Native OFT を初期化します。
Deploy の実行
hardhat.config.ts に Base と Chiliz Chain の両方の RPC URL と秘密鍵が正しく設定されていることを確認してください。
contract を deploy するには、ターミナルで以下のコマンドを実行します。
deploy が完了すると、Hardhat は contract アドレスを deployments/ フォルダに保存します。次のステップで wiring コマンドを実行する際、LayerZero ツールはこれらのアドレスを自動的に読み取ります。
ステップ 4: Wiring と Peering
この段階では、BaseTokenAdapter と ChilizTokenOFT の contract は各チェーン上に deploy されていますが、完全に分離されています。
Chiliz Chain の contract がトークンを mint するよう指示するメッセージを受信した場合、そのメッセージが悪意のあるアクターではなく、本当に あなたの Base 上の Adapter から発信されたものであることを知る必要があります。
contract を peer として暗号学的に「wiring」することで、この信頼を確立する必要があります。
これは wire コマンドを実行することで行われ、Chiliz と Base の両方でトランザクションを生成して実行します。
裏側では何が起きているのか?
完全な LayerZero V2 パスウェイ設定では、実際には各チェーンで 6 つのトランザクションが必要です。
setSendLibrary: メッセージの送信を担当する LayerZero MessageLib を割り当てます(例: V2 Send Library を使用するように設定)。setReceiveLibrary: メッセージの受信を担当する MessageLib を割り当てます(gracePeriodを含み、通常は0に設定されます)。setConfig(Send Library): 送信メッセージ用の特定の Decentralized Verifier Networks(DVN)と Executor を設定します。setConfig(Receive Library): 受信メッセージの検証に必要な特定の DVN を設定します。setEnforcedOptions: 必要な実行 gas limit を設定します。ユーザーが Base からメッセージを送信すると、宛先の gas を前払いします。enforced options を設定することで、LayerZero Executor が Chiliz Chain 上でトランザクションを正常に処理するのに十分な gas を支払うことが保証されます。setPeer: 宛先 Endpoint ID(EID)を信頼できる contract アドレスにリンクします。Base contract に Chiliz Chain contract を信頼するように、そして Chiliz Chain contract に Base contract を信頼するように伝える必要があります。
Wire タスクの実行
ターミナルで以下のコマンドを実行します。
ツールチェーンは必要なパラメータを自動的に計算し、実行しようとしているトランザクションのテーブルを表示し、deployer ウォレットを使用して Chiliz と Base に送信します。
両方のネットワークでトランザクションが確認されると、トークン bridge は正式に稼働し、完全に設定された状態になります! Base Adapter は Chiliz Chain に mint コマンドを送信する権限を持ち、Chiliz Chain は Base にロック解除コマンドを送り返す権限を持つようになりました。
ステップ 5: 運用とテスト
contract が deploy され、安全に wiring されたことで、トークンは omnichain になりました。最後のステップは、Base Mainnet から Chiliz Chain Mainnet へのクロスチェーン転送を実行することです。
1) クロスチェーン転送の実行
LayerZero V2 ツールボックスは、ターミナルから直接 OFT 転送をテストするための組み込みの Hardhat タスクを提供しています。このコマンドは、クロスチェーン gas 手数料を見積もり、ソースチェーン(Base)のネイティブ gas トークンである $ETH でウォレットに課金し、転送を開始します。
以下のコマンドを実行します。
このコマンドが行うこと:
設定内で Base Mainnet(
30184)と Chiliz Mainnet(30409)を検索します。LayerZero Executor が必要とするクロスチェーン手数料を見積もります。
Base Adapter の
send()関数を呼び出します。Adapter は 10 トークンをロックし、LayerZero Endpoint にパケットを発行します。
2) LayerZero Scan でのパケットの追跡
クロスチェーントランザクションは非同期です。Chiliz トランザクションは数秒で確認されますが、メッセージはまだ Base 上で検証され実行される必要があります。
このプロセスをリアルタイムで追跡するには、CLI 出力に表示される LayerZero Scan リンクをクリックします。
このツールについて詳しくはこちらをご覧ください。
Gas Limit の設定
gas limit の設定は非常に重要です。設定を怠ると、クロスチェーンメッセージが宛先ネットワークで失敗する可能性があるためです。
ユーザーがトークンを Base から Chiliz Chain へ bridge すると、Base 上の単一のトランザクションで 両方 のチェーンの gas 手数料を($ETH を使用して)前払いします。LayerZero はその手数料の一部を使用して、Chiliz Chain 上で mint トランザクションを実行するために実際に必要な ETH gas を支払います。
LayerZero が宛先チェーン上で lzReceive 関数を正常に処理するのに十分な gas を確保するため、Enforced Options を設定する必要があります。これらが設定されていない場合、トランザクションは「Out of Gas」エラーにより宛先チェーンで revert する可能性があります。
Options の設定
このオプションは layerzero.config.ts ファイルで設定します。connections 配列を更新して、各パスウェイに enforcedOptions ブロックを含めます。
パラメータの説明:
msgType: 1: 標準的なトークン転送を表します。msgType: 2は「composed」呼び出し(例: トークンを bridge して、ワンクリックで即座に staking する)に使用されます。optionType: 1: Executor に単にlzReceive関数を実行するよう指示します。gas: 200000: 標準的な OFT の mint とロック解除に対する安全なベースライン gas limit です。deploy した contract の具体的な gas 消費量に基づいて調整できます。
すでにチェーンを wiring した後でこのオプションを設定した場合は、同じコマンドを使用して、オプションを適用した状態で再 wiring できます。
ツールは変更を自動的に検出し、Base と Chiliz の両方の contract に setEnforcedOptions() トランザクションを送信します。これにより、ユーザーが bridge をトリガーするたびに、contract は宛先チェーン上で少なくとも 200,000 gas ユニットを支払うようユーザーに義務付け、信頼性の高い配信を保証します。
最終更新
役に立ちましたか?