ethereum-optimism / ethereum-optimism/optimism
op-interop-filter: Reject initiating messages before Lagoon
- Dominant language
- Go
- Stars
- 6.5k
- Forks
- 4k
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 145
Description
**Claude:** I found this during the interop implementation review.
`op-interop-filter` does not enforce the initiating-message Lagoon boundary.
The specification requires every initiating timestamp to be greater than the source chain's Lagoon activation timestamp.
`LockstepCrossValidator.validateMessageTiming` checks ordering, expiry, and timeout only. `ValidateAccessEntry` then checks log existence through `Contains`.
The ingester also starts from wall-clock time minus `backfill-duration`. It clamps only to L2 genesis, not Lagoon activation.
This case is reachable during the first message expiry window after Lagoon. A retained pre-Lagoon log can pass the timing and existence checks.
Op-reth does not provide another source activation check. It checks Lagoon activation on the executing chain, then trusts the configured filter quorum.
The sequencer can therefore include a protocol-invalid message. Consensus verification must invalidate and replace that block.
Expected behavior: reject any initiating message at or before the source chain's Lagoon activation timestamp.
Relevant code:
- `op-interop-filter/filter/service.go:160-224`
- `op-interop-filter/filter/logsdb_chain_ingester.go:379-395`
- `op-interop-filter/filter/lockstep_cross_validator.go:160-279`
- `rust/op-reth/crates/txpool/src/interop_filter/client.rs:166-227`
- `rust/op-reth/crates/txpool/src/validator.rs:329-343`
Specification: https://github.com/ethereum-optimism/specs/blob/b733da804eeadc597c690f16601091e97af1fc68/specs/interop/messaging.md#timestamp-invariant
Contributor guide
Assessment
This issue has not been assessed yet.