部署 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.001
ETH 和0.001
SOL,这对于初始部署是足够的。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,以增强安全性。