OFT-adapter命令:npxhardhatlz:oft:send--src-eid40231--dst-eid40245--amount1.5--to0x3ab12b9ff37c21c8c2d92f8f0209d1e04d6b57ee
命令:
npx hardhat lz:oft:send \
--src-eid 40231 \
--dst-eid 40245 \
--amount 1.5 \
--to 0x3ab12b9ff37c21c8c2d92f8f0209d1e04d6b57ee
Src(Arbitrum)
RayERC20(本地 ERC20 资产)
0x7bC68465b92b82dDd89097E1BFABA2F9348404c5
OFTAdapter(把 RayERC20 封装成 OFT的适配器,也就是src)
0x1137ef9869DEc71FCa947cd9D8d7606bF05690d6
Dst(Base)
OFT(OApp_dst)
0x790E5667A1bC449803E68e827b60919859d75546
OFTAdapter.sendFrom 里面:
RayERC20 余额:
RayERC20 从 msg.sender 转到 OFTAdapter(lock 模式)Endpoint:EndpointV2.send: _sender 是 OFTAdapter:
_outbound(OFTAdapter, 40245, receiver=OFT_on_base):
OFTAdapter → Base(OFT) 这条路径分配一个新的 nonce;(to, amount);guid 是这笔跨链转账的“全局 ID”,后面 dst 链执行时要用;SendLib(SendUln302),调用:
ISendLib(sendLib).send(packet, options, payInLzToken);_payWorkers:
calldata 长度 + dst 链 gas 情况,给 Executor 算 fee;confirmations + quorum,给 DVN 算 fee;to + amount 的 payload。_payTreasury:
_assertMessagingFee 确认这笔 OFT 跨链操作提供的 native / lzToken 足够覆盖:
Executor 的 gasDVN 的 gasTreasury 的协议费_payNative / _payToken 真正把钱存进 SendLib 的 fee 账本RayERC20(lock); PacketSent。这一条跨链消息,代表一笔 OFT 转账。
DVN Network:
PacketSent,确认:
confirmations; packetHeader + payload 确实编码了正确的 (to, amount);Executor Network: Endpoint.lzReceive(origin, receiver=OFT, guid, message)(to, amount)。这一段链路的逻辑不变,只是:
receiver = 在 Base 上部署的 OFT 合约0x790E5667A1bC449803E68e827b60919859d75546 payloadHash 对应的是:
abi.encodePacked(guid, abi.encode(to, amount))
最后:
Base 链上的 Endpoint 把这条 OFT 转账消息的 payloadHash 写进:
inboundPayloadHash[OFT][ArbitrumEid][OFTAdapter][nonce] = payloadHash;
也就是:
“从 Arbitrum 上 OFTAdapter 来的 OFT 跨链转账”已经进到 Base 上的 message channel,等待 Executor 执行。
encodedPacket,解出:
origin = { srcEid = 40231, sender = OFTAdapter, nonce } guid message = abi.encode(to, amount) extraData = executorOptions 编出来的执行配置 endpoint.lzReceive(origin, OFT, guid, message, extraData);(guid, message) 的哈希 == inboundPayloadHash[OFT][ArbEid][OFTAdapter][nonce] lazyInboundNonce payloadHash,防止这笔 OFT 转账被执行两次OFT._mint(to, amount) 表示:“在src已经锁住了 RayERC20,现在在 Base 链上给对应地址发放同额度的 OFT。”
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!