Conversation
…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>
* 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
* 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.
#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 (#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
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>
#18866) * fix: alt da: handle no commitments case when finalized head is updated * add tests * update fix
…block (#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
…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>
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
…bled (#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
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
) 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>
* proofs: add interop FP trace extension action test to devstack * fix flakes; leave batcher alone
* Refactor blob handling to remove indexed blob references * Refactor Blob Hint Tests to Improve Clarity and Readability * Add doc comment formatting fix to blob provider * Fix rustdoc syntax for trait documentation
… (superAuthority) (#19110) * op-supernode: add SuperAuthority interface and wire into op-node - Add SuperAuthority interface in supernode resources package - Add SupernodeAuthority implementation (empty for now) - Add SuperAuthority field to InitializationOverrides in op-node - Attach SuperAuthority to OpNode struct during initialization - Wire SupernodeAuthority through supernode to all chain containers * Replace `safeHead` with dynamic method `SafeL2Head()` * WIP * WIP * Move SuperAuthority interface and related code to chain_container package * WIP * Implement SafeL2Head method for chain container. Establish a new method LatestVerifiedTimestamp() (uint64, bool) on the verifier interface: * Update LatestVerifiedTimestamp method to LatestVerifiedL2Block * Update SuperAuthority interface method name Rename SafeL2Head to FullyVerifiedL2Head in SuperAuthority interface * Fix SafeL2Head to use superAuthority field add TODOs * Refactor BlockAtTimestamp to use TargetBlockNumber and L2BlockRefByNumber * Rename BlockAtTimestamp to LocalSafeBlockAtTimestamp * Remove BlockLabel parameter from LocalSafeBlockAtTimestamp * remove accidental ressurected code from rebasing * Refactor BlockAtTimestamp method to LocalSafeBlockAtTimestamp * Update sync status logging to use LocalSafeL2 fields * Update sync status struct field names in timestamp progression test * Remove unused mock struct fields in chain container test * Replace SafeL2 with LocalSafeL2 in Superroot activity * Add VerifiedSafeBlockAtTimestamp method to chain container The new method computes and returns the safe L2 block at a given timestamp, with additional checks against the current safe head. * Replace VerifiedSafeBlockAtTimestamp with LocalSafeBlockAtTimestamp * enhance error msg * remove unused getter * Add local safe head tracking for SafeDB in interop mode * simplify Simplify safe head reset logic in sync deriver * Update comments to clarify local safe head references * Update test comments to clarify "safe head" terminology * Remove local safe update handling in SyncDeriver * Add block time to test chain config to prevent division by zero * Add deprecated safe head field to EngineController * Remove commented-out test functions * Add additional assertions for L2 block references * Move check on safe head to a test which actually advances it and conditionalize the check on the safe head being nonzero * move again * fix test * Change FullyVerifiedL2Head to return BlockID instead of L2BlockRef * Updatee Safe Heamd Retrioeval with Context aned Improved Panic Message * Add tests for SafeL2Head in engine controller * Add tests for LocalSafeBlockAtTimestamp method * Update FullyVerifiedL2Head to track earliest verified block * Add safe head progression tests for supernode interop * Add test coverage for FullyVerifiedL2Head method update implementation to panic if verifiers disagree on block hash for the same timestamp * Add test mocks for engine controller forkchoice update * adopt superAuthority wiring from #19091 * fix compiler errors after merging with main branch * Gracefully Handle SuperAuthority L2 Head Ahead of Local Safe Head Modify SafeL2Head() to log a debug message and return the local safe head when the SuperAuthority's verified head is ahead of the local safe head, instead of panicking. This change prevents unexpected crashes and provides a fallback mechanism that maintains node stability while logging the discrepancy for investigation. * Add safe head progression test for supernode interop This commit updates the safe head progression test in op-acceptance-tests to validate cross-chain safe head synchronization behavior. Key changes include: - Pause and resume interop verification to test safe head stalling - Add assertions for cross-safe and local-safe head progression - Check execution layer safe label consistency - Simplify test structure for better readability and reliability * speed up test by 2x * DSL: Coordinate Interop Activity Pause for Acceptance Testing * self review fixes * finish moving code * Remove BlockAtTimestamp method from EngineController interface * Fix chain container test temp directory config * Add robust pause timestamp calculation for supernode interop test allows the test to work on chains with different block times * Refactor Safe Head Progression Test for Conciseness * Update safe head progression test comment for clarity * Remove unnecessary imports and batcher configuration in supernode init test * add safety-labels.md * Add safe head validation check in supernode interop test * Update MockEngineForInvalidation to Simplify Block Retrieval * Refactor EnsureInteropPaused to simplify timestamp selection * Refactor Safe Head Progression Test for Dynamic Timestamp Handling * Increase timeout for supernode timestamp validation Extends the context timeout in `AwaitValidatedTimestamp` from `DefaultTimeout` to `5*DefaultTimeout` to provide more time for timestamp validation, reducing potential race conditions. Removes verbose commentary in safety-labels.md, simplifying the explanation while preserving the core concept of avoiding multiple stateful controllers. * Update safety-labels.md * Handle logsDB reset by early return when timestamp not sealed * op-supernode: pass invalidated BlockRef through Reset callback chain This change modifies the Reset callback to pass the invalidated BlockRef directly to activities, allowing resetLogsDB to use the block info without making RPC calls to LocalSafeBlockAtTimestamp during reset. The problem was that during a reset, LocalSafeBlockAtTimestamp could fail if the chain container's safe head hadn't yet caught up after the rewind, causing the logsDB to be cleared entirely instead of rewound to the correct position. Changes: - Activity.Reset now takes invalidatedBlock eth.BlockRef parameter - ResetCallback type updated to include invalidatedBlock - RewindEngine accepts invalidatedBlock and passes to callback - InvalidateBlock constructs BlockRef from the invalidated block - Interop.resetLogsDB uses BlockRef directly (Number-1, ParentHash) - verifiedDB.RewindAfter keeps reset timestamp, removes only after - All test mocks updated for new signatures * Make Proofs wait on LocalSafe instead of Safe * Adjust 4 More Proofs Tests to LocalSafe * Revert "Adjust 4 More Proofs Tests to LocalSafe" This reverts commit 0b28c12. * Revert "Make Proofs wait on LocalSafe instead of Safe" This reverts commit cbdb215. * Improve fallback mechanism for fully verified L2 head Enhance `FullyVerifiedL2Head()` to handle scenarios with no verifiers or incomplete verification: - Add explicit fallback to local-safe head when no verifiers are registered - Improve logging for better traceability of fallback mechanism - Gracefully handle cases where rollup client or sync status retrieval fails - Prevent potential nil pointer dereference * tidy * Update SuperAuthority interface to support local-safe fallback * Remove unnecessary nil checks on logger --------- Co-authored-by: axelKingsley <axel.kingsley@gmail.com>
* refactor: add InitMessage struct and update SendInitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update SendRandomInitMessage to return InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update invalid_message_reorg_test.go to use InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update cross_message_test.go to use InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update interop_happy_tx_test.go to use InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update interop_mon_test.go to use InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update upgrade/post_test.go to use InitMessage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update remaining op-acceptance-tests to use InitMessage Updates upgrade/pre_test.go and interop_msg_test.go to use the new InitMessage pattern. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: update kona supervisor tests to use InitMessage Updates all kona supervisor test files to use the new InitMessage pattern: - message/interop_happy_tx_test.go - message/interop_msg_test.go - pre_interop/post_test.go - pre_interop/pre_test.go - rpc/rpc_test.go Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: add convenience accessors to InitMessage Add BlockNumber(), TxHash(), and BlockHash() methods to InitMessage for direct access to commonly-used Receipt fields. Update all test files to use these new accessors instead of accessing Receipt fields directly. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: simplify SendExecMessage to accept InitMessage Update SendExecMessage and SendInvalidExecMessage to accept InitMessage directly instead of IntentTx. Remove the eventIdx parameter which was always 0. This simplifies the API and makes the relationship between init and exec messages clearer. Updated all call sites across op-acceptance-tests and kona tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: introduce ExecMessage struct Create ExecMessage struct to encapsulate exec transaction intent and receipt, mirroring the InitMessage pattern. Add convenience accessors BlockNumber(), TxHash(), and BlockHash(). Update SendExecMessage and SendInvalidExecMessage to return ExecMessage. Update all call sites across op-acceptance-tests and kona tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Introduce BlockID method. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Simplify logging of init and exec messages. --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
…s. (#19229) * op-acceptance: Add tests to prove validation of valid interop messages. * kona-proofs: Fix interop header_by_number lookup. Previously it would often enter an infinite loop because it would always look up the current block header and return that, never making any progress.
The commit modifies the configuration handling for interop activation timestamp to use a pointer, allowing explicit nil state and more flexible configuration across several files in the op-supernode and op-devstack packages.
* chore: update to Reth 1.11.0 commit * Use tag instead of rev for reth deps
kona-client is an FPVM guest program (#![no_std]) with no CLI argument handling. The `--version` smoke test doesn't apply to it. Fixes #19255
…8873) Introduce a unified Registry type that can replace the 14+ separate locks.RWMap instances in the Orchestrator. The Registry provides: - Single map storage keyed by ComponentID (from Phase 1) - Secondary indexes by ComponentKind and ChainID for efficient queries - Type-safe generic accessor functions (RegistryGet, RegistryGetByKind, etc.) - Thread-safe concurrent access via sync.RWMutex - Registrable interface for self-registering components Also adds HasChainID() helper to ComponentID to reduce code duplication. This is Phase 2 of the ID type system refactor. The Registry is designed to coexist with existing RWMap fields during incremental migration. Amendments: * op-devstack: avoid calling range callbacks under lock
…artifact output paths (#19251) Move kona-node, op-reth, and related docker image references from ghcr.io (op-rs/kona, paradigmxyz) to the oplabs-tools-artifacts GCP registry. Also fix the prestate build output directory to use an absolute path and update CI to write artifacts to a dedicated per-kind directory. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…19189) * Refactor Finalized Head Management in EngineController This commit updates the engine controller to introduce a more flexible finalized head management approach. Key changes include: - Introduce `FinalizedHead()` method to dynamically select finalized head - Deprecate direct `finalizedHead` field in favor of new method - Add support * add stubs * Implement FinalizedL2Head with cross-verifier consensus check * WIP * Update FinalizedL2Head method with improved fallback logic The changes modify the `FinalizedL2Head` method in multiple files to: - Introduce a second return value to signal when local finalized head should be used - Handle cases with no registered verifiers - Provide more detailed logging - Improve error handling for unfinalized verifier states * Refactor Interop Service Finalized L2 Block Tracking The commit introduces a robust implementation for tracking finalized L2 blocks in the Interop service. Key changes include: - Implement `LatestFinalizedL2Block` method with logic to find the latest verified L2 block based on the finalized L1 block - Add finalized L2 head tracking in `mockSuperAuthority` for testing - Expand test coverage for finalized head progression in `head_progression_test.go` * Rename Test to Better Describe Safe Head Progression * Add Safe and Finalized Head Progression Checks Extend head progression test to verify both safe and finalized block progression in the supernode interop scenario. Ensures that both safe and finalized heads stall when interop activity is paused and correctly catch * Update Supernode interop safe head progression test This commit enhances the `TestSupernodeInterop_SafeHeadProgression` test by adding an additional validation step. It now checks that the L1 origin of finalized L2 blocks is at or behind the L1 finalized head, providing an extra layer of sanity checking for cross-chain head progression. * Return to Genesis Block as Safe/Finalized Head Fallback This change modifies the `SafeL2Head()` and `FinalizedHead()` methods to return the genesis block when no safe or finalized head is yet established, instead of returning an empty `L2BlockRef`. The key changes are: - Fetch the genesis block from the engine when no safe/finalized head is available - Panic if the genesis block cannot be retrieved, as this represents a critical system failure * Add time travel to supernode interop tests * Update Interop verification to include L1 head context * Replace `L1Head` with `L1Inclusion` in interop functionality * lint * Add FinalizedHead tests to engine and supernode * engine-controller: update localFinalizedHead * Update SafeL2Head test to return genesis block with empty SuperAuthority * add comment * interop activity: expose VerifiedBlockAtL1 instead of LatestFinalizedL2Block the chain container calls this with the finalized l1 of its virtual node, in order to satisfy the FinalizedL2Head() API * interop algo: update result.L1Inclusion semantics the earliest L1 block such that all L2 blocks at the supplied timestamp were derived from a source at or before that L1 block * interop verification: return error when there are no chains add unit test coverage for the algo * remove unused fn * do not panic if we cannot get genesis block from engine * fix test * add comments * tidy
…anged transactions (#19030)
* ci: Switch auth used to publish kona prestates. * ci: Only publish kona prestates on push to develop, not scheduled builds.
The workflow used `or` logic, causing it to run on any scheduled pipeline with branch=develop or any webhook push to any branch. Change to `and` so it only fires on webhook pushes to develop. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…19275) * test(contracts): improve DelayedWETH test coverage with fuzz tests - Convert unlock tests to fuzz: testFuzz_unlock_once_succeeds, testFuzz_unlock_twice_succeeds - Convert withdraw success tests to fuzz: testFuzz_withdraw_whileUnlocked_succeeds, testFuzz_withdraw_withdrawFromWhileUnlocked_succeeds - Convert hold tests to fuzz: testFuzz_hold_byOwner_succeeds, testFuzz_hold_withoutAmount_succeeds, testFuzz_hold_byNonOwner_fails - Convert recover tests to fuzz: testFuzz_recover_byNonOwner_fails, testFuzz_recover_moreThanBalance_succeeds - Add testFuzz_recover_partialAmount_succeeds for _wad < balance branch - Add testFuzz_hold_withoutAmount_byNonOwner_fails for hold(address) non-owner access control - Add DelayedWETH_Version_Test with SemverComp.parse validation * fix(test): rename hold test to satisfy 4-part naming convention --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
kona-host is built in the kona-build-release job already.
* ci: disable incremental compilation and bump rust cache version - Set CARGO_INCREMENTAL=0 in rust-setup-env to disable incremental compilation for all Rust CI jobs, reducing cache size and improving reproducibility - Bump rust build cache version from 15 to 16 to invalidate stale caches - Use a YAML anchor in main.yml so the cache version only needs to be set once Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(ci): remove stale ci jobs * ci: pin nightly toolchain and add weekly bump job - Add c-rust-nightly-version pipeline parameter (pinned to nightly-2025-11-01) to prevent surprise breakages from transitive deps incompatible with the latest nightly (e.g. shellexpand-3.1.1) - Update rust-install-toolchain to link a pinned nightly as "nightly" so existing `cargo +nightly` commands keep working - Replace all hardcoded `toolchain_version: nightly` with the parameter - Add rust-bump-nightly-pin job that opens a PR each week bumping the pin to the latest available nightly - Add scheduled-rust-nightly-bump workflow triggering on build_weekly Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…19254) * proofs: Port TestInteropFaultProofs_UnsafeProposal test to devstack * Fix unsafe proposal test to deterministically order safe heads
* feat: policy engine staking * feat: slots tests * fix: pre-pr * fix: linter * fix: linter * feat: inmutable contract * fix: check link to self * fix: natspec * fix: make * feat: improving code * feat: improving code * fix: lint * fix: comments * fix: comments * feat: improving tests * fix: linter * fix: linter * style: formatting * style: formatting * style: formatting * feat polish improvments and comments * feat: polish and comments * feat: sender and fuzz * fix: bugs and sender * fix: natspec * feat: policy engine refactor (#867) * feat: add V2 policy engine implementation * chore: undo foundry.toml modification * fix: stake function available if not allowlisted * refactor: rename PolicyEngineStakingV2 -> PolicyEngineStaking * refactor: remove stake function, add allowlist check when same beneficiary * refactor: make peData functions arg uint128 * chore: add comments * test: add fuzz testing * test: max approval on setup * refactor: remove helper function * chore: make link not puasable * feat: rename functions, add token to constructor * feat: add deployment script * fix: wrong foundry.toml * fix: pr (#868) * chore: make owner address public * refactor: rename data->stakingData * docs: natspec * refactor: improve checks * fix: pre-pr * fix: foundry.toml * fix: comments and link * chore: bump solidity version * feat: add named members in mapping * fix: revert contract creation on zero address * refactor: reduce parameters size * chore: undo unnecessary casting * fix: revert on same beneficiary linking * perf: optimize stake() sstores * feat: add transferOwnership * refactor: update stakedAmount after decrease * chore: make change beneficiary pausable * feat: unlink after allowance revoked * refactor: remove linking concept and use beneficiary instead * docs: improve natspec * test: stake() after being revoked reverts * feat: add ISemver * fix: conflicts * refactor: improve var naming * test: transferOwnership * refactor; vars naming * chore: improve comments * chore downgrade pragma * fix: pre-pr * fix: wrong foundry.toml * chore: improve comments * fix: ci failing * fix: pre-pr * fix: self allowlist * feat: disable self-allowlist * docs: improve natspec --------- Co-authored-by: Chiin <77933451+0xChin@users.noreply.github.com> Co-authored-by: 0xOneTony <112496816+0xOneTony@users.noreply.github.com> Co-authored-by: OneTony <onetony@defi.sucks>
* op-supernode: add TestCleanShutdown return from supernode.Start() function without waiting for the context to be cancelled * improve test * pass bg context to supernode start in test * mock runnable activity: calling stop causes start to return this mirrors the interop activity, for example * op-supernode: several improvements to lifecycle management * improve robustness of TestRunnableActivityGating since activities are started async and we don't have a way to wait on them, there is a race betwen start and stop in this test * reinstate fix
… 3) (#18874) Introduce L2ELCapable interface that captures shared behavior across L2ELNode, RollupBoostNode, and OPRBuilderNode without requiring them to share an ID() method signature. This enables polymorphic lookups where code can find any L2 EL-capable component by key+chainID, regardless of concrete type: sequencer, ok := FindL2ELCapableByKey(registry, "sequencer", chainID) Previously this required manual multi-registry lookups checking each type separately.
* feat: add Karst hard fork activation Adds the forking logic for the Karst network upgrade, following the same pattern as the Jovian activation (PR #13722). * feat: Update to op-geth with karst fork * fix: add Karst to genesis allocs, deploy config, and fork numbering Fixes interop test failures caused by Solidity Fork enum and Go SolidityForkNumber being out of sync after Karst addition. * fix: enable KarstTime in applyHardforks op-geth now includes KarstTime in HardforkConfig, so the TODO guard is no longer needed. * fix: add Karst to deploy config test fork overrides The fork ordering validation requires karst before interop. * fix: exclude Karst from upgrade-tx batch test Karst has no upgrade deposit transactions, so user txs in its activation block should not be rejected. * fix: add Karst to remaining e2e and op-wheel files Cover the remaining files that had Jovian entries but were missing Karst equivalents.
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.
No description provided.