ethereum-optimism / ethereum-optimism/optimism
opgeth-decoupling: retire the in-process op-geth L2 EL in op-e2e system tests and op-devstack/sysgo
- Dominant language
- Go
- Stars
- 6.5k
- Forks
- 4k
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 134
Description
Part of #20257. See §17 of the [op-geth decoupling doc](https://github.com/ethereum-optimism/optimism/blob/develop/docs/ai/opgeth-decoupling.md). **Blocks #20266.**
## Problem
op-e2e system tests and op-devstack/sysgo can still run **op-geth in-process as the L2 EL**:
`op-e2e/e2eutils/geth.InitL2` (selected via the `e2eutils/el.InitL2` factory's `ELKindOpGeth`)
and `op-devstack/sysgo/l2_el_opgeth.go`. After the go.mod flip (#20266) these would silently run
**upstream** go-ethereum as the L2 EL — wrong OP state transition, no compile error to warn us.
(The in-process **L1** geth miner is unaffected: plain Ethereum semantics are exactly right for it
under upstream.)
The seams already exist: `el.InitL2` selects between in-process op-geth and external-process
op-reth, sysgo has `l2_el_opreth.go`, and op-acceptance-tests already sequence op-reth-only for
Karst+ (#21182).
## Work
- Make op-reth the only L2 EL kind: remove `ELKindOpGeth`, `e2eutils/geth.InitL2`, and
`sysgo/l2_el_opgeth.go` (and the geth-only knobs plumbing, e.g. `GethOptions`).
- Resolve every test currently pinned to the op-geth EL, case by case: migrate to op-reth, or
delete with rationale. Derive the current pin list by grepping for `ELKindOpGeth` /
`GethOption` rather than trusting a snapshot here.
- **Folds in #21451**: the pre-Regolith tests are geth-pinned because op-reth returns
`IsSystemTx` as a string on pre-Regolith blocks. Resolve per that issue's options — likely
delete the pre-Regolith tests and require bedrock/regolith co-activation.
## Acceptance criteria
- No in-process op-geth L2 EL construction remains in op-e2e or op-devstack.
- System/devstack test suites green on op-reth-only L2 ELs.
- #21451 closed by this work or explicitly re-scoped.
🤖 *Generated by Claude Code*
Contributor guide
Research direction
Start by grepping for ELKindOpGeth and GethOption across op-e2e and op-devstack/sysgo, then read e2eutils/el.InitL2, e2eutils/geth.InitL2, sysgo/l2_el_opgeth.go, and sysgo/l2_el_opreth.go. Review the tests pinned to op-geth, including the pre-Regolith cases related to #21451, and run the system and devstack suites; done means no in-process op-geth L2 construction remains and the suites pass with op-reth only.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- testing, tooling
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100