超通道消息自中继Skill self-relay-hyperlane-message

这个技能用于通过Hyperlane CLI在以太坊协议类型的区块链链之间手动中继消息,适用于跨链通信场景。关键词:Hyperlane, 跨链技术, 消息中继, CLI工具, 区块链开发。

跨链技术 0 次安装 0 次浏览 更新于 3/11/2026

名称: 超通道消息自中继 描述: 使用Hyperlane CLI在以太坊协议类型的链之间手动交付(自中继)消息。

超通道消息自中继

使用CLI的status --relay命令手动交付超通道消息。

输入参数

参数 是否必需 默认值 描述
origin_chain 从Explorer API派生 源链名称(如果未提供则自动派生)
dispatch_tx 否* - 发送交易哈希(消息发送时的交易)
message_id 否* - 超通道消息ID(dispatch_tx的替代)
registry_path CLI默认值 本地注册表路径(如果private_rpcs为true则覆盖)
key $(HYPERLANE_MONOREPO=$(git rev-parse --show-toplevel) hypkey) 用于签名中继交易的私钥
private_rpcs true 如果为true,通过本地http-registry使用私有RPCs

* 必须提供dispatch_txmessage_id中的一个,但不能同时提供。

说明

步骤0: 查找Monorepo根目录

工作目录可能不是monorepo根目录。通过查找CLAUDE.md或具有"name": "hyperlane-monorepo"package.json来找到它:

git rev-parse --show-toplevel

将此路径存储为MONOREPO_ROOT。所有后续命令必须以cd $MONOREPO_ROOT &&为前缀以确保正确执行。

步骤1: 验证输入

验证dispatch_tx / message_id:

  • 如果既未提供dispatch_tx也未提供message_id错误: “必须提供dispatch_tx或message_id”
  • 如果同时提供了dispatch_txmessage_id错误: “请只提供dispatch_tx或message_id中的一个,不要同时提供”

步骤2: 启动私有RPC注册表(如果需要)

如果private_rpcstrue:

  1. 强制覆盖 registry_pathhttp://localhost:3333
  2. 启动http-registry通过/start-http-registry

步骤3: 查询Explorer API以获取缺失数据

查询Hyperlane Explorer GraphQL API以解析任何缺失的值(dispatch_txorigin_chain)。

如果提供了message_id:

query {
  message_view(
    where: { msg_id: { _eq: "\\x<message_id_without_0x>" } }
    limit: 1
  ) {
    origin_tx_hash
    origin_domain
    is_delivered
  }
}

如果提供了dispatch_txorigin_chain缺失:

query {
  message_view(
    where: { origin_tx_hash: { _eq: "\\x<dispatch_tx_without_0x>" } }
    limit: 1
  ) {
    origin_domain
    is_delivered
  }
}

使用mcp__hyperlane-explorer__query-graphql工具。注意:bytea字段使用\\x前缀而不带0x

提取值:

  • origin_tx_hash → 将\\x...转换为0x...格式 → 设置为dispatch_tx
  • origin_domain → 设置为origin_chain(例如,“ethereum”, “citrea”)
  • is_delivered → 如果为true,通知用户消息已交付(无需中继)

如果未找到消息: 错误 “在Hyperlane Explorer中未找到消息”

步骤4: 确定密钥值

  • 如果提供了key,直接使用该值
  • 如果未提供key,使用默认值:$(HYPERLANE_MONOREPO=$(git rev-parse --show-toplevel) hypkey)
  • 重要: 默认密钥值是一个命令替换。不要直接执行hypkey。仅在运行中继命令时将其用作环境变量值。

步骤5: 运行自中继命令

运行以下命令(如果设置了registry_path,则附加--registry <registry_path>):

cd $MONOREPO_ROOT && \
LOG_FORMAT=pretty LOG_LEVEL=debug HYP_KEY="<key>" \
pnpm -C typescript/cli hyperlane status --relay --origin <origin_chain> --dispatchTx <dispatch_tx>

步骤6: 清理

如果private_rpcstrue:

  1. 终止http-registry使用步骤2中保存的shell/task ID
  2. 确认清理成功

步骤7: 报告结果

向用户展示输出,包括:

  • 中继是否成功
  • 遇到的任何错误
  • 如果成功,目标交易哈希

示例

示例1: 使用dispatch_tx

cd $MONOREPO_ROOT && \
LOG_FORMAT=pretty LOG_LEVEL=debug HYP_KEY="$(HYPERLANE_MONOREPO=$(git rev-parse --show-toplevel) hypkey)" \
pnpm -C typescript/cli hyperlane status --relay --origin ethereum --dispatchTx 0xabc123...

示例2: 仅使用message_id(origin_chain自动派生)

  1. 查找monorepo根目录:MONOREPO_ROOT=$(git rev-parse --show-toplevel)
  2. 通过/start-http-registry在后台启动http-registry
  3. 查询GraphQL以获取消息0xdef456... → 获取origin_tx_hashorigin_domain
  4. 检查is_delivered - 如果已交付,通知用户并跳过中继
  5. 运行:
    cd $MONOREPO_ROOT && \
    LOG_FORMAT=pretty LOG_LEVEL=debug HYP_KEY="$(HYPERLANE_MONOREPO=$(git rev-parse --show-toplevel) hypkey)" \
    pnpm -C typescript/cli hyperlane status --relay --origin <origin_domain> --dispatchTx <origin_tx_hash> --registry http://localhost:3333
    
  6. 终止http-registry进程