跳到主要内容

部署 SVM Warp 路由

结果

您将为您选择的资产在两个 SVM 链之间部署一个 Warp 路由,并且有一个现有的 Hyperlane 核心部署。在撰写本文时,支持的 SVM 链是 Solana 和 Eclipse,但您可以在 这里 找到最新的列表(所有链目录名称都有一个 core 子目录)。

信息

如果您希望您的 SVM rollup 被支持为核心 Hyperlane 部署,或者希望设置 EVM 到 SVM 的 Warp 路由,请 联系我们!

Warp 路由类型

使用的代币类型决定了 Warp 路由类型,因此了解可用的不同 Warp 路由合约非常重要:

  • 原生: 处理原生 Gas 代币的转移(例如 Solana 上的 SOL,Eclipse 上的 ETH)。
  • 抵押品: 处理现有的 Token-2022Token 代币的转移(SVM 上的 ERC20 等价物)。
  • 合成: 处理合成代币,这些代币在通过 Warp 路由转移时被铸造和销毁,以表示来自其源链的代币。在这种情况下,本指南中的工具将部署一个新的 Token-2022 代币,其权限设置为部署者密钥。

以下是常见的 Warp 路由设置(您可以在 这里 找到更多详细信息):

  • 原生到合成: 在源链上锁定原生代币,以在目标链上铸造合成代币。转移回时,合成代币被销毁。这是 Solana 和 Eclipse 之间的 SOL Warp 路由的一个示例。
  • 抵押品到合成: 在源链上锁定抵押代币,以在目标链上铸造合成代币。转移回时,合成代币被销毁。这是 Solana 和 Eclipse 之间的 USDC Warp 路由的一个示例。
  • 其他: 原生到原生(例如 Optimism 和 Arbitrum 之间的 ETH),以及 抵押品到抵押品,如果代币在源链和目标链上都已存在,也可以实现。在这种情况下,重新平衡流动性是一个重要的考虑因素。

开始之前

部署 Warp 路由需要有一个核心 Hyperlane 部署,该部署与 Hyperlane 生态系统的其余部分连接(即,积极中继和保护)。本指南中使用的核心 Hyperlane 部署是 Solana (核心工件) 和 Eclipse (核心工件)。您可能需要在整个指南中参考这些核心工件。

演练:部署 Sealevel Warp 路由

第 1 步:构建 Warp 路由程序

  1. 安装 solana-cli 1.14.20 以构建 Warp 路由程序。请注意,您 必须 使用此版本,否则部署可能会失败。

    sh -c "$(curl -sSfL https://release.solana.com/v1.14.20/install)"
  2. 克隆 hyperlane-monorepo

    git clone https://github.com/hyperlane-xyz/hyperlane-monorepo
    cd hyperlane-monorepo/rust/sealevel/programs
  3. 在您的机器上构建 Warp 路由程序

    1. 构建 Token 程序:

      cd hyperlane-sealevel-token
      cargo build-sbf
    2. 构建 Token Collateral 程序:

      cd hyperlane-sealevel-token-collateral
      cargo build-sbf
    3. 构建 Token Native 程序:

      cd hyperlane-sealevel-token-native
      cargo build-sbf

    这些步骤 编译 Solana 程序,这是部署所需的。 要验证构建输出,请检查 hyperlane-monorepo/rust/sealevel/target/deploy 目录中的 .so 文件。

第 2 步:准备部署

  1. 要部署合约,请安装 solana-cli 1.18.18。请注意,您 必须 使用此版本,否则部署可能会失败。

    sh -c "$(curl -sSfL https://release.solana.com/v1.18.18/install)"

    安装后,您可以通过以下命令验证版本:

    solana --version
  2. 创建一个 Solana 密钥对。此密钥用于支付部署费用,并将是已部署程序的所有者。如果您愿意,可以使用现有的已资助密钥。

    solana-keygen new --outfile ./warp-route-deployer-key.json
    • 要读取您刚创建的公钥:

      solana-keygen pubkey ./warp-route-deployer-key.json
    • 检查余额:

      solana balance --keypair ./warp-route-deployer-key.json

