Inomurko/opreth v1.11.5 fix#3
Closed
InoMurko wants to merge 219 commits intobranch-op-reth/v1.11.5from
Closed
Conversation
…thereum-optimism#19791) * feat(op-e2e): convert faultproofs tests from CANNON to CANNON_KONA game type Switch all op-e2e faultproofs tests to use CANNON_KONA (game type 8) and SUPER_CANNON_KONA (game type 9) instead of CANNON (0) and SUPER_CANNON (4). This exercises the kona-host/kona-client path rather than op-program. Key changes: - Register game type 8 in e2e allocs with kona prestate hash - Add WithCannonKona and WithSuperCannonKona challenger helpers - Parameterize NewTraceProviderForTest to accept explicit vm config/executor - Update all dispute game helpers to use kona config and KonaExecutor - Set CannonKonaAbsolutePreState path in applyCannonKonaConfig - Update runCannon, multi_test, and interop proposer to use kona - CI: add rust-binaries-for-sysgo dependency for kona-host binary Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(ci): add rust-workspace-binaries to develop-fault-proofs workflow The develop-fault-proofs workflow is standalone and doesn't include the rust build jobs from the main develop workflow. Add rust-workspace-binaries directly so kona-host is available for op-e2e-cannon-tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(op-e2e): register SuperCannonKona game type via kona prestate in interop migration Pass the kona prestate hash in the interop migration config so the V1 migrator registers SUPER_CANNON_KONA (type 9) on the dispute game factory. This allows the proposer to create type 9 games and the challenger to respond using kona-host. - Add DisputeKonaAbsolutePrestate to L2Config - Pass CannonKonaPrestate in MigrateInterop chain configs - Set kona prestate hash in interop recipe Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-e2e): use KonaSuperExecutor for super cannon tests The super cannon tests run in interop mode with multiple L2 chains. KonaExecutor only supports single-chain mode and rejects multiple L2s. Use KonaSuperExecutor which passes the --l2-node-addresses flag for multi-chain support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-chain-ops): fix goimports alignment in interopgen Align struct fields and literal values to the longest field name (DisputeKonaAbsolutePrestate) to satisfy goimports formatting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(cannon): filter PreimageLargerThan by keccak key type In tests, kona-host loads the L1 config as a local preimage (type 0x01) which can be >1.4MB. This caused --stop-at-preimage-larger-than to stop at the L1 config instead of the actual large keccak batch data, preventing the challenger from uploading the preimage via the large preimage path. Two changes: - cannon: when both --stop-at-preimage-type and --stop-at-preimage-larger-than are specified, AND the conditions instead of treating them as independent OR - op-challenger: PreimageLargerThan now also passes --stop-at-preimage-type keccak to filter out local preimages Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: add kona-host binary verification step Add a diagnostic step to verify kona-host is available and runnable on the CI machine executor before running tests. Checks ldd output to diagnose potential libc compatibility issues. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(ci): build kona-host natively on machine executor The kona-host binary built in the Docker-based rust-build-binary job requires GLIBC_2.38, but the CircleCI machine executor has an older glibc. Build kona-host directly on the machine executor to ensure binary compatibility. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(ci): switch fault proof tests from machine to docker executor The kona-host binary built in the Docker-based rust-build-binary job requires GLIBC_2.38, but the CircleCI machine executor has an older glibc. Switch to a Docker executor using the same base image so the workspace-attached kona-host binary is compatible. Use 2xlarge Docker resource class (16 vCPU/32GB) to match the memory of the previous machine xlarge executor (8 vCPU/32GB). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-e2e): correct kona interop prestate hash and add preimage verification logging - Fix DisputeKonaAbsolutePrestate in interop recipe to use the actual kona interop prestate hash instead of the op-program prestate hash - Add preimage data verification and logging in SuperCannonGameHelper ChallengeToPreimageLoad to aid debugging when FindStep returns a step without preimage data Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-devstack): remove redundant CannonKonaAbsolutePreStateBaseURL When CannonKonaAbsolutePreState (file path) is set, the prestate source uses SinglePrestateSource and never consults the base URL. Remove the dead assignment to match how applyCannonConfig handles it. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…execution (ethereum-optimism#19850) During `re_execute_deposit_only` in the consolidation loop, kona walks the transactions trie of the invalid block to extract deposit transactions. Without first sending an `L2Transactions` hint to the host, the trie nodes are never pre-fetched into the preimage oracle's key-value store. This causes `trie_node_by_hash` (called synchronously via `block_on`) to hang indefinitely waiting for data that was never requested. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…um-optimism#19849) The dependency set config contains the message expiry window override needed for kona to detect expired messages. Without this flag, kona falls back to the hardcoded 7-day default. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-optimism#19631) * feat: port TestInteropFaultProofs_DepositMessage to op-acceptance-tests Port the deposit message fault proof test from op-e2e to the op-acceptance-tests framework. This test verifies that the fault proof system correctly handles consolidation when a cross-chain interop message is initiated via an L1 deposit transaction rather than a regular L2 transaction. The test deploys an EventLogger on chain A, deposits an emitLog call via OptimismPortal2 on L1, waits for the deposit to be derived on L2, then executes the cross-chain message on chain B and validates the consolidation step through both kona FPP and challenger provider. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: delete ported TestInteropFaultProofs_DepositMessage from op-e2e The valid-deposit variant is now covered by the acceptance test. The _InvalidExecution variant remains in op-e2e until ported. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: add DepositEOA DSL abstraction for deposit-initiated interop messages Introduces EOA.ViaDepositTx() which returns a DepositEOA that routes initiating messages through L1 deposit transactions. This encapsulates the OptimismPortal2 interaction, L2 derivation wait, and InteropOutput construction, making deposit-based tests as concise as direct L2 tests. Refactors RunDepositMessageTest to use the new abstraction, reducing ~70 lines of plumbing to 3 lines matching the pattern used by RunConsolidateValidCrossChainMessageTest. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: separate generic deposit tx from init message logic in DepositEOA Extract DepositTx() as a general-purpose method for sending any L2 transaction via L1 deposit, then build SendInitMessage on top of it. Simplify SendRandomInitMessage to take just rng and eventLoggerAddress. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: lint issues — use bigs.Uint64Strict, fix goimports formatting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…thereum-optimism#19885) The test captured a stale L2 block reference immediately after reorg detection, then asserted its L1 origin number — which was racy because the sequencer may not have finished rebuilding with the new L1 view. Add WaitL1OriginHash to the devstack DSL, which polls until the L2 chain at a given label references a specific L1 block by hash. It handles the case where the safe head overshoots the target L1 origin by walking back through L2 blocks. Replace the racy assertion with WaitL1OriginHash to verify the safe head actually adopted the new L1 fork. Simplify the verifier check to just Matched (if ELB's safe head matches EL's, the reorg was applied correctly). Remove unnecessary divergence checks and Cleanup. Fixes ethereum-optimism#19884 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ethereum-optimism#19890) * fix(kona): skip re-validating deposit-only blocks during consolidation During iterative superchain consolidation, chains that have already been replaced with deposit-only blocks were still being passed to MessageGraph for validation. This was unnecessary work since deposit-only blocks cannot contain executing messages. The Go implementation avoids this via an isReplaced check before validation. Track replaced chain IDs and filter them out of the headers passed to MessageGraph::derive, matching the Go approach. The assert in re_execute_deposit_only is retained with a better error message since it now represents a true invariant violation. Adds a test verifying that executing messages referencing initiating messages from a replaced (filtered-out) chain still resolve correctly via the provider. Closes ethereum-optimism/optimism-private#501 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(kona): remove redundant deposit-only assert in re_execute_deposit_only With replaced chains filtered out before MessageGraph::derive, a deposit-only block cannot reach re_execute_deposit_only through normal flow. Remove the assert that checked every block's transactions for this impossible case. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ism#19839) * feat(op-supernode): persist full Output in DenyList for optimistic root computation Made-with: Cursor * address PR comments Made-with: Cursor
…nd oversized payloads (ethereum-optimism#19904) Add two bounds checks to `read_tx_data` before indexing into the slice: 1. Reject payloads exceeding `MAX_SPAN_BATCH_ELEMENTS` with `TooBigSpanBatchSize`, matching op-node's `rlp.NewStream(r, MaxSpanBatchElementCount)` behavior. Without this, kona accepts oversized transactions that op-node rejects, causing a consensus divergence. (Cantina finding ethereum-optimism#28) 2. Reject truncated payloads where `payload_length_with_header` exceeds the remaining buffer, preventing a panic on malformed input. (Cantina finding ethereum-optimism#25, item 4) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Before this commit, we had sysgo.Options and presets.Options. In practice, the sysgo.Options are unused. This commit removes them.
…thereum-optimism#19894) * fix(kona): remove obsolete replacement deposit tx from consolidation The interop spec no longer includes an "optimistic block deposited transaction" in deposit-only replacement blocks. The supernode already builds replacement blocks with only the original deposit transactions (L1Info tx), but Kona was still appending an additional replacement deposit tx encoding the original block's output root. This caused a state root mismatch between the supernode's replacement block and Kona's, making TestInteropFaultProofs_InvalidBlock fail. Remove the craft_replacement_transaction call and dead code, and unskip the test. Closes ethereum-optimism#19411 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * keep test skipped until dependencies are merged The test requires ethereum-optimism#19890 (skip re-validating deposit-only blocks) and the L2Transactions hint fix from develop to pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eum-optimism#19630) * feat: port TestInteropFaultProofs_PreForkActivation to op-acceptance-tests Port the pre-fork activation interop fault proof test from op-e2e to the op-acceptance-tests framework. The test verifies super-root transitions produce correct results when the interop fork is scheduled but not yet active. Remains skipped per ethereum-optimism#16166. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: unskip PreForkActivation test The op-e2e version was skipped pending ethereum-optimism#16166, but the acceptance test should run to verify the current state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: skip TestInteropFaultProofs_PreForkActivation pending ethereum-optimism#16166 WithSuggestedInteropActivationOffset is a deployer option, which the supernode proofs preset does not support. The original op-e2e test was skipped for the same reason. Re-skip until the underlying issue is resolved. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: support deployer options in supernode proofs preset The supernodeProofsPresetSupportedOptionKinds only allowed optionKindChallengerCannonKona, but WithSuggestedInteropActivationOffset returns a deployer option. Add optionKindDeployer to the supported kinds, matching how other supernode presets (twoL2Supernode) already support it. This unskips TestInteropFaultProofs_PreForkActivation which was incorrectly skipped due to ethereum-optimism#16166 (a supervisor-based issue that doesn't apply to the supernode-based acceptance tests). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(op-e2e): delete PreForkActivation action test ported to acceptance tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-acceptance): send interop messages in PreForkActivation test The ported PreForkActivation test was missing the interop message sending that the original action test had. Add back: - An initiating message on chain A via EventLogger - An executing message on chain B calling CrossL2Inbox (which reverts because interop is not yet active) To support this, extend SendExecMessage with an opts pattern: - WithFixedGasLimit: bypasses eth_estimateGas for reverting txs - WithExpectRevert: asserts ReceiptStatusFailed instead of log count This ensures the proof system is tested with interop-related transactions in the blocks, matching the original test's intent. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs(ai): add acceptance test guide, skill, and justfile improvements Add docs/ai/acceptance-tests.md covering how to build dependencies and run acceptance tests locally. Add a run-acceptance-tests skill for AI agents. Refactor op-acceptance-tests/justfile to extract build-deps target and add a lightweight `just test` target for running individual tests with automatic dependency building. Remove git submodule update from local builds to avoid reverting in-progress submodule work. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(ai): address PR review — deduplicate skill/doc, add mise exec prefix Slim down the acceptance test skill to a thin wrapper that @-includes the doc. Add `mise exec --` prefix to all just commands since AI agent shells don't have mise activated. Document mise setup in dev-workflow.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…19899) * fix(op-reth): stabilize flaky TestExecutePayloadSuccess Wait for the validator to sync the sequencer's blocks before querying its state. The funder creates blocks on the sequencer, but the validator may have updated its unsafe head before fully processing the block state, causing "no state found" errors in PayloadExecutionWitness. This matches the pattern used by other tests in the same package (TestDebugExecutionWitness, TestStorageProofUsingSimpleStorageContract). Closes ethereum-optimism#19898 * fix(op-reth): improve comment accuracy in execute_payload_test Clarify that the race is with the proofs ExEx store, not native state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
reference historical proofs guide in op-geth deprecation notice
…ptimism#19795) * refactor(contracts): remove OPCMv1 from all Solidity code Delete OPContractsManager v1 contract, interface, tests, snapshots, and all v1/v2 branching logic. OPContractsManagerV2 is now the sole OPCM — all deploy scripts and test infrastructure use V2 exclusively. Key changes: - Delete OPContractsManager.sol (2203 lines, 7 inner contracts) - Gut IOPContractsManager.sol interface to empty - Remove DevFeatures.OPCM_V2 flag and Constants.OPCM_V2_MIN_VERSION - Remove AddGameType.s.sol (v1-only script) - Remove opcm-upgrade-checks (v1-only CI check) - Update all deploy scripts to unconditionally use V2 types - Update all test files to remove v1 branches and assertions - Delete 12 v1 snapshot files (ABI + storage layout) V2 contracts in src/L1/opcm/ are untouched (zero V1 dependencies). This is PR 1 of the OPCMv1 removal series. Go code and CI matrix changes follow in subsequent PRs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(contracts): keep deprecated v1 struct fields for Go ABI compat Add back v1 OPCM fields as address/bytes32 placeholders in Solidity script structs to maintain ABI compatibility with Go op-deployer. - DeployImplementations.Output: 6 deprecated address fields (always zero) - ReadSuperchainDeployment.Input: opcmAddress field (ignored) - ReadSuperchainDeployment.Output: 5 ProtocolVersions fields (always zero) These fields are never populated — they exist solely so Go's ABI encoding matches the Solidity struct layout. They will be removed atomically with the Go struct fields in a follow-up PR. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-deployer): remove v1 OPCM branching to match Solidity changes Update Go op-deployer to unconditionally use OPCMv2 instead of branching on the OPCM_V2 dev feature flag, matching the Solidity contract deletion. - opchain.go: unconditionally use OpcmV2Impl instead of defaulting to v1 OpcmImpl - init.go: update ReadSuperchainDeployment call for new struct layout - artifacts.go: point Opcm mapping to V2 artifact, remove 5 deleted v1 sub-contract artifact mappings - Tests updated to match new behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-deployer): populate OpcmImpl with v2 address for downstream compat Since v1 OPContractsManager is deleted, dio.Opcm is always zero. Populate OpcmImpl with dio.OpcmV2 so downstream consumers (op-devstack, e2e tests) get a valid OPCM address. The OpcmImpl field will be renamed/removed in the follow-up Go PR. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-devstack): remove v1 migrate path, use v2 migrator ABI The v1 OPCM Go bindings are stale (v1 contract deleted), so superroot.go can no longer use OPContractsManagerMetaData to ABI-encode migrate calls. Remove the v1 path entirely and use an inline v2 migrator ABI for the migrate call. - Remove isOPCMV2 version check (always v2 now) - Remove v1 MigrateInput path with UsePermissionlessGame/GameParameters - Add OPContractsManagerMigratorABI() helper with inline v2 ABI JSON - Remove unused deployer import and versionFn var Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-deployer): update test assertions for v1 OPCM removal - apply_test: OpcmImpl now equals OpcmV2Impl (not zero) - implementations_test: check OpcmV2 instead of Opcm (deprecated zero field) - migrate_test: remove opcm-v1 test case from table-driven test - migrate_test (CLI): skip TestCLIMigrateV1 (v1 contract deleted) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(op-devstack): remove unused getInteropCannonKonaAbsolutePrestate Dead code left behind when v1 migration path was removed. Caught by go-lint CI check. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: update tests for v1 OPCM removal - Add vm.assume to exclude OPCM address from fuzz inputs in migrate test (triggers _onlyDelegateCall instead of expected ProxyAdminOwnerMismatch) - Change implsOutput.Opcm → implsOutput.OpcmV2 in bootstrap test assertions (Opcm field is always zero now that v1 is deleted) - Add OpcmV2Impl to manual state population in migrate tests so opchain.go can find the OPCM address - Remove v6.0.0-rc.2 upgrade test case (v1 OPCM on Sepolia, embedded artifacts no longer support v1 upgrades) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-devstack): use V2 upgrade path for addGameType The AddGameType.s.sol script was deleted as part of OPCMv1 removal. Rewrite addGameTypeForRuntime to use the V2 upgrade path (UpgradeOPChain.s.sol with UpgradeInputV2/DisputeGameConfig) instead of the deleted V1 AddGameType script. Also skip TestAddGameType in manage package since it depends on the deleted script. The V2 equivalent is TestManageAddGameTypeV2_CLI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-devstack): send all 3 game configs in V2 upgrade OPCMv2.upgrade() requires exactly 3 dispute game configs in order (CANNON, PERMISSIONED_CANNON, CANNON_KONA). The previous commit only sent 1 config per game type, causing InvalidGameConfigs revert. Restructure addGameTypesForRuntime to build all 3 configs in a single upgrade call: requested game types are enabled, others are disabled. Also add the required PermittedProxyDeployment extra instruction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: use OpcmV2 in interopgen and apply tests - interopgen/deploy.go: use superDeployment.OpcmV2 instead of .Opcm (v1 field is always zero now). Fixes all interop/devstack tests. - apply_test.go: TestEndToEndBootstrapApply now uses OPCMV2DevFlag and impls.OpcmV2 (v1 path no longer exists). - apply_test.go: remove "default" (non-V2) test case from TestEndToEndBootstrapApplyWithUpgrade. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: use V2 migrate input in interopgen, fix apply test - interopgen/deploy.go: convert MigrateInputV1 to MigrateInputV2 since InteropMigration.s.sol no longer supports V1 format. V2 uses ChainSystemConfigs + DisputeGameConfigs instead of OpChainConfigs. - apply_test.go: revert DevFeatureBitmap back to empty (V2 is default now, no flag needed). Set SuperchainConfigProxy in intent so the pipeline doesn't try to resolve it from OPCM (V2 OPCM doesn't expose superchainConfig() directly). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-deployer): set OpcmV2Impl in init when OPCM is pre-deployed When an OPCM address is provided via intent.OPCMAddress (pre-deployed), the init stage only populated OpcmImpl. The opchain stage reads OpcmV2Impl, which was left as zero, causing "OPCM implementation is not deployed" error. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: regenerate semver-lock.json after rebase Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(contracts): add missing imports after rebase conflict resolution DevFeatures and GameType/GameTypes imports were dropped when removing v1 IOPContractsManager imports during rebase conflict resolution. Regenerate semver-lock.json. Includes linter auto-fixes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-devstack): send all 6 game configs for V2 upgrade After rebase, the V2 contract now requires 6 game types (including super root types) instead of 3. Add SUPER_CANNON, SUPER_PERMISSIONED_CANNON, SUPER_CANNON_KONA as disabled configs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-e2e): include tx value in proposer sendTx for init bond V2 OPCM sets initBonds[PERMISSIONED_CANNON] = 0.08 ether via DEFAULT_INIT_BOND. DisputeGameFactory.create() requires msg.value to match the init bond. The test's sendTx was dropping the Value field from the TxCandidate, sending msg.value=0 which reverts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(interopgen): register SUPER_CANNON in migrate DisputeGameConfigs The interop migration only configured game type 0 (CANNON) but the proposer uses game type 4 (SUPER_CANNON) as the respected game type. DisputeGameFactory.create(4, ...) reverted with NoImplementation because no implementation was registered for type 4. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-devstack): register all super game types in migrate The V1 migrate path registered SUPER_CANNON, SUPER_PERMISSIONED_CANNON, and SUPER_CANNON_KONA from OpChainConfigs. The V2 path only registered SUPER_CANNON, causing: - TestPreinteropSingleChainFaultProofs: challenger can't find SUPER_CANNON_KONA implementation for split depth query - TestProposals: factory has no SUPER_CANNON implementation (interopgen path) Register all 3 super game types in both superroot.go and interopgen deploy.go migrate paths. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: goimports formatting in superroot.go Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: review improvements — version guards, artifact ABI, stale bindings - Add version guards to UpgradeOPChain.s.sol and InteropMigration.s.sol: require OPCM >= v7.0.0 with descriptive error instead of silent revert - Replace inline ABI JSON in superroot.go with forge artifact loading - Remove bindings.Proposal dependency, define Proposal struct locally - Remove stale op-e2e/bindings/opcontractsmanager.go (v1 dead code) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(interopgen): register Super Cannon Kona game type in V2 migration The V1→V2 migration conversion only registered game types 0 (Cannon) and 4 (Super Cannon), missing type 9 (Super Cannon Kona). The proposer creates games of type 9, so TestProposals timed out waiting for a game that could never be created. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(contracts): restore and migrate StandardValidator tests to V2 The test suite was deleted as part of the OPCMv1 removal, but it should have been migrated to V2 types instead. This restores it with: - Remove IOPContractsManager (v1) imports, use deploy.cfg() for config - Remove DevFeatures.OPCM_V2 branching, keep V2 path unconditionally - Remove v1-only addGameType/newGameInputFactory helpers - Simplify DelayedWETH tests by removing v1/v2 assertion branches - Remove unused IBigStepper import Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: remove narration comments about v1/v2 migration Strip comments that just explain "this is V2 now" or "OPCMv1 has been removed" — the code is self-evident after the removal. Kept comments that explain why deprecated zero-valued struct fields exist (Go ABI compatibility). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#19787) * ci: run reth and kona against all acceptance tests Remove the base gate from the op-node/op-reth and kona/op-reth CI jobs so they run all acceptance tests instead of only the base subset. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * op-acceptance-tests: remove gate concept Gates are no longer needed now that all acceptance tests run for every implementation variant. Skips are defined inside individual tests instead. - Remove gate parameter from op-acceptance-tests justfile. - Remove gate parameter from CircleCI op-acceptance-tests job. - Remove gates/base.txt. - Update kona tests justfile and README. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * decrease test timeout * op-acceptance-tests: add skips for op-reth failures See this workflow. I also reran the failing tests locally to ensure these aren't simple flakes. https://app.circleci.com/pipelines/github/ethereum-optimism/optimism/121247/workflows/38caeea6-ffda-4f83-a135-61a3864348bd/jobs/4699628/tests * op-acceptance-tests: add skips for kona-node failures See this ci run. The previous commit already skips many of these since they are op-reth failures. I ran all of the remaining tests locally and removed the ones that succeeded: all that remain are the ones that are actual failures or very intermittent flakes. https://app.circleci.com/pipelines/github/ethereum-optimism/optimism/121247/workflows/38caeea6-ffda-4f83-a135-61a3864348bd/jobs/4699629/tests * remove builder_jwts * flaky * fix bug * more fixes --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ptimism#18922) * contracts: remove deploy config JSON dependency for tests Remove the requirement for deploy config JSON files (especially hardhat.json) when running Solidity unit tests. The JSON files were only used for setting up test environments and are no longer used for production deployments. Changes: - Add `_initDefaults()` function to DeployConfig.s.sol that sets hardcoded default values (previously from hardhat.json) - Modify `read()` to call `_initDefaults()` when passed an empty path, and revert with an error when a non-empty path points to a missing file - Update Deployer.setUp() to call `cfg.read("")` in test context (using vm.isContext) to use hardcoded defaults - Delete all deploy-config/*.json files as they are no longer needed This makes tests faster by avoiding JSON file I/O and removes the coupling between test setup and config files. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * contracts: remove validate-deploy-configs CI job and tooling Remove the legacy deploy config JSON validation infrastructure: - Delete check-deploy-configs.sh script - Delete op-chain-ops/cmd/check-deploy-config Go tool - Remove CI job from CircleCI config - Remove check from checks.yaml and justfile Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * contracts: remove DEPLOY_CONFIG_PATH from kontrol summary script The legacy deploy config JSON is no longer used. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * contracts: add KONTROL_CONTEXT env var for kontrol scripts Add isKontrolContext() helper to Config.sol that checks for KONTROL_CONTEXT env var. Update Deployer.setUp() to use hardcoded defaults when running in kontrol context, similar to test context behavior. This allows kontrol scripts to run without requiring DEPLOY_CONFIG_PATH while maintaining strict behavior for production scripts. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * contracts: fix formatting after rebase Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * contracts: remove dead hardhat.json fallback from deployConfigPath The test-context branch returned a path to the now-deleted hardhat.json file. Tests no longer call this function since Deployer.setUp() uses _initDefaults() directly. Remove the dead branch so deployConfigPath() always requires DEPLOY_CONFIG_PATH. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * contracts: remove deploy-config/ fs permission from foundry.toml The deploy-config/ directory no longer exists, so the read permission entry is dead configuration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * contracts: use custom error in DeployConfig Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…e op feature (ethereum-optimism#19854) * feat(alloy-op-evm): upgrade alloy-evm to 0.30.0 and bump version to 0.30.0 Update alloy-op-evm to work with alloy-evm 0.30.0, which removes the 'op' feature and bumps revm to v36. Key changes: - Remove 'op' feature from alloy-evm dependency - Bump revm 34->36, op-revm 15->17, and related crates - Add OpTx newtype wrapper with trait impls (FromRecoveredTx, FromTxWithEncoded, IntoTxEnv, etc.) previously in alloy-evm's op feature - Default OpEvm/OpEvmFactory Tx parameter to OpTx - Add into_result() to TxResult impl - Remove set_state_clear_flag (removed in revm 36) - Handle new BlockEnv::slot_num field (EIP-7843) - Update BlockExecutorFactory::create_executor signature for new API - Bump alloy-op-evm version to 0.30.0 * rust: bump reth to e3dbdbb, revm to 36, alloy to 1.8.2, op-alloy to 0.24.0 Upgrade the Rust workspace dependencies: - reth: v1.11.3 tag -> main @ e3dbdbb - reth-core: reth-codecs, reth-primitives-traits, reth-zstd-compressors moved to crates.io 0.1.0 - revm: 34 -> 36, op-revm: 15 -> 17, revm-inspectors: 0.34 -> 0.36 - alloy-evm: 0.27.2 -> 0.29.2, alloy main crates: 1.6.3 -> 1.8.2 - alloy-chains: 0.2.30 -> 0.2.33, alloy-eip7928: 0.3.2 -> 0.3.3 - op-alloy crates: 0.23.1 -> 0.24.0, alloy-op-evm: 0.26.3 -> 0.28.0 - rollup-boost: crates.io 0.7.13 -> git bc4518c - Rust toolchain: 1.92 -> 1.94 Key changes: - Removed stale op features from reth-db, reth-db-api, reth-primitives-traits, reth-codecs, reth-payload-primitives - Removed edge feature (no longer in reth) - Added InMemorySize, Compact, Compress, Decompress, SignerRecoverable impls for OP types in op-alloy-consensus (behind reth-core/reth-codec features) - Adapted to reth API changes: StateProvider, Decompress, BlockEnv, TxResult, TaskSpawner -> Runtime, PayloadTypes, TryIntoTxEnv, etc. - Introduced OpExecData/OpPayloadAttrs newtypes for orphan rule compliance with ExecutionPayload/PayloadAttributes traits - Updated Dockerfile and CI config for Rust 1.94 - Fixed zepter feature propagation * refactor(op-reth): remove op feature from reth-engine-local Inline the PayloadAttributesBuilder logic directly into OpLocalPayloadAttributesBuilder, removing the dependency on the upstream reth-engine-local 'op' feature flag entirely. * fix(sysgo): make proof history configurable in op-reth test framework Make proof history conditional on L2ELConfig.ProofHistory and enabled by default (matching previous behavior). Also capture stderr from proofs init to aid debugging if it fails. * feat(alloy-op-evm): upgrade alloy-evm to 0.30.0, remove op feature, add OpTx/OpTxEnvConverter - Bump alloy-evm 0.27.2 -> 0.30.0, alloy-op-evm version to 0.30.0 - Bump reth to 082c36e (uses reth-rpc-traits from crates.io) - Add OpTx newtype + trait impls (FromRecoveredTx, FromTxWithEncoded, IntoTxEnv, TransactionEnvMut) - Add OpTxEnvConverter for RPC tx conversion without orphan rule issues - Add reth-rpc-traits impls (FromConsensusTx, TryIntoSimTx, SignableTxRequest) to op-alloy-rpc-types - Remove alloy-evm op feature dependency throughout - Fix zepter std feature propagation for reth-rpc-traits
…ptimism#19880) * feat(op-supernode): persist full Output in DenyList for optimistic root computation Made-with: Cursor * address PR comments Made-with: Cursor * feat(op-supernode): return denied block output as optimistic in superroot API OptimisticOutputAtTimestamp now checks the deny list before falling back to the local safe block. When a block at a given height has been invalidated, the original (pre-replacement) block's output is returned as the "optimistic" output — reflecting what the block would have been without verification. This gives superroot API callers a meaningful distinction between the verified and optimistic views. Adds DenyList.LastDeniedOutputV0(height) to retrieve the most recently denied OutputV0 at a height in a single DB read. Made-with: Cursor * refactor: use OutputV0 instead of OutputResponse in OutputWithRequiredL1 The SuperRootAtTimestampResponse's OutputWithRequiredL1 carried a full OutputResponse (with L2BlockRef, Version, Status, etc.) when consumers only ever accessed BlockHash and OutputRoot. Replace with *OutputV0 which directly contains the three output preimage fields (StateRoot, MessagePasserStorageRoot, BlockHash), eliminating dead weight from the superroot API. Made-with: Cursor * refactor: OptimisticOutputAtTimestamp returns *OutputV0 directly The only caller immediately converted the OutputResponse into an OutputV0. Return *OutputV0 from the interface and implementation, eliminating the intermediate OutputResponse construction. The deny list path returns the OutputV0 directly; the fallback path now delegates to OutputV0AtBlockNumber instead of going through the rollup RPC client. Made-with: Cursor * refactor: split OutputWithRequiredL1 into Output and OutputRoot fields Rename the OutputV0 pointer from OutputRoot to Output and add a pre-computed OutputRoot (Bytes32) so callers can inspect the hash at a glance without recomputing it. Made-with: Cursor
…thereum-optimism#19932) All prerequisites are now merged to develop: - ethereum-optimism#19880 (supernode denylist output as optimistic) - ethereum-optimism#19850 (L2Transactions hint fix) - ethereum-optimism#19890 (skip re-validating deposit-only blocks) - ethereum-optimism#19894 (remove obsolete replacement deposit tx) Test passes locally (all subtests in ~56s). Closes ethereum-optimism#19411 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ptimism#19931) The build-rust-release target is called by acceptance test build-deps but was missing kona-host. Tests like TestInteropFaultProofs_InvalidBlock invoke kona-host as an external binary from rust/target/release/kona-host, so a stale binary causes test failures when upstream fixes land. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…reum-optimism#19921) Before this commit, `TestDemoFail1` would not emit a human-readable message. This is due to the structured logger escaping all ascii codes when certain special characters are present (like `=`). The fix is to not use the structured logger to print test errors. ```go package pkg import ( "testing" "github.com/ethereum-optimism/optimism/op-devstack/devtest" ) func TestDemoFail1(gt *testing.T) { t := devtest.ParallelT(gt) t.Require().Equal( map[string]int{"a": 1, "b": 2, "c": 3}, map[string]int{"a": 1, "b": 99, "c": 3}, ) } func TestDemoFail2(gt *testing.T) { t := devtest.ParallelT(gt) t.Require().Equal(1, 2) } ```
* docs: update references from old docs repo to monorepo The public docs were migrated from ethereum-optimism/docs to the monorepo at docs/public-docs, but many links still pointed to the old repository. This updates all 20 references across 12 files: - GitHub issue links now point to ethereum-optimism/optimism/issues - create-l2-rollup-example/ links updated to new monorepo path - git clone command updated to clone the monorepo - docs.json redirects for CONTRIBUTING.md and STYLE_GUIDE.md updated - Footer GitHub nav link updated to new docs location - RPC provider submission link updated Two commit-pinned redirect URLs in docs.json for granite-changes.mdx and fp-changes.mdx are intentionally left pointing to the old repo, as those archived pages were not migrated. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: fix cd path after git clone to match monorepo structure The previous commit updated the git clone URL but missed the subsequent cd command, which still used the old repo's directory structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: fix stale repo references in DOCS_CONTRIBUTING.md and README.md - Update DOCS_CONTRIBUTING.md to reference the monorepo instead of the old ethereum-optimism/docs repo - Change target branch from `mintlify` to `develop` - Fix PR creation link to point to the compare page instead of the issue template chooser - Update README.md to say "directory" instead of "repo" and link to the monorepo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Zak <zak@oplabs.co> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#19900) Remove the rollup-boost and rollup-boost-types crate dependencies from the kona workspace. All Engine API v3/v4 calls now route directly to the L2 execution engine instead of through a rollup-boost middleware proxy. Operators who need rollup-boost functionality (block builders, flashblocks, execution mode management) can run rollup-boost as a standalone sidecar process and point kona-node's --l2 engine URL at it. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…/revm#3312) * Update context.rs * Update handler.rs * Update frame.rs * Update handler.rs * Update context.rs
* refactor!: add `ResultGas` struct to `ExecutionResult` Replace loose `gas_used` and `gas_refunded` fields in all three `ExecutionResult` variants with a single `gas: ResultGas` struct that exposes richer gas accounting: `gas_used`, `gas_refunded`, `gas_spent` (pre-refund), and `floor_gas` (EIP-7623). * refactor: simplify ResultGas to store only independent fields Remove the redundant `gas_used` field from `ResultGas` since it can always be derived as `gas_spent - gas_refunded`. The struct now stores only three independent values (gas_spent, gas_refunded, floor_gas) and exposes `gas_used()` as a method. * refactor: refine ResultGas field naming and add Display impl - Rename fields to align with Gas struct methods: gas_spent → spent, gas_refunded → refunded, gas_used() → used() Eliminates redundant gas.gas_spent pattern (now gas.spent) - Add #[serde(rename)] to preserve JSON key stability - Add Display impl for ResultGas (conditionally shows refunded/floor) - Simplify ExecutionResult Display to delegate to ResultGas Display - Improve documentation with source mapping table - Add tests for ResultGas Display and used() method * feat: add gas limit to ResultGas for self-contained gas accounting Add `limit` field to `ResultGas` so it contains all gas information without requiring external context. Also add `remaining()` derived method (limit - spent) to complement `used()` (spent - refunded). ResultGas now mirrors the full Gas struct snapshot: - limit: transaction gas limit - spent: gas consumed before refund - refunded: gas refund amount - floor_gas: EIP-7623 floor gas - used(): spent - refunded (derived) - remaining(): limit - spent (derived) * feat: add `intrinsic_gas` to `ResultGas` and return it from `post_execution` Add intrinsic_gas field to ResultGas so it carries the initial tx overhead gas. Change post_execution to return ResultGas directly, and have execution_result receive a pre-built ResultGas instead of InitialAndFloorGas. * chore: fix formatting * feat: encapsulate ResultGas fields with getters, setters, and builders - Make all ResultGas fields private - Add getter methods: limit(), spent(), refunded(), floor_gas(), intrinsic_gas() - Add builder methods: with_limit(), with_spent(), with_refunded(), with_floor_gas(), with_intrinsic_gas() - Add setter methods: set_limit(), set_spent(), set_refunded(), set_floor_gas(), set_intrinsic_gas() - Add derived methods: final_used(), inner_refunded(), final_refunded() * docs: update ResultGas comments to reflect encapsulated API - Rewrite struct doc table to reference getter methods instead of fields - Fix used() doc formula to include floor_gas: max(spent - refunded, floor_gas) - Fix incomplete refunded field doc, point to final_refunded() - Remove stale final_used() reference, remove refunded() getter (replaced by inner_refunded) * chore: fix typo in handler comment * Update crates/context/interface/src/result.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: correct grammar in handler.rs comment (bluealloy/revm#3422) * Initial plan * fix: correct grammar in handler.rs comment --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
…luealloy/revm#3424) * refactor!: add `logs` field to `Revert` and `Halt` variants of `ExecutionResult` Logs emitted before a revert or halt were previously discarded. This preserves them by adding `logs: Vec<Log>` to both variants so that downstream consumers can inspect pre-failure logs. * fix: import Vec in op-revm handler for no_std compatibility * fix: formatting in ExecutionResult logs() and into_logs() methods
…ciary (bluealloy/revm#3455) Use all_mut() to simultaneously borrow tx (immutable) and chain/journal (mutable), avoiding an unnecessary deep copy of the enveloped transaction bytes on every non-deposit transaction.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…oy/revm#3507) * feat: add crate-level re-exports for all revm-* dependencies Re-export all revm-* dependencies as modules via `pub use crate_name;` in each crate's lib.rs, making them transitively accessible (e.g., `handler::context::...`, `interpreter::primitives::...`). Note: in inspector, `handler` crate is re-exported as `evm_handler` to avoid conflict with the local `pub mod handler`. * style: fix formatting in bytecode lib.rs
Hooks the freshly imported `rust/op-revm` crate into the Rust workspace as a local member, swaps the workspace dependency to a path entry, and consolidates the duplicate `op-revm` / `revm` versions that kona-hardforks was pinning directly. Drops the upstream `hashbrown` feature (it propagated to `alloy-primitives/map-hashbrown` under `--all-features` and broke `reth-testing-utils`) and the unused `readme.workspace` field that the monorepo workspace does not define. The remaining churn is auto-applied clippy fixes (`doc_markdown`, `use_self`, `missing_const_for_fn`, `useless_let_if_seq`) needed to satisfy the workspace's `-D warnings` lint policy.
* all: upgrade op-geth * update op-geth for pre-regolith changes * update op-geth for a miner change and a minor change ;) * defer cancel * update op-geth again * op-program: regenerate vm-compat baseline for geth v1.17.2 All new findings pass through pathdb.New which is unreachable in the Cannon execution environment — op-program uses a memory-backed trie database, not pathdb. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * update op-geth to rc tag * op-program: add just target to regenerate vm-compat baseline (ethereum-optimism#19951) * op-program: add just target to regenerate vm-compat baseline Add `just regenerate-vm-compat-baseline` (Docker) and `just regenerate-baseline-current` (local) targets that run vm-compat without a baseline to produce the full report, then normalize it by stripping assembly-level fields (line, file, absPath) that cause false positives when they change. The run-static-analysis.sh script now accepts an optional baseline argument — when omitted, it runs without --baseline-report. The Dockerfile gains a VM_COMPAT_TASK build arg (default: analyze-op-program-client) so the same image can run either analysis or regeneration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * op-program: update vm-compat-triage skill for new just targets Update the skill to reference `just regenerate-vm-compat-baseline` and `just run-vm-compat` instead of raw vm-compat commands. Note that both require Docker and must be run by the user (Claude cannot run Docker). Simplify prerequisites — Docker is all that's needed now. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Adrian Sutton <adrian@oplabs.co> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
) * op-interop-filter: add getBlockHashByNumber RPC * op-interop-filter: use rpc.BlockNumber instead of custom BlockSelector Replace the custom BlockSelector type with go-ethereum's rpc.BlockNumber, which already handles "latest", hex strings, and numeric block numbers. Unsupported tags (safe, finalized, pending, earliest) are rejected with a clear error message in the backend. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * op-interop-filter: consolidate getBlockHashByNumber tests into RPC test Move unknown-chain and unsupported-tag test cases into the RPC integration test and delete the redundant backend unit test. All five cases now exercise the full RPC stack in a single test function. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: retrigger after flaky memory-all-opn-op-reth failure The memory-all-opn-op-reth job failed with exit status 1 during sequencer block processing — no assertion failure, passes on develop. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
) * feat: integrate SysFeature for Interop * feat: add interop migration functions and eth lockbox to portal2 * chore: rename function to migrateToSharedDisputeGame * chore: bump snapshots * fix: use Portal2 in OPCM migrator * fix: semver bumps from interface change * fix: only overwrite the lock box when passing non-zero value * chore: update comments to refer to OptimismPortal2 instead of OptimismPortalInterop * fix: mismatched names * fix: enable INTEROP feature flag in v1 OPCM deploy path * fix: remove casting to OptimismPortalInterop * chore: remove OptimismPortalInterop dead code * chore: update comment to remove OptimismPortalInterop * chore: remove OptimismPortalInterop specific tests since we now test OptimismPortal2 via the feature flag * fix: restore superRootsActive flag in super-roots withdrawal proof tests * fix: test name camelCase * chore: remove OptimismPortalInterop from Initializable tests and remove interface from OPCM_V2 * fix: normalize INTEROP feature in SystemConfig fuzz test * chore: add references for OptimismPortalInterop removal issue * chore: remove stale comment about superRootsActive * fix(portal): bump OptimismPortal2 version and fix OPCM_V2 interop upgrade ordering Bump OptimismPortal2.version() from 5.4.0 to 5.5.0 so OPCM_V2 can upgrade from OptimismPortalInterop (5.4.1+interop) without triggering the DowngradeNotAllowed check. In OPContractsManagerV2._apply(), set the ETH_LOCKBOX feature on SystemConfig before upgrading the portal. Unlike OptimismPortalInterop which blindly sets the ethLockbox, OptimismPortal2.initialize() calls _assertValidLockboxState() which requires the ETH_LOCKBOX feature flag and ethLockbox address to be consistent. Update superRootsActive tests to support both OPCM_V2 (gameType mock) and legacy (slot 63 manipulation) paths via _enableSuperRootBehavior helper. * chore: update checks for superRootActie to be for the INTEROP feature flag * fix: standard validator assertions to be for Portal2 instead of PortalInterop when OPCM_V2 and Interop feature flags enabled * fix: change event params back to non-indexed versions * chore: clean up branching logic for portal/opcm feature flags * chore: refactor the checks in assertValidPortal * chore: organize functions by visibility * fix: implement the _assertValidInteropState helper and add to initalize * fix: update assert for INTEROP flag instead of superroots active * chore: add clarification to the comment about the prerequisites to the portal migration functions * chore: add TODO issue tracking for follow up removal * fix: add missing OptimismPortal_InvalidInteropState error to IOptimismPortal2 * fix: assertions for the forked upgrade scenario * refactor: remove OPCM_V2 feature flag, make V2 canonical * Fix: docs * Fix: some more doc-related issues * fix: check ETH_LOCKBOX in _isUsingInterop and bump semver Update _isUsingInterop() to require both INTEROP and ETH_LOCKBOX features, preventing migrate* functions from executing if lockbox is misconfigured at runtime. Bump OptimismPortal2 5.5.0 -> 5.6.0 Bump OptimismPortalInterop 5.4.1+interop -> 5.5.1+interop * fix: use assertTrue/assertFalse instead of vm.assertTrue/vm.assertFalse * chore: forge fmt and snapshots bump * fix: update check for using superroots in the dsl * ci: retrigger workflow --------- Co-authored-by: Rodrigo Araujo <rod.dearaujo@gmail.com>
…thereum-optimism#19986) * fix(op-reth): wait for proofs ExEx store before debug_executePayload The previous fix (PR ethereum-optimism#19899) added WaitForBlockNumber to sync the validator's EL head, but the test still flakes because debug_executePayload depends on OpStateProviderFactory which reads from the proofs ExEx store. The ExEx processes ChainCommitted notifications asynchronously, so the EL head can advance before the store has indexed the block. Poll debug_proofsSyncStatus to wait for the ExEx to catch up before calling the RPC. Fixes ethereum-optimism#19898 * docs(ai): add op-reth E2E test prerequisites to rust-dev.md Document the build steps needed to run op-reth E2E tests locally: forge artifacts and release binary. The test harness only searches target/release/, so debug builds don't work. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… targets (ethereum-optimism#19988) * chore(op-devstack): fix rust binary error message and add debug build target - Fix error message in rust_binary.go to reference the correct just target (`cd rust && just build-<binary>`) instead of the non-existent `just build-rust-debug` - Search debug/ in addition to release/ when resolving pre-built Rust binaries, with release taking priority - Add `build-op-reth-debug` just target for faster local E2E test iteration (debug builds compile much faster than release) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(op-devstack): default JIT build to debug mode Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…optimism#19956) * chore: delete OptimismPortalInterop contract and all references * bump semver
…ows and fix some minor issues (ethereum-optimism#19960) * fix token and circleci utils version * improve comment * add contract changed var * add back required contracts ci job * fixing conditions * add missing conditions
ethereum-optimism#19985) * fix(op-acceptance-tests): use op-rbuilder in flashblocks transfer test Subscribe to the op-rbuilder flashblock stream instead of rollup-boost because rollup-boost may intentionally drop flashblocks. Buffer the transaction result channel so cleanup does not deadlock if the test times out before reading it, and update the test comment to match the actual assertion. * fix(acceptance): match flashblock transfer by receipts
…s, CI, docs (ethereum-optimism#19919) * chore: remove OpcmImpl compat shim, ReadSuperchainDeployment v1 fields, CI matrix, docs Mechanical cleanup of OPCMv1 references that don't touch op-deployer manage/upgrade logic: - Remove OpcmImpl and OpcmContractsContainerImpl fields from ImplementationsContracts — all consumers now use OpcmV2Impl - Remove ReadSuperchainDeploymentInput.OpcmAddress and ReadSuperchainDeploymentOutput ProtocolVersions fields (closes ethereum-optimism#18612) - Remove corresponding deprecated Solidity struct fields in ReadSuperchainDeployment.s.sol - Remove OPCM_V2 CI matrix entries (no-op since Solidity flag deleted); keep ZK_DISPUTE_GAME, CANNON_KONA, SUPER_ROOT_GAMES_MIGRATION as standalone entries - Delete empty IOPContractsManager.sol stub - Remove stale semgrep excludes for deleted file - Update docs with V2 paths Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: fix indentation in migrate_test.go Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: update OPCM docs for V2 architecture - opcm.md: update architecture section with V2 contract names (OPContractsManagerV2, OPContractsManagerUtils, OPContractsManagerContainer, OPContractsManagerMigrator) and accurate mermaid diagram showing V2 entry points (deploy, upgrade, upgradeSuperchain, migrate) - versioning.md: fix dead pinned link to implementations() function - migrating-permissionless.mdx: replace addGameType() reference with upgrade() via DisputeGameConfig; fix "this method will" to describe actual V2 behavior (register impl on DGF + set init bond) - op-deployer-upgrade-deprecation.mdx: fix dead link to deleted v1 file Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: retrigger pipeline for required-contracts-ci fix --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eum-optimism#20000) * fix(kona): return error instead of panic on unknown batch type BatchType::from(u8) panicked on unknown batch type values. This is a protocol deviation — the OP spec requires unknown batch versions to be treated as invalid and ignored, matching op-node's behavior of returning an error and skipping to the next channel. Replace From<u8> with TryFrom<u8>, add UnknownBatchType variant to BatchDecodingError, and propagate the error in Batch::decode. Fixes ethereum-optimism/optimism-private#484 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(kona): rustfmt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ethereum-optimism#20021) Adds an action test that verifies the fault proof program correctly handles a batcher address change within the channel_timeout window. The test: 1. Batcher A submits a batch 2. Batcher address is changed from A to B on L1 3. Batcher B submits a batch 4. The fault proof program re-derives the chain from scratch If the pipeline uses the wrong system config on reset (batcher B from the safe head instead of batcher A from the walked-back block), it rejects batcher A's batch and derivation diverges from op-node. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… sequencer drift (ethereum-optimism#19994) * feat(kona-genesis): add rollup_config_override feature for custom max sequencer drift Add a `rollup_config_override` feature to kona-genesis that overrides the Fjord max sequencer drift to 2892s for chains building only on finalized L1 blocks, where L1 finality delays can exceed the standard 1800s limit. This replaces ethereum-optimism#18859 until the proper solution is in place, see ethereum-optimism#18859 (comment) Since this is only a temporary solution, I've chosen the small and primitive solution over a more generic approach. * feat(kona-genesis): make fjord_max_sequencer_drift a configurable RollupConfig field Replace the hardcoded constant override with a runtime-configurable fjord_max_sequencer_drift field on RollupConfig, gated behind the rollup_config_override feature flag. This allows chains that build on finalized L1 blocks to set a custom max sequencer drift via config rather than a compile-time constant. * Format with correct toolchain version * fix(kona-registry): add missing fjord_max_sequencer_drift to test config initializers * fix(kona-registry): propagate rollup_config_override feature and gate imports The rust/kona registry crate was missing the rollup_config_override feature, causing CI failures when building with --all-features. The FJORD_MAX_SEQUENCER_DRIFT imports also need to be conditional to avoid unused import warnings when the feature is disabled. --------- Co-authored-by: Karl Bartel <karl.bartel@clabs.co>
…9962) * rust(op-revm): add README and no_std CI coverage Adds a top-level README for the freshly imported `op-revm` crate documenting what it provides, its provenance, available features, and basic build / test commands. Also adds `op-revm` to the workspace's `just check-no-std` package list so the existing `rust-check-no-std` CircleCI job mirrors the upstream revm `riscv32imac-unknown-none-elf` no_std check on every Rust PR. * docs(op-revm): address review + add rust docs page - Drop the hashbrown note from rust/op-revm/README.md per review. - Add docs/public-docs/rust/op-revm/index.mdx landing page covering features, provenance, crate features, no_std, and build commands. - Wire the new page into docs.json under the Rust sidebar. - Surface op-revm alongside kona / op-reth / op-alloy on the Rust landing page.
b773f0e to
7bffeae
Compare
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.
A fork of ethereum-optimism@cba7aba
op-reth/v1.11.5