Skip to content

chore: sync sc-feat/opcm2-upgrade-op-chain with develop#761

Merged
0xiamflux merged 20 commits intosc-feat/opcm2-upgrade-op-chainfrom
sync/opcm2
Dec 16, 2025
Merged

chore: sync sc-feat/opcm2-upgrade-op-chain with develop#761
0xiamflux merged 20 commits intosc-feat/opcm2-upgrade-op-chainfrom
sync/opcm2

Conversation

@0xiamflux
Copy link
Copy Markdown

@0xiamflux 0xiamflux commented Dec 16, 2025

Conflicts:

  • pkg/deployer/integration_test/apply_test.go
  • pkg/deployer/integration_test/cli/upgrade_test.go

Note

Enforces v2 dispute games across OPCM and validator, introduces the op-interop-filter service, and overhauls CI/builds with Rust binary caching, Kona paths, JUnit results, and new parallel check runner; updates deploy/scripts, ABIs, and tests accordingly.

  • Contracts/Validator:
    • OPCM v2 & Dispute Games: Always use v2 dispute games (incl. Cannon Kona); remove v1 blueprint handling; bump versions; guard against enabling custom gas token via upgrade; add isMatchingInstructionByKey.
    • Validator: Track and validate faultDisputeGameImpl/permissionedDisputeGameImpl; adjust error/version checks; require Kona validation; ABI/storage updates.
  • Deploy/Scripts:
    • Migrate deploy/upgrade flows to v2 games; drop v1 branching; new checks.yaml and Go check-runner; Just targets for fast checks.
  • New Service:
    • Add op-interop-filter (CLI, flags, metrics, RPC frontends) and Docker target.
  • CI/Build:
    • Enable mise cache, JUnit test result uploads; add Rust binary build/caching and sysgo runtime resolution; switch Kona paths to kona-proofs; adjust bake/version env; numerous CircleCI job tweaks.
  • Tests/Docs/Style:
    • Update tests for v2-only paths and new behaviors; expand Solidity style guide; AI maintenance flow improvements (prompt, TOML tracking, Slack).

Written by Cursor Bugbot for commit 85b1af9. This will update automatically on new commits. Configure here.

smartcontracts and others added 20 commits December 9, 2025 20:08
* feat: fast check runner for contracts

* feat: further script improvements

* fix: lint

* fix: comments

* feat: add fast checks to ci

* fix: add missing checks

* fix: corrected caching logic

* fix: handle interface check bugs
* feat: add audit report

* chore: update report with audit fixes commit hash

* chore: update release tag

* feat: add superchain ops upgrader audit report

* chore: rename upgrader audit report

* fix: proper report naming

* fix: rev sharing item order
…thereum-optimism#18566)

* Add tests for future/unknown SystemConfig events

* Return typed errors for SystemConfig events

Add ErrUnknownEventVersion and ErrUnknownEventType and return wrapped
typed errors (%w) when encountering unknown event versions or types.
Replace NewCriticalError for ErrParsingSystemConfig with a plain error.
Update tests to assert errors with require.ErrorIs and adjust event
topics/data accordingly.

* Fix error text for unknown event type
…ptimism#18564)

* op-acceptance-tests: batcher: add pending nonce busy wait

* comment

* better name
…optimism#18456)

* op-interop-filter: Service skeleton with flags and metrics

* feat(op-interop-filter): add service skeleton

Add op-interop-filter service scaffolding:

**Core structure:**
- flags/flags.go: CLI flag definitions with L2 RPC parsing
- flags/flags_test.go: Unit tests for flag parsing
- filter/config.go: Configuration struct and parsing
- filter/service.go: Service lifecycle management
- filter/frontend.go: RPC handlers (supervisor and admin)
- filter/backend.go: Stub backend (returns ErrUninitialized)
- metrics/metrics.go: Prometheus metrics interface and implementation
- cmd/main.go: Application entry point

**Build infrastructure:**
- justfile and Makefile for building
- docker-bake.hcl target
- Dockerfile builder and target stages
- Dockerfile.dockerignore allowlist entry

The service compiles and starts but CheckAccessList returns
ErrUninitialized until the actual implementation is added.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(op-interop-filter): align with op-faucet and op-interop-mon patterns

- Change --l2-rpcs to StringSliceFlag (query chain ID from RPC)
- Remove custom ParseL2RPCs parsing and tests
- Add doc subcommand for metrics documentation
- Add Document() method to metrics
- Fix NewMetrics() to take procName parameter
- Remove Required: true from flag (use CheckRequired only)
- Use "message" key in log.Crit for consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(op-interop-filter): use v0.0.0 version to match other services

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: opsuperchain <opsuperchain@slop.bot>
Co-authored-by: Claude <noreply@anthropic.com>

* fix(op-interop-filter): use procName for metrics namespace

* op-interop-filter: Address PR review comments, add Rewind stub, and fix JWT auth

