部署 EVM <-> SVM Warp 路由
前提条件
确保你已安装并配置以下内容:
- Hyperlane 代码仓库
- Rust(最新稳定版本)
- Yarn 和 Node.js(最新稳定版本)
- Solana CLI 工具
步骤详解
步骤 1:创建 Warp 路由目录
-
在
./rust/sealevel/environments/${environment}
中,创建一个名为warp-routes
的目录 -
在
warp-routes
内,为你的 Warp 路由部署创建一个新目录,例如environments/mainnet3/warp-routes/pzeth
-
可选: 如果你想,可以向
hyperlane-registry
提交 PR,添加与 Warp 路由中的合成代币相关的元数据。示例在此。- 提示: 虽然不是关键,但对于
image
字段,尽量选择一个不太可能导致 URL 失效的源
- 提示: 虽然不是关键,但对于
步骤 2:在 SVM 端部署
-
从这里开始,要在 SVM 端部署,你也可以参考我们的官方指南获取提示:部署 SVM Warp 路由
-
为 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
来实现。
- 通常 EVM 代币有 18 个小数位,这对 SVM 来说太大了。常见的模式是将它们作为 9 个小数位桥接到 SOL。这可以通过使用
-
运行部署命令:
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:在以太坊端部署
-
部署以太坊 Warp 路由合约,这也将根据 yaml 代币配置注册 SVM 路由器。
-
从这个 PR#4447 检出代码仓库分支
-
从项目根目录构建 TS 代码:
yarn && yarn build
-
从源代码运行 CLI:
yarn workspace @hyperlane-xyz/cli hyperlane
-
使用此模板和步骤创建 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 - 设置
-
使用 Hyperlane CLI 部署:
- 运行部署命令,指向你的 YAML Warp 路由配置:
yarn workspace @hyperlane-xyz/cli hyperlane warp deploy --config /path/to/config/warp-route-deployment.yaml
- 命令会记录部署结果,并将其存储在你的文件系统注册表中(当前为
~/.hyperlane
)。
- 运行部署命令,指向你的 YAML Warp 路由配置:
-
使用 Hyperlane CLI 确认部署:
$ cast call 0x1D622da2ce4C4D9D4B0611718cb3BcDcAd008DD4 'routers(uint32)(bytes32)' $DESTINATION_DOMAIN --rpc-url $(rpc ethereum) 1399811149
0xe9792265ec273ffc17731af890d3e9963e9d744e7b99f02491911ce1bb75b8cb
-
步骤 4:更新 SVM token-config.json
-
现在回到 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:部署
- 运行最终部署命令:
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