经常有朋友问:LayerZero 怎么用?听起来很高深,其实拆开看就五步。本文不放大段源码,只用通俗语言把整个流程串起来,结合 Binance 智能链上一个最简单的计数器示例,让你看完就能动手。哪怕没写过跨链合约,也能在两小时内完成第一次端到端跨链通信。
第一步:安装依赖
在 Hardhat 项目里安装 @layerzerolabs/solidity-examples 包,它包含 LzApp、NonblockingLzApp 等基类,以及 OmniCounter 等示例合约。建议直接 fork 官方仓库,把示例目录复制到自己的项目下作为起点。结合 必安 链 RPC 配置好 hardhat.config,准备一个测试用 EOA 钱包并领取测试币。
第二步:继承基类
写一个继承自 NonblockingLzApp 的合约,构造函数把本链 Endpoint 地址传进去。重写 _nonblockingLzReceive,定义收到消息时的处理逻辑。最简化的示例只在内部递增一个计数器,便于后续验证消息是否真的送达。注意所有跨链回调函数都应通过 internal 实现,并仅由基类调用,避免外部直接调用绕过校验。B安交易所 上的初学者合约模板都是这种结构。
第三步:配置可信远端
部署到两条链后,在源链调用 setTrustedRemote,把目标链的 chainId 与目标合约地址组合成 bytes 写入;在目标链做对称配置。这一步是 LayerZero 安全模型的核心,必须由 owner 严格控制。如果你不熟悉 abi.encodePacked,可以使用官方提供的 lzAddress 辅助函数生成正确字节。
第四步:估算费用并发送
发送跨链消息前调用 estimateFees 拿到所需 nativeFee。把 nativeFee 作为 msg.value 传给 send 函数,并指定目标 chainId、destination、payload、refundAddress、zroPaymentAddress、adapterParams。这里建议预留 5% 浮动,避免极端 gas 波动导致失败。BN官网 的部分前端工具会自动帮用户做这个浮动计算。
第五步:等待目标链确认
发送完成后,可以在 LayerZeroScan 上查看消息状态。从 Inflight 到 Delivered 通常需要几十秒到两分钟,取决于源链 finality 与 Relayer 提交节奏。目标链 lzReceive 执行成功后,本地状态会被更新。如果状态停在 Failed,参考前面的调试方法定位原因。
常见疑问
LayerZero 怎么用最容易让人困惑的,是 chainId 与 EVM chainId 不同。BSC 的 LayerZero chainId 是 102 不是 56,币岸 等链也都有自己的内部编号。把这张映射表打印出来,配置时对照查询,能避免大量错误。
小结
LayerZero 怎么用?记住「装依赖、继承基类、配可信远端、估费用发消息、看 Scan 确认」这五步。把这条流水线跑通一次,所有跨链开发都将不再神秘。建议第一次操作时记录每一步遇到的问题,沉淀为团队 SOP。