Hyperlane 本地设置指南:在 Anvil 节点之间发送消息
本指南将引导您通过 Hyperlane CLI 在两个本地 Anvil 节点之间发送跨链消息。
前提条件
-
Hyperlane CLI: 确保您已安装最新版本的 Hyperlane CLI。
npm install -g @hyperlane-xyz/cli
-
Anvil (foundry): 安装以运行本地链。通过以下命令安装:
curl -L https://foundry.paradigm.xyz | bash
-
Node.js(v18 或更高版本)
-
部署者钱包私钥:您需要一个有资金的钱包来部署合约。这将用作 HYP_KEY。
export HYP_KEY=<YOUR_PRIVATE_KEY>
步骤指南
1. 环境设置:为 Hyperlane 配置创建一个工作目录:
mkdir hyperlane-local-test && cd hyperlane-local-test
2. 启动两个不同的 Anvil 节点
我们将运行两个具有唯一链 ID 的 Anvil 节点。
-
在第一个终端上,启动第一个 Anvil 节点:
anvil --port 8545 --chain-id 31337 --block-time 1
- 运行在
http://localhost:8545
。 - 链 ID:
31337
。
- 运行在
-
在新终端中,启动第二个 Anvil 节点:
anvil --port 8546 --chain-id 31338 --block-time 1
- 运行在
http://localhost:8546
。 - 链 ID:
31338
。
- 运行在
3. 初始化 Hyperlane 注册表
在新终端中,使用 Hyperlane CLI 为两个 Anvil 节点创建配置:
hyperlane registry init
按照提示设置 anvilnode1
。CLI 将询问您有关链的详细信息,包括 chainId 和 RPC URL。对 anvilnode2
重复此过程。
此过程将在 $HOME/.hyperlane/chains/anvilnode1
和 $HOME/.hyperlane/chains/anvilnode2
下创建 metadata.yaml
文件。
示例元数据:
- anvilnode1
chainId: 31337
displayName: Anvilnode1
domainId: 31337
isTestnet: true
name: anvilnode1
nativeToken:
decimals: 18
name: ETH
symbol: ETH
protocol: ethereum
rpcUrls:
- http: http://localhost:8545
- anvilnode2
chainId: 31338
displayName: Anvilnode2
domainId: 31338
isTestnet: true
name: anvilnode2
nativeToken:
decimals: 18
name: ETH
symbol: ETH
protocol: ethereum
rpcUrls:
- http: http://localhost:8546
4. 部署核心合约
我们将配置并部署 Hyperlane 核心合约。
您需要部署核心合约的部署者钱包私钥。您可以使用 export HYP_KEY='<YOUR_PRIVATE_KEY>'
将私钥设置为环境变量。
hyperlane core init
部署配置将保存到 ./configs/core-config.yaml
。
接下来,部署核心合约:
hyperlane core deploy
按照提示选择 anvilnode1
。CLI 将部署邮箱、跨链安全模块(ISM)和其他所需合约。对 anvilnode2
重复此过程。
完成后,您将在 $HOME/.hyperlane/chains/anvilnode1
和 $HOME/.hyperlane/chains/anvilnode2
中找到 addresses.yaml
,其中包含已部署的合约地址。
您应该能够在运行本地节点的终端上看到合约部署的消息。
5. 发送测试消息
使用 Hyperlane CLI 从 anvilnode1
向 anvilnode2
发送消息。
hyperlane send message --relay
CLI 将提示您提供源链(anvilnode1
)和目标链(anvilnode2
)。
对于本地测试,--relay
标志会自动将消息中继到目标链。
发送消息后,请检查以下内容:
- 验证者日志:查找指示生成和存储签名的条目。
- 中继器日志:查找成功检索元数据和消息处理的记录。
- Anvil 日志:确保已挖掘区块以处理交易。
🎉 您已使用 Hyperlane 在两个本地 Anvil 节点之间发送了消息!
故障排除
-
“无法获取元数据”警告:
- 原因: 当中继器无法检索处理消息所需的验证者签名时,会发生此情况。常见原因:
- 验证者密钥缺乏测试网资金。
- 验证者尚未宣布其存储位置。
- 解决方案:
- 确保验证者已宣布其存储位置。检查验证者日志以查找类似以下消息:
Validator has announced signature storage location, locations: ["file:///tmp/hyperlane-validator-signatures-local"].
- 验证每个验证者是否具有唯一的签名存储路径(
--checkpointSyncer.path
),以防止覆盖。 - 确认中继器对存储路径具有读取权限。
- 确保验证者已宣布其存储位置。检查验证者日志以查找类似以下消息:
- 原因: 当中继器无法检索处理消息所需的验证者签名时,会发生此情况。常见原因:
-
消息超时:
- 原因: Anvil 默认不自动挖掘区块,导致验证者或中继器无限期等待新块。
- 解决方案: 确保在启动 Anvil 时使用
--block-time 1
标志,以每秒自动挖掘区块。
-
验证者不匹配或配置错误:
- 原因: 目标链上的 ISM 配置与源链使用的验证者密钥不匹配。
- 解决方案: 检查 ISM 配置是否包含正确的验证者地址。验证者日志可以帮助识别已宣布的地址。