Layer2 之间直接传消息会发生什么:Superchain 互操作的日志验证与七天时效 图 1
Layer2 之间直接传消息会发生什么:Superchain 互操作的日志验证与七天时效 · 图 1

Layer2 之间传消息,过去通常有两条路:各自回到以太坊结算一次,或者信任一个第三方桥。OP Stack 的 Superchain 互操作给出第三种方案——两条 Layer2 链直接对话,消息不过 L1,正确性靠接收方在源链上反查那条日志本身。官方文档把这组机制放在 L2ToL2CrossDomainMessenger 与 CrossL2Inbox 两个合约上,并给它配了一个七天有效窗口。这项能力在官方文档里仍在持续完善,边界可能随版本推进变化,本文机制以官方当前文档为准。

发起消息:源链上只留一条日志

应用在源链合约里调用 L2ToL2CrossDomainMessenger 的发送接口,参数是目标链的链 ID、目标合约地址和消息本身——消息会作为 calldata 交给目标合约。合约先做三项自检:目标链在允许发送的清单里、目标链不是源链自己、目标地址不是底层协议合约。检查通过后,合约发出一条 SentMessage 事件日志,除了上述参数还带一个保证消息只被执行一次的 nonce 和发送方地址。到此为止,没有任何”消息包裹”进入中间网络——跨出链境的只有这条事件日志。

执行消息:目标链拿日志反向对质

说明图

到了目标链一侧,自动中继器(或应用自己)调用 relayMessage,把原消息和一组用于定位它的字段一起交进去。目标链的 L2ToL2CrossDomainMessenger 随即用 CrossL2Inbox 反查:这条发起消息是否真的在源链上作为日志存在过。CrossL2Inbox 的职责边界很克制——它只验证发起消息的存在性,不关心消息要送往何处、是否已被处理。存在性确认后,信使合约再逐项核对链 ID、nonce、发送方和目标地址五项字段,全部对得上,才用消息自带的 calldata 调用目标合约。没有公证人把消息”搬”过去,安全性来自接收方对源链日志的直接验证。

op-supervisor 与七天时效

这套机制有一个容易被忽略的配套件:目标链节点上的 op-supervisor。执行消息被处理之前,发起消息的那条日志必须已经到达 op-supervisor——它负责把跨链消息视图对齐进区块安全,防止目标链引用一段还没被安全确认的源链历史。官方文档同时定义了一个链下常量:Superchain 互操作集群里的消息,从日志产生起 7 天(604800 秒)内必须被引用,超过窗口的消息永久失效、不再可引用。

过期没被中继的消息不是死路。开发者可以在源链调用 resendMessage 重新发一条内容相同的 SentMessage 日志,刷新计时后按正常流程中继;重发调用会验证这条消息哈希当初确实发出过,而对已经成功中继过的消息做重发,在目标链不会产生任何效果,因为重复日志不会被 op-supervisor 再次记录。监控这件事的责任在应用侧:七天里没人执行,消息就悄悄过期了。自动中继器只是默认路径——官方文档写明,执行消息也可以由应用本身或代应用调用的合约直接提交,中继不是单点依赖。

边界:新消息路线的新风险

和资产跨桥不同,L2 到 L2 消息本身不搬运资产,它只是让目标链上的一次调用拿到源链发生过的凭证;两边的资产账本仍各自结算。对普通用户,值得留意三点:一是互操作是较新的能力,支持的链集合与中继时效会随版本演进,跨链操作前查一下官方文档当前的状态标注;二是”目标链没有即时生效”不等于失败,也可能只是发起日志还没走到 op-supervisor 或还在等自动中继;三是七天时效把超时风险留给了协议使用方,遇到长期卡住的消息,先看是否还能重发,而不是反复重签新消息。本文只是机制解释,不构成任何投资建议。