Skip to content

chore: l2cm sync#875

Merged
0xiamflux merged 55 commits intosc-feat/l2cm-impl-l2contractsmanagerfrom
sync/l2cm-sync
Feb 17, 2026
Merged

chore: l2cm sync#875
0xiamflux merged 55 commits intosc-feat/l2cm-impl-l2contractsmanagerfrom
sync/l2cm-sync

Conversation

@0xiamflux
Copy link

@0xiamflux 0xiamflux commented Feb 17, 2026

Conflicts:

  • packages/contracts-bedrock/interfaces/L2/IL2ContractsManager.sol

ajsutton and others added 30 commits February 5, 2026 03:03
…sm#19078)

* op-acceptance: Add start of test to run FPP program across a chain.

* op-acceptance: Execute kona-interop for the generated chain.

* Back to kona release build path.

* Tidy up code.
The Blob Tip Oracle (BTO) previously used ethclient.SubscribeNewHead() for header notifications, which only works over WebSocket connections. This change converts it to polling for new headers instead, allowing it to work with HTTP connections. The polling uses the existing PollRate configuration (2.5s default) to check for new headers at regular intervals.

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
…zz tests (ethereum-optimism#19094)

* test(contracts): enhance OptimismMintableERC721 test coverage with fuzz tests

- Convert constructor test to fuzz test with variable remoteChainId
- Convert safeMint test to fuzz test with variable recipient and tokenId
- Convert safeMint notBridge test to fuzz test with variable caller
- Convert burn test to fuzz test with variable tokenId
- Convert burn notBridge test to fuzz test with variable caller
- Convert tokenURI test to fuzz test with variable tokenId
- Add supportsInterface test for unsupported interfaces
- Add version format validation test using SemverComp.parse()

* fix(test): add IERC721Metadata to supportsInterface fuzz exclusions

The contract inherits IERC721Metadata from ERC721, so it must be excluded
from the unsupported interface fuzz test to prevent false failures.

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: safer safes interface and deploy

* feat: DeploySaferSafes test

* fix: error string

* fix: forge fmt
* op-acceptance-tests: Add InvalidMessageHalt test for supernode interop

This TDD test verifies the Interop Activity's behavior when an invalid
executing message is included in a chain:
- Validity should NEVER advance to include the invalid block's timestamp
- Safety and unsafety for both chains should continue to advance

The test sends a valid initiating message on chain A, then sends an invalid
executing message on chain B (with an impossible log index), and observes
that the Supernode correctly halts validity advancement while allowing
safety heads to progress.

* op-supernode: Add logsDB infrastructure for interop activity

This prepares the interop activity for implementing the actual interop
algorithm by:

1. Moving stubbed algorithm functions to algo.go:
   - loadLogs: loads and persists logs up to a timestamp
   - verifyInteropMessages: validates executing messages
   - invalidateBlock: handles invalid blocks

2. Adding per-chain logs.DB for log persistence:
   - Uses op-supervisor's logs.DB directly (no wrapper)
   - openLogsDB helper creates DB per chain in data directory
   - Full persistence support (data survives restart)

3. Extending ChainContainer interface with FetchReceipts:
   - Added to ChainContainer, EngineController, and l2Provider interfaces
   - Enables interop activity to fetch receipts for log processing

4. Initializing logsDBs in Interop activity:
   - Creates one logs.DB per chain on startup
   - Properly closes all logsDBs on Stop()

5. Unit tests for log persistence:
   - Tests for open/close, seal block, persistence
   - Tests for multiple chain isolation

* op-supernode: Refactor interop logdb and improve test coverage

This commit reorganizes the interop activity code and adds comprehensive tests:

1. File reorganization:
   - Renamed algo.go to logdb.go for log persistence code
   - Created new algo.go with just verifyInteropMessages
   - Moved invalidateBlock back to interop.go

2. Added LogsDB interface:
   - Defines interface around logs.DB for better testability
   - Enables mock implementations in unit tests

3. Added chain continuity check:
   - verifyPreviousTimestampSealed now returns previous block hash
   - loadLogs verifies block parent matches logsDB hash
   - Added ErrParentHashMismatch error

4. Expanded unit test coverage for logdb:
   - Tests for verifyPreviousTimestampSealed (activation/non-activation)
   - Tests for processBlockLogs (empty, with logs, errors)
   - Tests for loadLogs parent hash mismatch

5. Improved interop_test.go assertions:
   - Verify logsDBs population in constructor tests
   - Verify verifyFn receives correct args
   - Verify timestamps before activation return true
   - Verify Result.IsEmpty for various scenarios
   - Verify data retrieval after handleResult
   - Full cycle tests verify logsDB and L2Heads

* op-supernode: Implement interop message verification

This commit implements the core verification logic for the interop activity,
completing the TDD cycle for the InvalidMessageHalt acceptance test.

Key changes:
- Implement verifyInteropMessages to validate executing messages at each timestamp
- Verify initiating messages exist in source chain's logsDB via Contains query
- Verify timestamp ordering: initiating timestamp < executing timestamp
- Fix verifyPreviousTimestampSealed to accept any sealed block timestamp < ts
  (not just ts-1), handling block times > 1 second
- Add comprehensive unit tests for verification logic

The acceptance test now passes, demonstrating that:
- Valid cross-chain messages are verified successfully
- Invalid executing messages (wrong LogIndex) halt validity advancement
- Safe/unsafe heads continue to advance independently

* op-supernode: Consolidate interop unit tests

Refactor tests for better organization and reduced redundancy:

- Create logdb_test.go for logsDB infrastructure tests
  - TestLogsDB_Persistence (data persistence, multi-chain isolation)
  - TestVerifyPreviousTimestampSealed (7 table-driven cases)
  - TestProcessBlockLogs (5 subtests)
  - TestLoadLogs_ParentHashMismatch

- Rewrite algo_test.go for verification algorithm only
  - TestVerifyInteropMessages_ValidBlocks (3 subtests)
  - TestVerifyInteropMessages_InvalidBlocks (5 subtests)
  - TestVerifyInteropMessages_Errors

- Consolidate interop_test.go for lifecycle/coordination
  - Merge related tests into table-driven patterns
  - Remove trivial getter/empty-case tests

Test count: 62 functions → 19 functions (~55 cases via subtests)
Removed 8 trivial tests that added no value.

* remove unused code

* validate timestamp gap using block time

* implement message expiry time validation

* simplify verifyExecutingMessage logic

* fix logdb timing check and track local safe in acceptance test

* fix loadLogs to process blocks when DB is empty

* simplify timestamp progression test baseline logic

* skip logsDB loading and verification at activation timestamp

For activation-after-genesis, the logsDB cannot handle non-sequential block
sealing (starting from block N instead of genesis). At activation timestamp:
- Skip loading logs (logsDB requires sequential blocks from genesis)
- Skip verification (can't verify cross-chain messages referencing pre-activation data)
- Trust blocks at activation time

Also allow empty logsDB at activation+blockTime (the first real timestamp).

* fix logsDB to start at activation block instead of genesis

* move invalid_message_halt_test to separate package to avoid test pollution
* fix: gaps in VerifyOPCM

* fix: broken test init

* fix: correct env loading

* fix: outdated code

* fix: more outdated code

* fix: bad parsing

* fix: wrong function call

* fix: remove unused MIN verification, fix test env vars

- Remove documented but unimplemented MIN:<value> check type
- Remove unused _verifyMinValue function
- Add missing env vars to test_verifyOpcmCorrectness_succeeds:
  - EXPECTED_L1_PAO_MULTISIG
  - EXPECTED_CHALLENGER
  - EXPECTED_WITHDRAWAL_DELAY_SECONDS

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

* fix: skip mainnet-only checks in testing environment

The _verifyZeroOnMainnet check should also be skipped in testing
environments where we can't control the actual chain state.

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

* fix: use vm mock for isolation

* fix: format

* fix: final test tweaks

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…m#19065)

* fix: SuperchainConfig comments and test refactoring

- Remove outdated warning comment from SuperchainConfig
- Bump SuperchainConfig version to 2.4.1
- Fix comment in OPContractsManagerV2
- Refactor test helpers: move NeedsSuperchainConfigUpgrade to testutil package
- Update add-game-type-v2 tests to deploy a full OP chain

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

* fix: semver lock

* fix: broken test when applying superchain config upgrade

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…thereum-optimism#19076)

* chore: return migrator address on ReadImplementationAddresses output (#819)

* chore: return migrator address on ReadImplementationAddresses output

* chore: use fixed solidity version

* chore: just pr ready

* test: add zero length code test for opcm

* chore: update tests on migrator (#822)

* refactor: replace contract mocks with vm.mock

* fix: read impl typo

* fix: remove nonexistent delayedWETHPermissionedGameProxy from test

The test referenced input_.delayedWETHPermissionedGameProxy which doesn't
exist in the ReadImplementationAddresses.Input struct. The delayedWETH
implementation is read from OPCM's implementations() return value, not
from an input proxy address.

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

* fix: use common test

* fix: handle OPCM V2 feature flag in ReadImplementationAddresses tests

The test was using the `opcm` variable directly, which is only set when
OPCM_V2 feature is disabled. Added `_opcm()` helper to return the correct
instance based on the feature flag.

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

---------

Co-authored-by: IamFlux <175354924+0xiamflux@users.noreply.github.com>
Co-authored-by: niha <205694301+0xniha@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…sm#19075)

* docs: add TODO checker workflow to docs/ai/ci-ops.md

Adds detailed operational instructions for resolving TODO checker
CI failures in a dedicated file following the docs/ai/ pattern.

The workflow includes:
- CircleCI API commands to find the latest scheduled pipeline
- Parsing job output to identify closed issues
- GitHub API commands to find who closed the issue
- Proper reopening comment format with attribution and traceability

This enables natural language commands like "fix the latest TODO
checker failure" to work automatically via AGENTS.md/CLAUDE.md
guidance that Claude Code reads.

References the new ci-ops.md file from AGENTS.md alongside other
topic-specific documentation.

* Simplify docs

* docs: fix TODO checker workflow to work without CIRCLECI_TOKEN

Updates the TODO checker workflow with two key fixes:

1. Remove CIRCLECI_TOKEN requirement - CircleCI API is publicly
   accessible for this repository, so no authentication needed

2. Fix "who closed the issue" detection - Use GraphQL to find the
   most recent person who closed the issue from the timeline, not
   just the closing PR author. This correctly handles cases where
   an issue was closed via PR, then reopened, then closed directly
   by a different user.

Also improves Step 2 to search through recent scheduled pipelines
to find one with the actual "scheduled-todo-issues" workflow, since
the latest may only contain a "setup" workflow.

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

* Add claude skill for fixing todo check job.

* Put detail in the skill file and simple more human readable instructions in ci-ops.md

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(op-deployer): build contracts in docker

* fix(tests): comments

* fix(tests): comments

* fix(tests): comments

* fix(tests): comments
…ptimism#18979)

* op-acceptance: Change to creating super cannon kona games

* op-acceptance: Use the interop prestate dir for kona

* Fix lint

* Enable super cannon kona game type in challenger.
ethereum-optimism#19077)

* fix: only allow enabling permissioned game types in opcmv2 deployment (#835)

* fix: only allow permissioned game types in opcmv2 deployment

* docs: add comment for permissionless games config in deployopchain

* feat: add isInitialDeployment argument to std validator script

* fix: undo OPCMv1 changes

* fix: old test content

* fix: expect validator errors for disabled games in deploy test

CANNON and CANNON_KONA are intentionally disabled during initial deployment,
so no implementations are registered. The validator correctly flags this as
PLDG-10 and CKDG-10 errors. Update test to expect these errors.

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

* fix: revert on non-PERMISSIONED_CANNON game type in DeployOPChain

Address review feedback: raise an error instead of silently overwriting
the disputeGameType input. Only PERMISSIONED_CANNON is valid for initial
deployment since no prestate exists for permissionless games.

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

---------

Co-authored-by: niha <205694301+0xniha@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…elated code (ethereum-optimism#19080)

* Revert "Revert "op-service: rip out deprecated blob sidecars client and relat…"

This reverts commit aaa41a0.

* Remove unused GetBlobs method from MockBlobsFetcher

* Add NewBlobHint and NewLegacyBlobHint methods

* Refactor blob hint generation in PreimageOracle

* Add Test for Blob Hints in Prefetcher

This commit adds comprehensive testing for blob hints in the prefetcher,
covering both legacy and current blob hint types. The test verifies that
the prefetcher can correctly handle and retrieve blob data based on
different hint implementations.

* Refactor Blob Hint Parsing with Improved Validation

Add parseBlobHint function to handle legacy and current blob hint
formats, improving error handling and hint parsing for blob-related
operations

* Remove trailing newline in prefetcher test file
…m#19096)

Add descriptions for the `ai/` and `handbook/` directories in the docs README. Refine the CODEOWNERS pattern for security-reviews to be more specific, and fix the trailing slash formatting for consistency.

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
* Update RewindFinalizedHeadBackward test to expect panic

* Fix rewind test finalized block reference

* Use error handling instead of panic
* mise: upgrade semgrep from 1.90.0 to 1.131.0

Semgrep 1.90.0 has a transitive dependency on opentelemetry-instrumentation
which imports pkg_resources from setuptools. Python 3.12 does not include
setuptools by default in venvs, so when the mise cache is invalidated (by
any change to mise.toml), a fresh pipx install of semgrep 1.90.0 fails with:

  ModuleNotFoundError: No module named 'pkg_resources'

This was reported as semgrep/semgrep#11069 and fixed in later versions.
Upgrading to 1.131.0 resolves the issue.

Co-Authored-By: Kelvin Fichter <kelvinfichter@gmail.com>

* mise: upgrade semgrep from 1.131.0 to 1.137.0

v1.137.0 is the first version that actually bumps the opentelemetry
packages (PR semgrep/semgrep#11180), fixing the pkg_resources
ModuleNotFoundError on Python 3.12 without setuptools.

Co-Authored-By: Kelvin Fichter <kelvinfichter@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Kelvin Fichter <kelvinfichter@gmail.com>
* chore(rust): merge all the rust workspaces

* chore(ci): formatting, fixing dockerfile and ci

* chore: more ci fixes

* Update .circleci/continue/rust-ci.yml

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* Update .circleci/continue/rust-e2e.yml

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* Update .circleci/continue/rust-e2e.yml

Co-authored-by: Sebastian Stammler <seb@oplabs.co>

* chore: pr comments

* nit: fix kona path in op-challenger

* chore: fix prestate artifacts path

---------

Co-authored-by: Sebastian Stammler <seb@oplabs.co>
ethereum-optimism#18866)

* fix: alt da: handle no commitments case when finalized head is updated

* add tests

* update fix
…block (ethereum-optimism#19114)

* Update L1 genesis handling for genesis L2 block

Clarify that for the genesis L2 block, we always return L1 block 0
without relying on the original configuration's L1 genesis. This allows
for more flexibility in dispute game scenarios involving earlier L1
blocks.

* empty commit to trigger CI checks
…ereum-optimism#19112)

* op-acceptance: Add test for next super root not being available.

* Move fpp tests to their own package so they can run in parallel with other challenger tests.  Restart the sequencer after the test.
…thereum-optimism#19136)

The rust workspace unification moved op-alloy under rust/, but the
semgrepignore pattern was not updated, causing semgrep to flag the
mdbook theme's JavaScript try/catch blocks as Solidity violations.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Kelvin Fichter <kelvinfichter@gmail.com>
…sm#19137)

The [alias] section in mise.toml has been deprecated in favor of
[tool_alias]. This fixes the deprecation warning on mise startup.
* Merge main and acceptance-test workflows.

Avoids performing duplicate work.

* Switch where anchor references are defined.
* op-acceptor: Update to 3.8.3

* chore(op-acceptor): update to 3.8.3

---------

Co-authored-by: Stefano Charissis <stefano@oplabs.co>
Erroneous spacing lead to Error: bad file '.circleci/continue/rust-ci.yml': yaml: line 8: mapping values are not allowed in this context
theochap and others added 25 commits February 11, 2026 15:36
…bled (ethereum-optimism#19138)

* Add metrics recording before sending to throttling loop

This means we can still track the metric when throttling is disabled.

* Remove unnecessary conditional for throttling threshold

if we can't send on the channel, we drop the update anyway

* Add test for disabled throttling in op-batcher

This commit adds a test case to verify the behavior of the batch
submitter when throttling is disabled (LowerThreshold = 0). The test
ensures that:

- The throttling loop does not start
- No throttle updates are sent to the endpoint
- Unsafe data availability bytes metric is still recorded
- The driver can process blocks and update metrics without running the
  throttling loop

* Add test helper method to simulate block loading

* dedupe test cases

* Add comment explaining channel send behavior in sendToThrottlingLoop
…um-optimism#19142)

Rename all pipeline parameters in CircleCI continuation configs
(main.yml, rust-ci.yml, rust-e2e.yml) to use a `c-` prefix, eliminating
naming overlap with the setup config (config.yml). This fixes the
"Conflicting pipeline parameters" error that occurs when API-triggered
pipelines (e.g. from opgitgovernance bot) pass non-default parameter
values.

The path-filtering mapping in config.yml bridges between the setup
parameter names (used by API triggers) and the new continuation
parameter names.
* op-supernode: Add block invalidation and deny list to chain container

- Add DenyList using bbolt for persistent storage of invalid block hashes
- Add InvalidateBlock method to ChainContainer interface
- InvalidateBlock adds hash to denylist and triggers rewind if current block matches
- Add IsDenied helper to check if a block is on the deny list
- Add acceptance test skeleton for block replacement flow

* op-supernode: Add unit tests for block invalidation

- Add table-driven tests for DenyList (Add, Contains, Persistence, GetDeniedHashes)
- Add tests for InvalidateBlock (rewind triggers, no-rewind cases, timestamp calculation)
- Add tests for IsDenied helper
- Fix OpenDenyList to create parent directories
- Add InvalidateBlock/IsDenied stubs to mock ChainContainers in existing tests

* Wire up block invalidation from interop activity to chain container

When the interop activity detects an invalid executing message, it now calls
InvalidateBlock on the chain container. This:
1. Adds the block to the chain's denylist (persisted via bbolt)
2. Checks if the chain is currently using that block
3. Triggers a rewind to the prior timestamp if so

The acceptance test is renamed to TestSupernodeInteropInvalidMessageReset and
temporarily skipped due to pre-existing logsDB consistency issues blocking
interop progression.

* Fix block invalidation: use eth.Unsafe label and improve test resilience

- Use eth.Unsafe label in BlockAtTimestamp call (was using empty string)
- Make acceptance test resilient to block not existing after rewind
- Test now passes: detects reset when block 8 is rewound away

* op-node: add SuperAuthority interface for payload denial

Introduce SuperAuthority interface that allows external authority (like
op-supernode) to deny payloads before they are inserted into the engine.

- Define SuperAuthority interface in op-node/node/node.go with IsDenied method
- Add SuperAuthority to InitializationOverrides for injection
- Wire SuperAuthority through Driver to EngineController
- Check IsDenied before NewPayload in payload_process.go
- If denied during Holocene derivation, request deposits-only replacement
- Update tests and op-program to pass nil for SuperAuthority

* op-supernode: add ResetOn method to Activity interface

Add ResetOn(chainID, timestamp) to Activity interface so activities can
clean up cached state when a chain container rewinds.

- Activity.ResetOn called by Supernode when any chain resets
- Supernode.onChainReset distributes reset to all activities
- Heartbeat and Superroot implement no-op ResetOn (no cached state)
- Update test mocks to implement ResetOn

* op-supernode: add SetResetCallback to ChainContainer

Add reset callback mechanism to ChainContainer so it can notify the
supernode when a chain rewinds due to block invalidation.

- Add ResetCallback type and onReset field to simpleChainContainer
- Add SetResetCallback to ChainContainer interface
- Call onReset after successful RewindEngine in InvalidateBlock
- Update test mocks to implement SetResetCallback

* op-supernode: implement ResetOn in Interop activity

When a chain rewinds, the Interop activity must clean up its cached state:
- Rewind logsDB for the chain to before the reset timestamp
- Rewind verifiedDB to remove entries at or after reset timestamp
- Log error if verified results were deleted (unexpected)

Also adds:
- Rewind/Clear methods to LogsDB interface
- RewindTo method to VerifiedDB
- noopInvalidator for calling logsDB.Rewind
- Update test mocks for new interface methods

* op-acceptance-tests: add replacement block assertions

Add assertions to verify block replacement behavior:
- Replacement block hash differs from invalid block hash
- Invalid transaction is NOT present in replacement block

These checks confirm the deposits-only replacement mechanism works
correctly after an invalid executing message is detected.

* fill in missing unit tests

Add comprehensive unit tests for block invalidation sub-features:

- TestDenyList_ConcurrentAccess: Verify concurrent Add/Contains operations
- TestInvalidateBlock: Test invalidateBlock wiring from Interop to ChainContainer
- TestResetOn: Test Interop activity reset behavior on chain rewind
- TestVerifiedDB_RewindTo: Test VerifiedDB rewind functionality
- TestSuperAuthority_*: Test payload denial in op-node engine controller

Also includes BlockInvalidation_Feature.md diary documenting all sub-features.

* address review feedback: genesis block guard and docs

- Add guard check rejecting InvalidateBlock for height=0 (genesis block)
- Document SetResetCallback must only be called during initialization
- Add test case for genesis block invalidation error

* op-acceptance-tests: rename halt package to reorg, consolidate tests

- Rename halt/ package to reorg/ (reflects actual behavior)
- Move invalid_message_replacement_test.go into reorg package
- Delete obsolete invalid_message_halt_test.go (superseded by reorg test)

The halt test tested old behavior where invalid messages caused the chain
to halt. With block invalidation, the chain now rewinds and replaces
the invalid block with a deposits-only block.

* sub-feature 6: interop test control (PauseInterop/ResumeInterop)

Add test-only control methods for the interop activity to support
precise timing control in acceptance tests.

Specification:
- PauseInterop(ts): When called, interop activity returns early when
  it would process the given timestamp, without making progress
- ResumeInterop(): Clears the pause, allowing normal processing
- Zero value indicates 'not paused' (always process all values)
- Atomic read/write for concurrent safety

Implementation layers:
- Interop: pauseAtTimestamp atomic.Uint64 field + check in progressInterop()
- Supernode: delegates to interop activity by type assertion
- sysgo.SuperNode: exposes methods, delegates to supernode.Supernode
- stack.InteropTestControl: interface defining the test control contract
- Orchestrator: InteropTestControl(id) method to get control for a supernode
- DSL Supernode: NewSupernodeWithTestControl() + wrapper methods
- Preset: wires up test control in NewTwoL2SupernodeInterop()

This enables acceptance tests to:
  sys.Supernode.PauseInterop(targetTimestamp + 1)
  // ... perform test setup ...
  sys.Supernode.ResumeInterop()

* Updates from Self Review

- Consolidate SuperAuthority interface to op-node/rollup/iface.go
  (remove duplicate definitions from node.go, engine_controller.go, resources/)
- Move onReset callback invocation from InvalidateBlock to RewindEngine
  (fires on any engine reset, not just block invalidation)
- Move helper methods (SetResetCallback, blockNumberToTimestamp, IsDenied)
  from invalidation.go to chain_container.go
- Delete unused op-supernode/supernode/resources/super_authority.go

* lint

* datadir for unit tests

* Add functions to DSL

* PR comments: Rename Functions ; Remove non-holocene replacement logic

* refactor: cleanup DSL, tests, and interop activity

DSL changes:
- Add TimestampForBlockNum helper to L2Network
- Simplify SendInvalidExecMessage to just increment log index

Test changes:
- invalid_message_reorg_test: use TimestampForBlockNum, check eth.NotFound
- Move SuperAuthority tests to super_authority_deny_test.go
- Fix denied payload test to expect DepositsOnlyPayloadAttributesRequestEvent
- Make denyBlock private in test mock

Interop activity:
- Extract resetLogsDB and resetVerifiedDB helper functions

* Refacor Tests to Test Cases

* Delete AI Diary

* Final PR Comments

* More tests to sub-cases
…ereum-optimism#19168)

The split preimage uploader previously chose the “large preimage proposal”
path purely by preimage size. That path is keccak-only on-chain
(it finalizes by writing a 0x02-prefixed key), so routing large
sha256/blob/precompile preimages there could never satisfy the
requested oracle key/offset.

To fix this we update routing to only use the large uploader for
non-local Keccak256KeyType preimages.

Co-authored-by: inphi <mlaw2501@gmail.com>
ethereum-optimism#19173)

* flaky test: add TestUnsafeChainNotStalling_DisabledReqRespSync to flake-shake

* circleci: set DEBUG log.level for flake-shake
…nned tag (ethereum-optimism#19183)

Now that kona lives in the monorepo, the prestate build no longer needs
to clone the optimism repo at a pinned commit to build cannon. Instead,
cannon is built from the local monorepo source via a Docker named build
context, removing the cannon_tag config file and simplifying the build.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…-optimism#19163)

* proofs: port TestInteropFaultProofs action test to devstack

* fix(kona/client): produce InvalidTransition when derivation falls short of target block

* Update Makefile

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>

* fix makefile indent

* revert Makefile changes

* revert rust/kona/justfile changes

---------

Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
…#19101)

* chore(rust): move docs to unified rust/docs/ directory

* chore(rust): update repo links from alloy-rs/paradigmxyz to
  ethereum-optimism
…um-optimism#19179)

* DSL: Coordinate Interop Activity Pause for Acceptance Testing

* Refactor EnsureInteropPaused to simplify timestamp selection

---------

Co-authored-by: geoknee <georgeknee@googlemail.com>
* feat: add ConditionalDeployer (#687)

* feat: refactor l2cm conditional deployer predeploy and add L2CM dev flag  (#836)

* refactor: replace create2 deployer for arachnid

* feat: add ConditionalDeployer as predeploy and add L2CM dev flag

* fix: add pre-pr fix

* fix: remove unnecessary auth in conditional deployer

* feat: add custom error for deployment revert

* test: add l2cm e2e apply test case

* fix: conditional deployer tests and match style guide

* fix: remove fork test

* feat: add common test to cond deployer test

* fix: follow constant style guide

* fix: comments and add msg.value to ConditionalDeployer

* fix: conditional deployer comment in apply test

* fix: arachnid reference comment

* fix: add msg.value to conditional deployer

* fix: deterministic deployment proxy comment

* fix: add code length check after deploy

* fix: add code length check after deploy

* fix: pre pr fix

* refactor: remove useL2CM bool initialization

* fix: make deploy non payable and add tests

* fix: make deploy non payable

* test: add missing getters test

* fix: add missing natspec

* feat: add todo issue for devfeatures cyclic import

* chore: pre pr run

* refactor: add returned address check in deploy

* fix: use encodePacked for return address test

* fix: unify getters in a single test contract

* fix: variables naming and mutability

* fix: remove underscore from local variable

* fix: remove address payable from deterministicDeploymentProxy

* refactor: rename dummy storage variable in test and add internal getExpectedImplementation helper

---------

Co-authored-by: niha <205694301+0xniha@users.noreply.github.com>
Co-authored-by: OneTony <onetony@defi.sucks>
Co-authored-by: 0xOneTony <112496816+0xOneTony@users.noreply.github.com>
…optimism#19155)

- Add tag classification to distinguish Rust crate groups from Docker-only groups
- Add publish-crates CI job for crates.io publishing with dependency-ordered releases
- Add op-reth Docker bake target and compute-git-versions entry
- Add cargo-release configuration for alloy-op-hardforks and op-reth
- Add .dockerignore for rust/ build context
- Fix op-reth DockerfileOp manifest paths
…tions (ethereum-optimism#19165)

* feat(op-node): add NUT bundle parser for JSON-defined upgrade transactions

Enable defining network upgrade transactions (NUTs) as JSON files
instead of requiring hardcoded Go files per hardfork.

* feat(op-node): add intent-based source hash derivation to NUT bundles

Source hashes are derived from a qualified intent string that combines
the fork name, transaction index, and per-tx intent field.

* refactor(op-node): rename NUTTransaction to NetworkUpgradeTransaction

* refactor(op-node): remove Value field from NetworkUpgradeTransaction

NUTs should never need to send ether. Value is always zero.

* refactor(op-node): use forks.Name for NUT bundle fork identifier

* refactor(op-node): accept io.Reader in ReadNUTBundle instead of []byte

Allows streaming directly from files or embedded FS without
an intermediate []byte allocation.

* fix(op-node): linting
…reum-optimism#19199)

* op-challenger: Add logging to Stop method

* op-devstack: Dump all stack traces if challenger stop takes too long.

* op-challenger: Remove extra logging.
…optimism#19206)

* fix(contracts): handle v1/v2 OPCM structures when loading DelayedWETH artifacts

Upgrade tests were failing because ForkLive assumed v1 structure (DelayedWETH
on game impl) but after OPCM v2 upgrades it's stored in gameArgs. This caused
artifact loading to fail when tests ran past upgrades without useUpgradedFork.

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

* fix(contracts): add underscore suffix to named return argument

Fixes semgrep rule sol-style-return-arg-fmt which requires named return
arguments to have an underscore suffix.

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

* fix(contracts): improve v1/v2 fallback logic for DelayedWETH loading

Simplify the fallback logic so that:
- If gameArgs returns data (length > 0), it must decode successfully
- Only fall back to v1 (game impl .weth()) if gameArgs doesn't exist
  or returns empty bytes

This ensures proper error propagation when gameArgs data is invalid.

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

* Use helper method.

* Fetch the pre-upgrade permissioned delayed weth from on chain.

* Load preupgrade state from on chain.

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(l2cm ): add L2ProxyAdmin

* feat: initial l2proxyadmin implementation

* feat: add semver and event

* test: add L2ProxyAdmin unit tests

* refactor: rename proxyAdmin to L2ProxyAdmin inside packages

* refactor: rename proxyAdmin to L2ProxyAdmin in go side

* refactor: rename l2cm interface

* fix: semgrep issues

* fix: revert proxy admin renaming

* fix: revert proxy admin renaming in packages

* fix: revert proxy admin renaming in go

* fix: add missing natspec in l2pa constructor

* fix: natspec proxied true

* fix: run pre-pr

* fix: proxy admin predeploy getName, label and refactor tests & TODO

* fix: proxy admin predeploy getName, label and refactor tests

* feat: add todo for l2pa refactor to be initializable
* ci: Fix make reproducible-prestate.

Adjust reproducible-prestate so the op-program and kona prestates can be built in parallel.
Depend on the full prestate build in CI to ensure it always works.

* Use machine executor.

* Remove remote docker setup.

* Remove separate cannon-kona build job.

* Build cannon and op-program binaries.

* Depend on go-binaries-for-sysgo in e2e tests
* ci: Fix make reproducible-prestate.

Adjust reproducible-prestate so the op-program and kona prestates can be built in parallel.
Depend on the full prestate build in CI to ensure it always works.

* Use machine executor.

* Remove remote docker setup.

* Remove separate cannon-kona build job.

* Build cannon and op-program binaries.

* Depend on go-binaries-for-sysgo in e2e tests

* ci: Only build the specified rust binary
@0xiamflux 0xiamflux self-assigned this Feb 17, 2026
@0xiamflux 0xiamflux merged commit e09ceba into sc-feat/l2cm-impl-l2contractsmanager Feb 17, 2026
2 checks passed
@0xiamflux 0xiamflux deleted the sync/l2cm-sync branch February 17, 2026 22:37
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.