ethereum-optimism / ethereum-optimism/optimism
opgeth-decoupling: final cutover (flip go.mod to upstream go-ethereum)
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 6.5k
- Forks
- 4k
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 134
Description
Part of #20257. The last step after all other sub-issues land.
Goal
Remove the op-geth replace directive from go.mod; clean up any remaining shims or transitional code.
Scope
- Remove from
go.mod:replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth vX.Y.Z. - Update the direct
github.com/ethereum/go-ethereumdependency to the target upstream version. - Run
go mod tidy; resolve any residual import issues. - Remove ALL op-core differential tests (types, fees, params, sync-tester PayloadID) and the §2 transaction-helper scaffolding — no longer meaningful without op-geth as a comparison point.
op-core/params.GethChainConfig()sheds the OP fork fields and theOptimismstruct from the produced go-ethereumChainConfig(they only exist on the fork).op-core/interop/messagesswitchesparams.InteropCrossL2InboxAddress(fork const) toop-core/predeploys.- Flip the log-layer alias to the owned interface (#21745 phase 2).
- Update CI / build configs that referenced op-geth; delete the CI ratchet job + baseline (#21748).
- Verify
go build ./...andgo test ./.... - Update
CLAUDE.md/AGENTS.mdpointer text (after this lands, the plan doc is historical reference).
Dependencies
Blocked on all other sub-issues, notably:
- #20263, #20264, #20265 — call-site swaps, OP-aware sources client, test migration.
- #20415 + #21196 — op-e2e/actions track (hard prerequisite).
op-e2e/actionsembeds op-geth in-process; flipping go.mod before it lands would silently re-resolve those imports to upstream go-ethereum with incorrect OP EVM behaviour. - #21743 — Rust script engine for op-chain-ops/script + op-deployer. Fork-only EVM hooks; no module-split escape hatch (any in-repo module still on op-geth keeps the fork maintained, defeating the epic's purpose). Spikes 1–3 complete; production landing + bake remain.
- #21744 — op-reth-only L2 EL in op-e2e system tests + sysgo (otherwise the flip silently runs upstream geth as the L2 EL with wrong OP semantics — no compile error to warn).
- #21745 — foundations: own the log layer + re-home the RPC recorder (fork log/rpc extensions break the whole tree at flip time).
- #21746 (check-*), #21747 (op-wheel/cheat), #21281 (genesis), #21282 (op-simulate/op-run-block deletion), #21525 (sync-tester PayloadID).
The CI ratchet (#21748) is the readiness gauge: this issue is executable exactly when the ratchet baseline is empty; the flip PR deletes the job.
🤖 Generated by Claude Code
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
First check that the listed prerequisite issues have landed and that the CI ratchet baseline is empty. Then inspect go.mod and the named op-core, CI/build, log-layer, and documentation areas, running go mod tidy as the dependency changes proceed. Done means no op-geth shims or differential tests remain, and go build ./... plus go test ./... pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- backend, build-system, ci-cd
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100