* op-interop-filter: Address PR review comments

- Remove comment from .gitignore
- Remove 'op-geth' from app description to be client-agnostic
- Simplify CheckAccessList error handling to match op-supervisor
- Update SetFailsafeEnabled to indicate pending implementation
- Add JWT secret flag and wire up authentication for admin RPC

* op-interop-filter: Add Rewind admin RPC stub

Adds Rewind method to AdminFrontend as a stub for future implementation.
This will allow operators to recover from reorg-induced stuck states
via manual intervention.

* op-interop-filter: Wire up JWT secret

- Fix ObtainJWTSecret to always generate if file is empty (use true)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* op-interop-filter: Require JWT when admin RPC is enabled

Add validation in Config.Check() to ensure a JWT secret path is
configured when the admin RPC is enabled. This prevents exposing
admin functionality without proper authentication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* op-interop-filter: Remove gitignore

---------

Co-authored-by: opsuperchain <opsuperchain@proton.me>
Co-authored-by: opsuperchain <opsuperchain@slop.bot>
Co-authored-by: Claude <noreply@anthropic.com>
…8154) (ethereum-optimism#18580)

* op-deployer: support op-contracts/v5.0.0-rc.2 upgrade (ethereum-optimism#18154)

* superchain-registry: update validation import to include op-contracts/v5.0.0-rc.2

* op-deployer: support op-contracts/v5.0.0-rc.2 upgrade

* fix(op-deployer): adjust block for v5.0.0

* fix(op-validator): correct semver for v5.0.0

---------

Co-authored-by: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com>
* feat: add cgt to opcmv2

* feat: add cgt to opcmv2

* fix: change semver

* feat: add cgt to opcmv2

* feat: add cgt to opcmv2

* fix: change semver

* refactor: change disputeGameConfigs order in _loadFullConfig

* fix: comment slash rules

* feat: add opcmv2-cgt matrix in CI

* fix: enable cgt overrides on OPCMv2 (#724)

* fix: check CGT is not enabled before enabling it

* fix: enable CGT overrides

* fix: add extra instruction overrides for useCustomGasToken on OPCMv2 (#725)

* chore: link TODO to issue (#727)

* fix: opcm2 revert upgrade cgt (#728)

* fix: add check enabled CGT during upgrades

* test: set CGT false by default during forked tests

* chore: expand comment on OPCMv2 regarding CGT

* chore: pre-pr ready

* refactor: remove unnecessary check for CGT feature (#735)

* fix: cgt upgrade in opcm v2 and semver (#738)

* fix: Full checkout for FFI build (ethereum-optimism#18527)

* chore(op-acceptance-tests): delete very old logs (ethereum-optimism#18529)

* chore(op-acceptance-tests): op-acceptor v3.8.0 (ethereum-optimism#18530)

* jovian: remove feature toggles (ethereum-optimism#17978)

* jovian: remove feature toggles

scope is now fixed

* Updated op-geth to v1.101604.0-synctest.0.0.20251120150812-e50f80a16afc

* lint

* just update-op-geth f48f382

* Use Jovian in test error message

* just update-op-geth ba6bdcfef42341fe2b5ce124c31ff2d6b264e9e4

* chore(ai-eng): add ReinitializableBase test to exclusion list (ethereum-optimism#18531)

* feat: have OPCM upgrade allowances be upgrade specific (ethereum-optimism#18462)

* feat: have OPCM upgrade allowances be upgrade specific

Updates the OPCMv2 check for allowed extra instructions to be
specific to releases. When release versions are bumped, the
allowances become automatically invalid and would reveal
anywhere in the codebase where the allowance is being used.

* fix: semver lock

* fix: emit instruction key in error

* fix: better semantics

* docs: proper OPCM versioning policy

* fix: final version tweaks

* fix(op-acceptance-test): flake-shake; empty slack notifications. (ethereum-optimism#18542)

* feat: add cgt to opcmv2

* feat: add cgt to opcmv2

* fix: change semver

* feat: add cgt to opcmv2

* feat: add cgt to opcmv2

* fix: change semver

* refactor: change disputeGameConfigs order in _loadFullConfig

* fix: enable cgt overrides on OPCMv2 (#724)

* fix: check CGT is not enabled before enabling it

* fix: enable CGT overrides

* fix: opcm2 revert upgrade cgt (#728)

* fix: add check enabled CGT during upgrades

* test: set CGT false by default during forked tests

* chore: expand comment on OPCMv2 regarding CGT

* fix: cgt upgrade in opcm v2 and semver (#738)

* fix: merge conflicts

* fix: pre-pr

* fix: add missing isMatchingInstruction for cgt in false

* refactor: opcm2 extra instruction keymatch (#747)

* refactor: add helper function to match instruction by key only

* chore: pre-pr ready

* test: refactor key matching test

* test: add test suite for IsMatchingKey helper function

* chore: pre-pr ready

* fix: opcmv2 semver

---------

Co-authored-by: Flux <175354924+0xiamflux@users.noreply.github.com>
Co-authored-by: Ján Jakub Naništa <jan.jakub.nanista@gmail.com>
Co-authored-by: Stefano Charissis <stefano@oplabs.co>
Co-authored-by: George Knee <georgeknee@googlemail.com>
Co-authored-by: Ariel Diaz <65925295+aliersh@users.noreply.github.com>
Co-authored-by: smartcontracts <14298799+smartcontracts@users.noreply.github.com>
* all: Remove cannon-kona dgv2 feature flags

* review comments

* move dg impls to stdvalidator impls

* fix typo

* remove dead assignment

* update opcmv2 semver
…ps (ethereum-optimism#18601)

* feat(ai-contracts-test): add TOML-based no-changes tracking system

- add no-need-changes.toml file for tracking tests with comprehensive coverage
- modify ranker to detect stale entries by comparing contract git hashes
- output stale_toml_entries array in ranking JSON
- inject formatted stale entry list into rendered prompt via placeholder
- remove ReinitializableBase.t.sol file from the exclusion file

* fix(ai-contracts-test): improve Devin client session handling

- add retry loop with exponential backoff for session creation
- track blocked state duration and exit after 5-minute timeout
- parse nested structured_output for no-changes detection
- change status value from finished_no_changes to no_changes_needed

* refactor(ai-contracts-test): simplify Slack notification logic

- replace prepare_notification.sh with build_notification.sh
- add notification for TOML tracking PRs when no changes needed
- create build-slack-notification just command wrapping the script
- update CircleCI to call new just command

* chore(ai-contracts-test): update configuration and documentation

- bump VERSION to 1.4.0 for TOML tracking feature
- remove ReinitializableBase.t.sol from exclusion list
- update runbook with TOML tracking system documentation
- document stale entry detection and automatic reintegration

* fix(ai-contracts-test): detect no-changes status from structured output

- check structured_output for changes_needed field when Devin blocks
- add PR URL logging for both "finished" and "no_changes_needed" statuses
- wait up to 5 minutes for structured_output to populate after blocked state
- prioritize structured_output check before falling back to PR-only detection

* chore(ai-contracts-test): add tests to no-changes tracking

- add ReinitializableBase.t.sol entry to no-need-changes.toml
- add SafeSend.t.sol entry to no-need-changes.toml
…ethereum-optimism#18540)

* Add op-rbuilder submodule

* Add rollup-boost submodule

* Move kona => kona-proofs

* Add kona submodule

* Update CI to build rust binaries ahead of acceptance test time
…18606)

* op-e2e: Enable jovian for proofs precompile tests

* op-e2e: Also enable osaka on L1
…8571)

* wiring for l2.follow.source

* Follow Safe without handling external safe > local unsafe

* safe follow

* safe follow consider unsafe gap EL Sync

* follow finalized

* Comments

* cleanup

* drop unused interface methods

* sanity check external finalized

* Adjust follow source log level

* op-devstack: Follow Source Support

* op-acceptance-tests: Follow Source

* op-devstack: Follow Source Support

* simplify labeling

* l1 reorg protection: reset

* add reorg tc

* typo

* follow source: check unsafe

* convention

* Add unsafe only reorg test

* devstack/acceptance test : rename FollowSource to FollowL2

* follow upstream source enabled when derivation disabled, reorg detection

* fix unsafe only reorg sync test comments

* rm unused interface method

* dsl

* devstack support for ext sync test + follow l2

* op-acceptance-tests: Follow L2 using Ext + SyncTester

* use blockref

* fix log msg err

* Fix composite interface naming

* op-node: Follow Source: EL / CL support

* devstack: Allow EL or CL to be follow source

* Inject CurrentL1

* logs for injecting CurrentL1

* refactor to less rpc calls

* acceptance-tests: Check CurrentL1 is advancing

* linter

* fix error args

* sanity check external values using L1

* op-node: Follow Source CL and drop unsafeOnly

* op-acceptance-tests: drop EL follow source / Unsafe Only tests

* op-devstack|acceptance-tests: Follow Source CL

* op-node: Follow Client: only allow CL source

* drop unused args

* rm redundant unsafe head reorg logic

* rm unused dsl

* Do not use functions
* chore: Add SafeRename ioutil utility

* fix: Lint
Conflicts:
- pkg/deployer/integration_test/apply_test.go
- pkg/deployer/integration_test/cli/upgrade_test.go
@0xiamflux 0xiamflux self-assigned this Dec 16, 2025
@0xiamflux 0xiamflux merged commit 800a13e into sc-feat/opcm2-upgrade-op-chain Dec 16, 2025
2 checks passed
@0xiamflux 0xiamflux deleted the sync/opcm2 branch December 16, 2025 23:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.