ethereum-optimism / ethereum-optimism/optimism

op-interop-filter: Reject initiating messages before Lagoon

Open
#22,829 0 comments 0 reactions 1 assignee Claimed by @karlfloersch View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.