mcpField
L
layerzero-messaging

layerzero-messaging

github.com/hedera-dev开发28475 次安装8 周前更新
代码仓库

关于 layerzero-messaging

layerzero-messaging 是用于构建 EVM 链与 Hedera 之间 LayerZero V2 OApp/OFT 消息传递的技能,重点介绍配对 OFT 与 Hedera HTS 连接器。内容涵盖 peer 和库配置、代币处理及发送费用。

主要功能

  1. 01配对 EVM 与 Hedera OFT
  2. 02HTS 连接器代币流程
  3. 03Peer 与库配置
  4. 04LayerZero V2 发送及费用模式
  5. 05Hedera 代币关联说明

适用场景

  1. 01配置 EVM–Hedera 代币通路
  2. 02实现基于 HTS 的 OFT 转账
  3. 03发送前检查 peer、库和接收设置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hedera-dev/hedera-skills --skill layerzero-messaging

安装后在 Claude Code 中输入/layerzero-messaging确认已加载。

附带文件references/examples.mdreferences/hedera-endpoints.md

详细介绍

LayerZero Messaging(Hedera)

OFT 模式: 部署配对的全链可替代代币——EVM 侧部署标准 OFT,Hedera 侧部署 HTS 连接器 OFT——然后双向调用 setPeer,并支付 LayerZero V2 费用发送。

OFT (EVM)  ←setPeer→  HTSConnectorOFT (Hedera)
  │ send / quoteSend          │ _debit burn / _credit mint (HTS 0x167)
  └──────── Endpoint V2 + ULN + DVN + Executor ────────┘

本技能聚焦于 LayerZero V2 OApp/OFT + Hedera HTS。教学模板可能使用 简单工作者,并通过手动/UI 中继 lzReceive——这与生产环境中 LayerZero Labs 的验证方式不同。

快速参考

概念规则
Endpoint每条链使用 ILayerZeroEndpointV2
Peer在两侧调用 setPeer(remoteEid, bytes32(uint256(uint160(remoteOApp))))
发送quoteSend(SendParam, payInLzToken) → send{value: nativeFee}(SendParam, fee, refund)
接收方SendParam 中的 to 为 bytes32(填充后的地址)
Hedera OFT由 HTS 提供支持的连接器——创建 HTS 代币,发送时销毁,接收时铸造
HTS 费用部署连接器时附带原生代币,以支付 createFungibleToken 费用
授权在 Hedera → EVM 调用 send 前,用户必须在 HTS 代币上执行 approve(connector, amount)
IDPeer/dstEid 使用 LayerZero EID,而非 EVM 链 ID

有关 Endpoint/ULN/DVN 地址的来源,请参阅 references/hedera-endpoints.md。有关线路配置和发送示例,请参阅 references/examples.md。

重要:双向配置

Peer 配置不完整会导致路径不可用。对于每个本地 OApp:

  1. setPeer(remoteEid, remoteOAppAsBytes32)
  2. setSendLibrary / setReceiveLibrary(ULN302)
  3. setConfig——在发送库上设置 ExecutorConfig(类型 1);在发送库和接收库上设置 UlnConfig(类型 2)
  4. setEnforcedOptions——例如,为 msgType 1(代币发送)设置 lzReceive 的 gas

发送前,在两条链上通过 peers(remoteEid) 验证。

重要:Hedera HTS 连接器语义

在 Hedera 上,不要将普通 ERC-20 OFT 用作主要路径。应使用由 HTS 提供支持的连接器:

  • 构造函数通过预编译合约 0x167 创建可替代 HTS(供应密钥 = 连接器)
  • _debit:转入 HTS → 销毁
  • _credit:铸造 → 转出 HTS
  • 数量必须符合 HTS 铸造/销毁/转账的 int64 范围
  • EVM → Hedera 接收前,需先将接收方账户与 HTS 代币关联
// Deploy with value so createFungibleToken fee is paid
new HTSConnectorOFT{ value: htsCreateValue }(name, symbol, lzEndpoint, owner);

发送流程

SendParam memory sendParam = SendParam({
    dstEid: remoteEid,
    to: bytes32(uint256(uint160(receiver))),
    amountLD: amountLD,
    minAmountLD: (amountLD * 9) / 10,
    extraOptions: OptionsBuilder.newOptions().addExecutorLzReceiveOption(lzReceiveGas, 0),
    composeMsg: "",
    oftCmd: ""
});

MessagingFee memory fee = IOFT(localOFT).quoteSend(sendParam, false);
IOFT(localOFT).send{ value: fee.nativeFee }(sendParam, fee, payable(refundTo));

Hedera → EVM 注意事项: Forge 的费用模拟结果可能与 Hedera JSON-RPC 的 wei/tinybar 缩放比例不一致——该方向通常需要通过 cast 执行 quote,并缩放原生费用。

部署清单(通用)

  1. 部署 EVM OFT(可选:预铸代币)
  2. 部署 Hedera HTS 连接器 OFT,并附带 HTS 创建费用
  3. 部署工作者(Labs DVN/executor 或教学用简单工作者)
  4. 配置两个 OApp(setPeer + 库 + 配置 + 强制选项)
  5. 将 Hedera 账户与 htsTokenAddress() 关联
  6. 如适用,同步前端配置;如使用 UI 自动中继,为中继密钥充值
  7. 发送少量代币;在 LayerZero Scan 上跟踪(根据情况使用测试网/主网)

教学用中继

某些模板使用简单的 DVN/executor 模拟合约,并显式添加 lzReceive 中继步骤。请将其视为学习辅助——生产应用依赖 LayerZero 的验证网络,而非应用服务器中的自定义中继密钥。

检查清单

  • 双向设置 Peer,且 EID 正确(不是 EVM 链 ID)
  • 已配置发送/接收库以及 ULN/executor
  • Hedera 侧使用 HTS 连接器;已支付创建费用;供应密钥为连接器
  • 入站转账前,已将接收方与 HTS 代币关联
  • quoteSend 的原生费用已附加到 send
  • 接收方地址已编码为 bytes32
  • 教学用途免责声明:未经审计/不适用于主网资金

参考资料

评论

支持 Markdown