op-node,op-chain-ops: add Upgrade 18 (CGT v2) activation fork plumbing#471
Draft
karlb wants to merge 1 commit into
Draft
op-node,op-chain-ops: add Upgrade 18 (CGT v2) activation fork plumbing#471karlb wants to merge 1 commit into
karlb wants to merge 1 commit into
Conversation
karlb
added a commit
to celo-org/celo-kona
that referenced
this pull request
Jul 14, 2026
… boundary Manual precursor to the op-e2e fixture (#1417's op-node leg, blocked on op-e2e genesis injection): anvil as a bare L1, celo-reth as the EL, and an op-node built with the Upgrade 18 fork plumbing (celo-org/optimism#471) sequencing it through the engine API. Covers the one surface the in-repo tests cannot — the op-node <-> celo-reth contract: op-node parses a rollup.json carrying upgrade18_time (the four param overrides deliberately stay out of op-node: they are a proof-host/EL channel), sequences across the boundary, the first block with ts >= upgrade18_time carries the migration (op-node-derived timestamps, not dev-mode wall clock), and sequencing continues past the irregular state transition, which applies exactly once. Not auto-run by e2e_test/run_all_tests.sh since it needs an op-node binary (OP_NODE_BIN, or built from CELO_OPTIMISM_DIR).
Provisional activation trigger for the CGT v2 predeploy migration (celo-blockchain-planning#1410). The migration itself is an irregular state transition performed entirely by the execution layer; the op-node only needs to carry the schedule and expose the predicate. Upgrade18 is registered as an *optional* fork (forks.AllOpt, like PectraBlobSchedule) rather than a mainline one: it is a one-shot migration trigger for the two live Celo networks, so it must not be scheduled implicitly by ActivateAtGenesis/ActivateForkAtOffset chains on unrelated chains, has no allocs mode, and does not belong in the proof-test fork matrices. Cel2Time set the same precedent. - forks.go: Upgrade18 name in AllOpt. Via OverridableForks this also provides an --override.upgrade18 CLI flag / env var for free. - rollup.Config: Upgrade18Time. The JSON key is pinned to celo-kona's CeloRollupConfig (upgrade18_time): the canonical rollup.json of a migrating chain carries it for the proof programs, and ParseRollupConfig's DisallowUnknownFields would otherwise reject that file. The four artifact param overrides are deliberately NOT added: they are a dev/e2e proof-host channel (real networks use the artifact's per-network constants), so op-node never sees them. IsUpgrade18 and IsUpgrade18ActivationBlock give ethereum-optimism#1412/ethereum-optimism#1413 an identical predicate to key off. - DeployConfig: l2GenesisUpgrade18TimeOffset, threaded into RollupConfig() so generated rollup.json files can schedule the fork.
karlb
force-pushed
the
karlb/upgrade18-fork-plumbing
branch
from
July 15, 2026 11:37
b68b7ac to
c7da5a2
Compare
karlb
added a commit
to celo-org/celo-kona
that referenced
this pull request
Jul 17, 2026
… boundary Manual precursor to the op-e2e fixture (#1417's op-node leg, blocked on op-e2e genesis injection): anvil as a bare L1, celo-reth as the EL, and an op-node built with the Upgrade 18 fork plumbing (celo-org/optimism#471) sequencing it through the engine API. Covers the one surface the in-repo tests cannot — the op-node <-> celo-reth contract: op-node parses a rollup.json carrying upgrade18_time (the four param overrides deliberately stay out of op-node: they are a proof-host/EL channel), sequences across the boundary, the first block with ts >= upgrade18_time carries the migration (op-node-derived timestamps, not dev-mode wall clock), and sequencing continues past the irregular state transition, which applies exactly once. Not auto-run by e2e_test/run_all_tests.sh since it needs an op-node binary (OP_NODE_BIN, or built from CELO_OPTIMISM_DIR).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Provisional activation trigger for the CGT v2 predeploy migration (celo-blockchain-planning#1410). The migration itself is an irregular state transition performed entirely by the execution layer; the op-node only needs to carry the schedule and expose the predicate.
Upgrade18 is registered as an optional fork (forks.AllOpt, like PectraBlobSchedule) rather than a mainline one: it is a one-shot migration trigger for the two live Celo networks, so it must not be scheduled implicitly by ActivateAtGenesis/ActivateForkAtOffset chains on unrelated chains, has no allocs mode, and does not belong in the proof-test fork matrices. Cel2Time set the same precedent.