ethereum-optimism / ethereum-optimism/optimism

opgeth-decoupling: retire the in-process op-geth L2 EL in op-e2e system tests and op-devstack/sysgo

Open
#21,744 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.