部署 SVM Warp 路由
结果
您将为您选择的资产在两个 SVM 链之间部署一个 Warp 路由,并且有一个现有的 Hyperlane 核心部署。在撰写本文时,支持的 SVM 链是 Solana 和 Eclipse,但您可以在 这里 找到最新的列表(所有链目录名称都有一个 core 子目录)。
如果您希望您的 SVM rollup 被支持为核心 Hyperlane 部署,或者希望设置 EVM 到 SVM 的 Warp 路由,请 联系我们!
Warp 路由类型
使用的代币类型决定了 Warp 路由类型,因此了解可用的不同 Warp 路由合约非常重要:
- 原生: 处理原生 Gas 代币的转移(例如 Solana 上的 SOL,Eclipse 上的 ETH)。
- 抵押品: 处理现有的 Token-2022 或 Token 代币的转移(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 路由程序
-
安装
solana-cli 1.14.20以构建 Warp 路由程序。请注意,您 必须 使用此版本,否则部署可能会失败。sh -c "$(curl -sSfL https://release.solana.com/v1.14.20/install)" -
git clone https://github.com/hyperlane-xyz/hyperlane-monorepo
cd hyperlane-monorepo/rust/sealevel/programs -
在您的机器上构建 Warp 路由程序
-
构建 Token 程序:
cd hyperlane-sealevel-token
cargo build-sbf -
构建 Token Collateral 程序:
cd hyperlane-sealevel-token-collateral
cargo build-sbf -
构建 Token Native 程序:
cd hyperlane-sealevel-token-native
cargo build-sbf
这些步骤 编译 Solana 程序,这是部署所需的。 要验证构建输出,请检查
hyperlane-monorepo/rust/sealevel/target/deploy目录中的.so文件。 -
第 2 步:准备部署
-
要部署合约,请安装
solana-cli 1.18.18。请注意,您 必须 使用此版本,否则部署可能会失败。sh -c "$(curl -sSfL https://release.solana.com/v1.18.18/install)"安装后,您可以通过以下命令验证版本:
solana --version -
创建一个 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 路由
-
在
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。 -
在您刚创建的目录中,创建一个名为
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>"
}
} -
(可选)如果您的 Warp 路由创建了合成代币,您可以向
hyperlane-registry提交 PR,以与此代币关联元数据(示例 PR 在这里)。hyperlane-registry还为您的 Warp 路由在 Hyperlane 生态系统中提供可见性。
第 4 步:部署 Warp 路由
-
在部署到的两个网络上为新的密钥对提供资金。
-
公钥在 SVM 网络之间应该是相同的,但请通过加载私钥到每个链推荐的钱包中进行双重检查。
-
资金应足以覆盖与 Warp 路由相关的所有账户的租金,支付交易费用,并为 ATA 付款账户提供资金(有关更多信 息,请参见下文)。作为参考,从一个 Hyperlane Warp 路由账户观察到的租金为
2.35 SOL(在 Solana 上)和0.025 ETH(在 Eclipse 上),因此最好为密钥提供至少5 SOL/0.05 ETH的资金。
-
-
使用
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.001ETH 和0.001SOL,这对于初始部署是足够的。ATA 付款人可以随时补充,因此选择一个小值是可以的。作为参考,每个 Warp 路由转移的 ATA 付款人费用为0.000000001 SOL(在 Solana 上)和0.000021 ETH(在 Eclipse 上)在目标链上。
信息故障排除提示
-
由于网络拥堵和程序大小,脚本不太可能第一次就成功运行,但脚本应该是幂等的,并跳过已经部署/初始化的合约。
-
错误如
Error: 11 write transactions failed或Error: 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
- CLI 标志概述:
与 Warp 路由交互
- 查询 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>
- 通过 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
- 验证目标链上的余额
通过查询铸币账户,查看目标链上接收者的余额:
spl-token balance --owner ./warp-route-deployer-key.json \
-u <DESTINATION_CHAIN_RPC_URL> <MINT_ACCOUNT_ADDRESS>
- 此处的最后一个参数是 SPL 代币 ID。因此,如果这是您想要检查余额的合成 Warp 路由,您需要使用之前查询中获得的铸币地址。
- 您还可以在浏览器中查看接收者账户的最后交易。
- 探索其他 CLI 命令
本指南大量使用了来自 hyperlane-monorepo 的 hyperlane-sealevel-client CLI。您可能会发现其各种命令对于配置 Warp 路由、进行状态查询、发送转移等非常有用。查看它提供的其他实用工具,特别是 token 子命令下的那些。
# 从 `rust/sealevel/client` 运行
cargo run -- --help
对于生产部署,我们强烈建议避免使用本指南中使用的热密钥。相反,将所有权转移到 多重签名设置,例如 Squads,以增强安全性。