第 3 步:配置 Warp 路由

  1. rust/sealevel/environments/mainnet3/warp-routes 中为您的 Warp 路由创建一个目录,名称为您希望您的 Warp 路由部署的名称。

    mkdir -p rust/sealevel/environments/mainnet3/warp-routes/<YOUR-WARP-ROUTE-NAME>

    例如,现有的 Solana 和 Eclipse 之间的 SOL Warp 路由位于 rust/sealevel/environments/mainnet3/warp-routes/eclipsesol

  2. 在您刚创建的目录中,创建一个名为 token-config.json 的配置文件。

    根据 TokenConfig Rust 结构的 serde_json 序列化配置您的 Warp 路由参数。要为 interchainGasPaymaster 设置的值,可以在 核心部署工件 中找到。

    下面的示例显示了一个测试网 原生到合成 Warp 路由,它将 SOL 从 Solana 转移并在 Eclipse 上铸造合成 SOL。您还可以查看 此配置 的生产 SOL Warp 路由。

    {
    "solanatestnet": {
    "type": "native",
    "decimals": 9,
    "interchainGasPaymaster": "<from core program addresses, choose the overhead igp>"
    },
    "eclipsetestnet": {
    "type": "synthetic",
    "decimals": 9,
    "name": "Solana (testnet)",
    "symbol": "SOL",
    "uri": "<permalink to the metadata.json file you merged into hyperlane-registry>"
    "interchainGasPaymaster": "<from core program addresses, choose the overhead igp>"
    }
    }
  3. (可选)如果您的 Warp 路由创建了合成代币,您可以向 hyperlane-registry 提交 PR,以与此代币关联元数据(示例 PR 在这里)。hyperlane-registry 还为您的 Warp 路由在 Hyperlane 生态系统中提供可见性。

第 4 步:部署 Warp 路由

  1. 在部署到的两个网络上为新的密钥对提供资金。

    • 公钥在 SVM 网络之间应该是相同的,但请通过加载私钥到每个链推荐的钱包中进行双重检查。

    • 资金应足以覆盖与 Warp 路由相关的所有账户的租金,支付交易费用,并为 ATA 付款账户提供资金(有关更多信息,请参见下文)。作为参考,从一个 Hyperlane Warp 路由账户观察到的租金为 2.35 SOL(在 Solana 上)和 0.025 ETH(在 Eclipse 上),因此最好为密钥提供至少 5 SOL / 0.05 ETH 的资金。

  2. 使用 warp-route deploy 子命令从 rust/sealevel/client 目录部署 Warp 路由:

    示例用法:

    cargo run -- -k ./warp-route-deployer-key.json \
    warp-route deploy \
    --warp-route-name <YOUR-WARP-ROUTE-NAME> \
    --environment mainnet3 \
    --environments-dir ../environments \
    --built-so-dir ../target/deploy \
    --token-config-file ../environments/mainnet3/warp-routes/<YOUR-WARP-ROUTE-NAME>/token-config.json \
    --chain-config-file ../environments/mainnet3/chain-config.json \
    --ata-payer-funding-amount 10000000
    • CLI 标志概述:
      • --warp-route-name: 应与之前为 Warp 路由选择的目录名称匹配
      • --environment: 保持为 mainnet3
      • --environments-dir ../environments: 保持为 ../environments
      • --built-so-dir: 保持为 ../../target/deploy,因为它指向 Warp 路由程序的编译输出目录
      • --token-config-file: 指向之前创建的 token-config.json 文件
      • --chain-config-file: 保持为 ../environments/mainnet3/chain-config.json,因为该文件已预填充所有 Hyperlane 支持的链的链设置
      • --ata-payer-funding-amount: 此标志指定在部署发生的两个链上为 Warp 路由 ATA 付款账户提供多少资金。它以最低货币面额表示,这意味着它在 Solana 上被解释为 Lamports,在 Eclipse 上被解释为 Gwei(因为它使用 ETH 作为其原生货币)。在下面的命令中,值 10000000 相当于 0.001 ETH 和 0.001 SOL,这对于初始部署是足够的。ATA 付款人可以随时补充,因此选择一个小值是可以的。作为参考,每个 Warp 路由转移的 ATA 付款人费用为 0.000000001 SOL(在 Solana 上)和 0.000021 ETH(在 Eclipse 上)在目标链上。

    信息

    请注意,由于我们的目标是尽快使这些工具对开发人员可用,因此它的可靠性可能不如我们希望的那样。如果您遇到问题,请通过 GitHub 问题 或通过 Discorddevelopers 频道与我们联系。

    故障排除提示

    • 由于网络拥堵和程序大小,脚本不太可能第一次就成功运行,但脚本应该是幂等的,并跳过已经部署/初始化的合约。

      • 错误如 Error: 11 write transactions failedError: Custom: Invalid blockhash 可以通过重新运行命令进行重试。如果可重试的错误持续存在,请考虑在 这里 增加计算单位价格。

      • 对于其他类型的错误,您可能需要关闭缓冲区和程序的部署密钥,并从头开始重新部署所有内容。要逐个显示缓冲区和程序并关闭它们,请按照以下命令操作。关闭程序也有助于恢复其租金存款。

        solana program show --programs --keypair ./warp-route-deployer-key.json --url <CHAIN_RPC_URL>

        solana program show --buffers --keypair ./warp-route-deployer-key.json --url <CHAIN_RPC_URL>

        # 关闭程序账户时需要添加 `--bypass-warning` 标志(与关闭缓冲区相对)
        solana program close <YOUR_PROGRAM_ADDRESS> --url <CHAIN_RPC_URL>
    • 为了增加部署成功的几率,您可以在传递给脚本的 --chain-config-file 中设置私有 RPC URL。(例如,在 solanamainnet.rpcUrls.http 中)

    • 如果部署合成代币,下面的命令将创建一个新的代币铸造,并使用元数据代币扩展设置代币名称、符号和元数据 json,使用 --token-config-file 文件中的字段,运行 warp-route deploy

      # 从 `rust/sealevel/client` 运行
      cargo run -- -k ./warp-route-deployer-key.json warp-route deploy \
      --warp-route-name eclipsesol \
      --environment mainnet3 \
      --environments-dir ../environments \
      --built-so-dir ../../target/deploy \
      --token-config-file ../environments/mainnet3/warp-routes/eclipsesol/token-config.json \
      --chain-config-file ../environments/mainnet3/chain-config.json \
      --ata-payer-funding-amount 10000000

