跳到主要内容

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 从 anvilnode1anvilnode2 发送消息。

hyperlane send message --relay

CLI 将提示您提供源链(anvilnode1)和目标链(anvilnode2)。

提示

对于本地测试,--relay 标志会自动将消息中继到目标链。

发送消息后,请检查以下内容:

  • 验证者日志:查找指示生成和存储签名的条目。
  • 中继器日志:查找成功检索元数据和消息处理的记录。
  • Anvil 日志:确保已挖掘区块以处理交易。
success

🎉 您已使用 Hyperlane 在两个本地 Anvil 节点之间发送了消息!

故障排除

  1. “无法获取元数据”警告:

    • 原因: 当中继器无法检索处理消息所需的验证者签名时,会发生此情况。常见原因:
      • 验证者密钥缺乏测试网资金。
      • 验证者尚未宣布其存储位置。
    • 解决方案:
      • 确保验证者已宣布其存储位置。检查验证者日志以查找类似以下消息:Validator has announced signature storage location, locations: ["file:///tmp/hyperlane-validator-signatures-local"].
      • 验证每个验证者是否具有唯一的签名存储路径(--checkpointSyncer.path),以防止覆盖。
      • 确认中继器对存储路径具有读取权限。
  2. 消息超时:

    • 原因: Anvil 默认不自动挖掘区块,导致验证者或中继器无限期等待新块。
    • 解决方案: 确保在启动 Anvil 时使用 --block-time 1 标志,以每秒自动挖掘区块。
  3. 验证者不匹配或配置错误:

    • 原因: 目标链上的 ISM 配置与源链使用的验证者密钥不匹配。
    • 解决方案: 检查 ISM 配置是否包含正确的验证者地址。验证者日志可以帮助识别已宣布的地址。