跳到主要内容

部署 EVM <-> SVM Warp 路由

前提条件

确保你已安装并配置以下内容:

  • Hyperlane 代码仓库
  • Rust(最新稳定版本)
  • Yarn 和 Node.js(最新稳定版本)
  • Solana CLI 工具

步骤详解

步骤 1:创建 Warp 路由目录

  1. ./rust/sealevel/environments/${environment} 中,创建一个名为 warp-routes 的目录

  2. warp-routes 内,为你的 Warp 路由部署创建一个新目录,例如 environments/mainnet3/warp-routes/pzeth

  3. 可选: 如果你想,可以向 hyperlane-registry 提交 PR,添加与 Warp 路由中的合成代币相关的元数据。示例在此

    • 提示: 虽然不是关键,但对于 image 字段,尽量选择一个不太可能导致 URL 失效的源

步骤 2:在 SVM 端部署

  1. 从这里开始,要在 SVM 端部署,你也可以参考我们的官方指南获取提示:部署 SVM Warp 路由

  2. 为 SVM 配置创建 token-config.json,例如

    {
    "solana": {
    "type": "synthetic",
    "decimals": 9,
    "name": "Renzo Restaked LST",
    "symbol": "pzETH",
    "uri": "<https://raw.githubusercontent.com/hyperlane-xyz/hyperlane-registry/12660fd34d30e960a748d87408a8d88f634f7454/deployments/warp_routes/pzETH/ethereum-solana-metadata.json>",
    "interchainGasPaymaster": "5FG1TUuhXGKdMbbH8uHEnUghazD4aVfEPAgKLNGNx3SL",
    "remoteDecimals": 18
    }
    }
    • 通常 EVM 代币有 18 个小数位,这对 SVM 来说太大了。常见的模式是将它们作为 9 个小数位桥接到 SOL。这可以通过使用 remoteDecimals: 18 来实现。
  3. 运行部署命令:

    cargo run -- -k ~/solana-mainnet-deployer-keypair.json warp-route deploy \
    --warp-route-name pzeth \
    --environment mainnet3 \
    --environments-dir ../environments \
    --built-so-dir ../../target/deploy \
    --token-config-file ../environments/mainnet3/warp-routes/pzeth/token-config.json \
    --chain-config-file ../environments/mainnet3/chain-config.json \
    --ata-payer-funding-amount 50000000

步骤 3:在以太坊端部署

  1. 部署以太坊 Warp 路由合约,这也将根据 yaml 代币配置注册 SVM 路由器。

    1. 从这个 PR#4447 检出代码仓库分支

    2. 从项目根目录构建 TS 代码:yarn && yarn build

    3. 从源代码运行 CLI:yarn workspace @hyperlane-xyz/cli hyperlane

    4. 使用此模板和步骤创建 YAML Warp 路由配置文件:

      • 设置 interchainSecurityModule: "0x0000000000000000000000000000000000000000" 以使用目标链邮箱中设置的默认 ISM
      • gas 设置为你预期 SVM 消息传递交易所需的计算单元上限。例如,Hyperlane Warp 路由的 gas 设置为 300。这个值必须是上限 - 否则中继器将不会传递 Warp 路由传输消息,因为发送者支付的金额不足以传递它们。
      ethereum:
      interchainSecurityModule: "0x0000000000000000000000000000000000000000"
      isNft: false
      mailbox: "0xc005dc82818d67AF737725bD4bf75435d065D239"
      owner: "0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba"
      token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
      type: collateral
      gas: 300000
      eclipsemainnet:
      foreignDeployment: "D6k6T3G74ij6atCtBiWBs5TbFa1hFVcrFUSGZHuV7q3Z"
      mailbox: "EitxJuv2iBjsg2d7jVy2LDC1e2zBrx4GB5Y9h2Ko3A9Y"
      owner: "9bRSUPjfS3xS6n5EfkJzHFTRDa4AHLda8BU2pP4HoWnf"
      interchainSecurityModule: "0x0000000000000000000000000000000000000000"
      type: synthetic
      gas: 300000
    5. 使用 Hyperlane CLI 部署:

      • 运行部署命令,指向你的 YAML Warp 路由配置:yarn workspace @hyperlane-xyz/cli hyperlane warp deploy --config /path/to/config/warp-route-deployment.yaml
      • 命令会记录部署结果,并将其存储在你的文件系统注册表中(当前为 ~/.hyperlane)。
    6. 使用 Hyperlane CLI 确认部署:

      $ cast call 0x1D622da2ce4C4D9D4B0611718cb3BcDcAd008DD4 'routers(uint32)(bytes32)' $DESTINATION_DOMAIN --rpc-url $(rpc ethereum) 1399811149
      0xe9792265ec273ffc17731af890d3e9963e9d744e7b99f02491911ce1bb75b8cb

步骤 4:更新 SVM token-config.json

  1. 现在回到 Solana 工具,用外部部署更新 token-config.json

    ethereum 的字段应设置为 Warp 路由合约构件中的值。token 应设置为 collateralAddressOrDenom(被桥接的代币地址),而 foreignDeployment 应设置为 addressOrDenom(Warp 路由合约的地址,如 HypERC20Collateral)。

    {
    "solana": {
    "type": "synthetic",
    "decimals": 9,
    "name": "Renzo Restaked LST",
    "symbol": "pzETH",
    "uri": "<https://raw.githubusercontent.com/hyperlane-xyz/hyperlane-registry/12660fd34d30e960a748d87408a8d88f634f7454/deployments/warp_routes/pzETH/ethereum-solana-metadata.json>",
    "interchainGasPaymaster": "5FG1TUuhXGKdMbbH8uHEnUghazD4aVfEPAgKLNGNx3SL",
    "remoteDecimals": 18
    },
    "ethereum": {
    "type": "collateral",
    "decimals": 18,
    "token": "0x8c9532a60e0e7c6bbd2b2c1303f63ace1c3e9811",
    "foreignDeployment": "0x1D622da2ce4C4D9D4B0611718cb3BcDcAd008DD4"
    }
    }

步骤 5:部署

  1. 运行最终部署命令:
cargo run -- -k ~/solana-mainnet-deployer-keypair.json warp-route deploy  \
--warp-route-name pzeth \
--environment mainnet3 \
--environments-dir ../environments \
--built-so-dir ../../target/deploy \
--token-config-file ../environments/mainnet3/warp-routes/pzeth/token-config.json \
--chain-config-file ../environments/mainnet3/chain-config.json \
--ata-payer-funding-amount 50000000