与 Warp 路由交互

  1. 查询 Warp 路由程序

您可以使用以下命令检查程序详细信息,如铸币账户、铸币权限和 ATA 付款账户:

# 从 `rust/sealevel/client` 运行
cargo run -- -k ./warp-route-deployer-key.json \
-u <CHAIN_RPC_URL> token query \
--program-id <PROGRAM_ID> <TOKEN_TYPE>

替换:

  • <CHAIN_RPC_URL>: 例如,https://api.devnet.solana.com
  • <PROGRAM_ID>: program-ids.json 中的 base58 地址(位于您的 warp-route 目录中)。
  • <TOKEN_TYPE>: native|synthetic|collateral

如果部署了合成代币,请查询铸币权限账户以检查元数据:

solana account <MINT_AUTHORITY> --url <CHAIN_RPC_URL>
  1. 通过 Warp 路由转移代币

要测试跨链代币转移,请运行以下命令:

# 从 `rust/sealevel/client` 运行
cargo run -- -u <ORIGIN_CHAIN_RPC_URL> \
-k ./warp-route-deployer-key.json \
token transfer-remote ./warp-route-deployer-key.json \
<AMOUNT_IN_LOWEST_DENOM> <DESTINATION_CHAIN_DOMAIN_ID> <RECIPIENT_ADDRESS> \
<WARP_TOKEN_TYPE_ON_ORIGIN_CHAIN> --program-id <PROGRAM_ID>
  • <DESTINATION_CHAIN_DOMAIN_ID>: 您需要发送到的链的域 ID,您可以在 hyperlane-registry 的链的 metadata.yaml 条目中找到。
  • <PROGRAM_ID>: program-ids.json 中的 base58 地址(位于您的 warp-route 目录中)。
  • <WARP_TOKEN_TYPE_ON_ORIGIN_CHAIN>: 源链上的代币类型,选项为:native|synthetic|collateral
  1. 验证目标链上的余额

通过查询铸币账户,查看目标链上接收者的余额:

spl-token balance --owner ./warp-route-deployer-key.json \
-u <DESTINATION_CHAIN_RPC_URL> <MINT_ACCOUNT_ADDRESS>
  • 此处的最后一个参数是 SPL 代币 ID。因此,如果这是您想要检查余额的合成 Warp 路由,您需要使用之前查询中获得的铸币地址。
  • 您还可以在浏览器中查看接收者账户的最后交易。
  1. 探索其他 CLI 命令

本指南大量使用了来自 hyperlane-monorepohyperlane-sealevel-client CLI。您可能会发现其各种命令对于配置 Warp 路由、进行状态查询、发送转移等非常有用。查看它提供的其他实用工具,特别是 token 子命令下的那些。

# 从 `rust/sealevel/client` 运行
cargo run -- --help
注意

对于生产部署,我们强烈建议避免使用本指南中使用的热密钥。相反,将所有权转移到 多重签名设置,例如 Squads,以增强安全性。