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