关于 layerzero-messaging
layerzero-messaging 是用于构建 EVM 链与 Hedera 之间 LayerZero V2 OApp/OFT 消息传递的技能,重点介绍配对 OFT 与 Hedera HTS 连接器。内容涵盖 peer 和库配置、代币处理及发送费用。
主要功能
- 01配对 EVM 与 Hedera OFT
- 02HTS 连接器代币流程
- 03Peer 与库配置
- 04LayerZero V2 发送及费用模式
- 05Hedera 代币关联说明
适用场景
- 01配置 EVM–Hedera 代币通路
- 02实现基于 HTS 的 OFT 转账
- 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) |
| ID | Peer/dstEid 使用 LayerZero EID,而非 EVM 链 ID |
有关 Endpoint/ULN/DVN 地址的来源,请参阅 references/hedera-endpoints.md。有关线路配置和发送示例,请参阅 references/examples.md。
重要:双向配置
Peer 配置不完整会导致路径不可用。对于每个本地 OApp:
setPeer(remoteEid, remoteOAppAsBytes32)setSendLibrary/setReceiveLibrary(ULN302)setConfig——在发送库上设置 ExecutorConfig(类型1);在发送库和接收库上设置 UlnConfig(类型2)setEnforcedOptions——例如,为 msgType1(代币发送)设置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,并缩放原生费用。
部署清单(通用)
- 部署 EVM
OFT(可选:预铸代币) - 部署 Hedera HTS 连接器 OFT,并附带 HTS 创建费用
- 部署工作者(Labs DVN/executor 或教学用简单工作者)
- 配置两个 OApp(
setPeer+ 库 + 配置 + 强制选项) - 将 Hedera 账户与
htsTokenAddress()关联 - 如适用,同步前端配置;如使用 UI 自动中继,为中继密钥充值
- 发送少量代币;在 LayerZero Scan 上跟踪(根据情况使用测试网/主网)
教学用中继
某些模板使用简单的 DVN/executor 模拟合约,并显式添加 lzReceive 中继步骤。请将其视为学习辅助——生产应用依赖 LayerZero 的验证网络,而非应用服务器中的自定义中继密钥。
检查清单
- 双向设置 Peer,且 EID 正确(不是 EVM 链 ID)
- 已配置发送/接收库以及 ULN/executor
- Hedera 侧使用 HTS 连接器;已支付创建费用;供应密钥为连接器
- 入站转账前,已将接收方与 HTS 代币关联
-
quoteSend的原生费用已附加到send - 接收方地址已编码为
bytes32 - 教学用途免责声明:未经审计/不适用于主网资金
参考资料
- references/examples.md — OFT、HTS 连接器、线路配置、发送
- references/hedera-endpoints.md — EID 与链 ID 的区别、地址来源
- LayerZero V2 文档
- LayerZero 部署元数据