This repository was archived by the owner on Dec 5, 2021. It is now read-only.
[pull] develop from ethereum-optimism:develop#573
Open
pull[bot] wants to merge 10000 commits intoomgnetwork:developfrom
Open
[pull] develop from ethereum-optimism:develop#573pull[bot] wants to merge 10000 commits intoomgnetwork:developfrom
pull[bot] wants to merge 10000 commits intoomgnetwork:developfrom
Conversation
…19676) Reth's mempool has different policies from geth that make it harder to spam artificial traffic. Fortunately, we already dealt with this problem in an existing test (a batcher throttling test). This commit extracts the relevant logic from the batcher throttling test into the existing `loadtest` package and reuses it in some tests that spam transactions.
This slow action test (~60min, deriving 10,000 blocks) is replaced by fixture-based integration tests in kona-proof-interop that verify the same EIP-2935 block hash lookup behavior in seconds using captured OP Mainnet state (PRs #19726 and #19738). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add ZKDisputeGame with new design * refactor: update IZKVerifier interface signature, add ISemver, move to interfaces/ Update IZKVerifier to use 3-arg signature (programId, publicValues, proof), extend ISemver, and relocate from src/dispute/zk/ to interfaces/dispute/zk/. Update all imports and the prove() call site accordingly. * refactor: rename counteredBy to challenger in ClaimData struct * refactor: optimize ClaimData struct layout from 4 to 3 storage slots * fix: move gameOver check to top of challenge() * fix: add missing checks in prove() * fix: add parent game type check * fix: add anchorL2SeqNum check * chore: remove empty lines in natspec * perf: remove creditUnlocked mapping for claimCredit flow * chore: remove deprecated AccessManager * fix: pre-pr * feat: require parent game's sequence number strictly above anchor state * feat: revert claimCredit early revert flow * chore: add todo comment * fix: claimCredit closes when recipient has no credit * feat: remove mapping * fix: comments and ci * test: improve test coverage * fix(op-challenger): wrong claimData struct * refactor(op-challenger): rename OptimisticZKGame -> ZKDisputeGame * fix: wrong lint * chore: remove code length check * fix: shorten ZK game type CLI string to "zk" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: update semgrep excludes for ZKDisputeGame and remove inline nosemgrep Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove OptimisticZkGame reference from natspec comment Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: use getAnchorRoot() instead of deprecated anchors() Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove unnecessary receive() function, CWIA handles ETH transfers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * test: improve ZKDisputeGame test coverage Add missing tests identified in review: - Invalid proof rejection with ZKRejectingVerifier mock - wasRespectedGameTypeWhenCreated assertion in initialize - Anchor start path (parentIndex = uint32.max) validation - Proved event emission verification - Challenge deadline reset assertion Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add msg.sender to public values to prevent proof front-running Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: make disputeGameFactory an immutable set in constructor Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: pre-pr * fix: revert disputeGameFactory to storage variable for MCP compatibility The DisputeGameFactory differs per chain, so it must be set in initialize() rather than as a constructor immutable to preserve MCP clone reusability. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: pre-pr * fix: interface cast * fix: semver --------- Co-authored-by: Ashitaka <ashitaka@defi.sucks> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…19650) * refactor(l2cm): remove ERC20 interop contracts from upgrade pipeline OptimismSuperchainERC20Factory, OptimismSuperchainERC20Beacon, and SuperchainTokenBridge are no longer deployed/upgraded by L2CM. SuperchainETHBridge and ETHLiquidity remain. * fix(Predeploys): correct isSupported and getUpgradeable Predeploys functions * fix: remove redundant comment Co-authored-by: niha <205694301+0xniha@users.noreply.github.com> * fix: update getUpgradeablePredeploys array size and fork test --------- Co-authored-by: niha <205694301+0xniha@users.noreply.github.com>
… devnet (#19747) Add support for spinning up a 2-chain interop devnet backed by op-supernode via `op-up --interop`. This reuses the existing TwoL2SupernodeInterop preset from op-devstack. Changes: - Add --interop CLI flag (env: OP_UP_INTEROP) - Parameterize proxyEL to support multiple listener addresses - Chain A proxied on localhost:8545, Chain B on localhost:8546 - Extract printAccountInfo and logBlocks as shared helpers - Add live [interop] log lines showing safe head progression and reorgs - Add `op-up smoke-interop` CLI with subcommands: all, identity, transfer, bridge, valid-message, invalid-message - Use interopDelay=2 so bridge contracts get properly initialized Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…19754) * op-acceptance: migrate interop tests to supernode, skip on op-reth Migrate interop acceptance tests from supervisor-based presets (NewSimpleInterop) to supernode-based presets (NewTwoL2SupernodeInterop) where the change is mechanical (preset swap + field renames). Tests migrated to supernode preset: - TestReorgInvalidExecMsgs (reorgs/ — also replaced Supervisor.SafeBlockID convergence check with Supernode.AwaitValidatedTimestamp) - TestInteropHappyTx (message/) - TestInteropMon (message/) - TestL2CLResync (sync/simple_interop/) Tests converted from unconditional skip to SkipOnOpReth: - TestRelayWithInvalidMessagesSteady (loadtest/) - TestReorgInitExecMsg (reorgs/) - TestReorgInvalidExecMsgs (reorgs/) TestInteropFaultProofs_InvalidBlock remains fully skipped — broken on all EL backends due to supernode proof expectation mismatches. Other changes: - Fix SkipOnOpReth helper to skip when EL kind is anything other than op-geth (not just when it equals op-reth) - Fix AssertTxInBlock doc comment - Normalize TODO comment format to use #19411 short form * chore: rename SkipOnOpReth to SkipUnlessOpGeth --------- Co-authored-by: wwared <541936+wwared@users.noreply.github.com>
…in all single-chain runtimes (#19653) Introduce two central env-aware dispatch functions, startL2ELForKey and startL2CLForKey, which read DEVSTACK_L2EL_KIND and DEVSTACK_L2CL_KIND respectively and start the appropriate implementation. All single-chain runtimes (minimal, flashblocks, interop-no-supervisor) and follower-node helpers now route through these functions, so setting the env vars affects every preset without any test changes required. DEVSTACK_L2EL_KIND=op-reth go test ./... # use op-reth as L2 EL DEVSTACK_L2CL_KIND=kona-node go test ./... # use kona-node as L2 CL The sequencer EL/CL wrappers (startSequencerEL, startSequencerCL) and the verifier helper (addSingleChainOpNode) all delegate to the dispatch functions, replacing scattered direct calls to startL2ELNode / startL2CLNode. The supernode runtime's startSupernodeEL is unified with the same dispatch logic (default is now op-geth, matching every other runtime; previously it defaulted to op-reth). The *OpNode type assertion in newSingleChainRuntimeWithConfig is removed in favour of startTestSequencerForRPCs, which accepts any L2CLNode via its RPC endpoint. Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
The devnet-metrics-collect workflow collected git authorship metrics for op-acceptance-tests and uploaded them to a GCS bucket. This data is not actively used. Remove the job, workflow, pipeline parameters across all CI config files, and the metrics-collect-authorship.sh script. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
op-acceptor is being removed; clean up its version pin and tool alias from mise.toml. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…19638) Replace the needFCUCall flag and broken needSafeHeadUpdate debounce mechanism with a simpler approach: track the last forkchoice state sent to the engine (lastForkchoice) and only send FCU when the state actually changes. Key changes: - Remove needFCUCall from all setters (SetSafeHead, SetUnsafeHead, SetFinalizedHead). They are now pure setters. - Remove needSafeHeadUpdate, flushPendingSafeHead(), and ErrNoFCUNeeded entirely. - tryUpdateEngineInternal compares the current ForkchoiceState against lastForkchoice and skips the FCU if unchanged (returns nil). - PromoteSafe no longer calls tryUpdateEngine. On the consolidation path, this means no per-block FCU — the forkchoice state updates silently per-block. - New DeriverL1StatusEvent and DeriverIdleEvent handlers in the engine controller call tryUpdateEngine at L1 origin boundaries, sending a single batched FCU. - Remove redundant TryUpdateEngine call from SyncStep — all forkchoice updates are now triggered by their respective event handlers. - Non-consolidation path (onPayloadSuccess) is unaffected: SetUnsafeHead changes HeadBlockHash which triggers FCU via tryUpdateEngineInternal. - InsertUnsafePayload and tryBackupUnsafeReorg update lastForkchoice after their direct FCU calls. Closes #12695 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…19763) The generate-nut-bundle recipe needs compiled artifacts to exist. Adding build-no-tests as a dependency ensures scripts and source contracts are built first.
Point to factory@4a6713d which adds SBOM generation for all Docker image builds via the sbom input (defaulting to true).
Install cargo-auditable and use it for the final binary build step in op-reth and kona Dockerfiles. This embeds the full crate dependency tree into the binary, making it visible to SBOM and vulnerability scanners.
* kona-client: fix trace-extension short-circuit at capped leaves Fixes a bug where kona program could incorrectly treat a transition as trace-extension and return early based solely on output-root equality, even when the claimed L2 block number differed, enabling trivial wins in dispute games. * kona/client: Fix fmt & clippy (#456) * kona-proof: fix TipCursor using zero output root instead of agreed prestate (#454) This fixes an issue where the pipeline cursor was initialized with B256::ZERO as the safe head output root. When the derivation pipeline exhausts L1 data (EndOfSource) before deriving any new blocks, the driver returns this zero value instead of the agreed prestate's actual output root, causing the FPP to reject honest claims and accept zero claims. * fix(kona): bounded channel decompression with truncation per spec (#455) Fixes multiple deviations in kona's channel decompression (bug #35): Zlib: replace unbounded decompress_to_vec_zlib with decompress_to_vec_zlib_with_limit to prevent zip-bomb OOM. On limit hit (HasMoreOutput), keep partial output per spec instead of rejecting. Brotli: cap output buffer growth at max_rlp_bytes_per_channel instead of erroring when the doubled buffer exceeds the limit. Fixes false rejection of valid channels near the size limit. Both: on decompression errors, preserve partial output so batches decoded before the error point are accepted (matching Go reference). Per spec: "If the decompressed data exceeds the limit, things proceed as though the channel contained only the first MAX_RLP_BYTES_PER_CHANNEL decompressed bytes." Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: inphi <mlaw2501@gmail.com> Co-authored-by: Sebastian Stammler <seb@oplabs.co> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* op-reth: add chain_id to ExecutingDescriptor in supervisor_checkAccessList The ExecutingDescriptor sent to supervisor_checkAccessList was missing the chainID field, causing the interop filter to see chain ID 0 and reject all cross-chain relay transactions with "executing chain 0: unknown chain". The Go-side ExecutingDescriptor expects chainID but op-reth's local copy of the struct omitted it. This adds chain_id to the struct, threads it through from ChainSpec, and includes it in the serialized RPC payload. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-reth): fix rustfmt formatting in supervisor client Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(op-reth): use explicit chainID rename to match spec and kona The camelCase rename_all serialized chain_id as "chainId" (lowercase d), but the Go supervisor and kona both expect "chainID" (uppercase D). Use an explicit serde rename to match the spec. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: opsuperchain <opsuperchain@slop.bot> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* ci(rust): downsize 7 Rust CI jobs from xlarge to medium Reduce resource_class from xlarge (40 cr/min) to medium (10 cr/min) for Docker-based Rust CI jobs that complete in under 5 minutes and are unlikely to be CPU/memory bound: - rust-ci-clippy - rust-ci-check-no-std - rust-ci-docs - rust-ci-udeps - rust-ci-cargo-hack-build (wasm targets) - op-reth-compact-codec - rust-docs-build Machine-executor jobs (kona-cargo-lint, kona-build-fpvm, kona-host-client-offline) are excluded as they require Docker-in-Docker and privileged access. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci(rust): revert rust-ci-docs to xlarge (OOM on medium) The rust-docs job was killed with SIGKILL (OOM) on medium — the reth_op crate doc build with all features needs more memory than medium provides. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: add ConditionalDeployer to implementations names array and add implementations count check * fix: isUpgradeable comment in l2cm utils
…lls (#19745) * feat(op-devstack): use EIP-7702 SetCode for OPCM migration delegatecalls Replace the DelegateCallProxy deploy-transfer-execute-restore pattern in migrateSuperRoots and addGameTypeForRuntime with EIP-7702 SetCode. The L1PAO EOA temporarily adopts DelegateCallProxy code via SetCode, then calls executeDelegateCall on itself. Since the EOA is already the owner of all ProxyAdmins, no ownership transfers are needed. This reduces the transaction count from ~5+5N to 2 per invocation (one deploy + one SetCode tx), eliminating a large class of ownership transfer/restoration complexity. The new delegateCallWithSetCode helper uses txplan for nonce management, gas pricing, signing, and retry — the same infrastructure that dsl.EOA.PlanAuth uses without requiring a dsl.EOA. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: remove extra blank line caught by goimports Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(acceptance): await validated timestamp before querying optimistic data AwaitValidatedTimestamp was called with endTimestamp but SuperRootAtTimestamp was queried at endTimestamp+1. When the supernode hasn't validated that timestamp yet, OptimisticAtTimestamp is empty and latestRequiredL1 returns a zero-valued BlockID, causing kona-host to receive --l1-head 0x00..00 and fail. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: conditional deployer to be predeploy * fix: downgrade invariant * fix: wording
Migrate Kona, op-reth, and op-alloy documentation from the standalone Vocs site (rust/docs/) into the unified Mintlify docs (docs/public-docs/). - Convert 140 MDX files: remove Vocs imports, add Mintlify frontmatter, convert Callout components to Warning/Note/Info/Tip - Add 'Rust' navigation tab to docs.json with full sidebar structure - Create Mintlify-native landing page with CardGroup components - Add dedicated docs-ci.yml CircleCI continuation config that runs mintlify validate on docs/public-docs/ changes - Delete standalone rust/docs/ Vocs site
* op-supernode: Workaround op-reth FCU edge case * op-acceptance-tests: unskip op-reth interop reorg tests that now pass Remove SkipUnlessOpGeth from 5 tests that now pass with op-reth after the FCU rewind fix. Update the skip reason on TestSupernodeInteropInvalidMessageReplacement which still fails due to missing interop tx eviction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * op-supernode: replace sleep with FCU retry-verify loop in RewindToTimestamp Replace the fixed 50ms sleep between back-to-back FCU calls with a proper retry loop that verifies each FCU took effect by checking the heads match. If the head hasn't converged (e.g. due to reth#23205 race), sleep 500ms and retry the FCU, up to 20 attempts (total of 10s). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: wwared <541936+wwared@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(test): fix and fuzz mint moreThanAvailableBalance test The test was missing vm.prank(address(superchainETHBridge)), causing it to revert with Unauthorized instead of testing the intended insufficient balance scenario. Also converted to fuzz test for broader coverage. * test(contracts): add version format validation for ETHLiquidity Add ETHLiquidity_Version_Test with SemverComp.parse() to validate the version string follows proper semver format. --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
#19557) * refactor(test): fix test naming conventions in LegacyMintableERC20 tests Rename test_constructor_works to test_constructor_succeeds and test_supportsInterface_works to test_supportsInterface_supportedInterfaces_succeeds to follow the naming convention [method]_[functionName]_[scenario]_[outcome]. * test(contracts): convert tests to fuzz and add coverage for supportsInterface - Convert mint/burn tests to fuzz tests with event emission checks - Add fuzz test for unsupported interface IDs (false branch) - Declare Mint/Burn events in TestInit for expectEmit assertions - Fuzz access control tests across arbitrary caller addresses --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
PRs are squash-merged so only one commit appears in history.
* chore: check for l2cm code in l2proxy admin upgrade * fix: comment * fix: add check for v4 initializing slot aswell * fix: improve expected intent string comment * fix: prank issue * fix: tests * fix: nits * fix: tests
* feat(l1block): add system customization feature flags * feat(l1block): unify custom gas token under system customizations * feat(contracts): move enableFeature() call into setL1Block * chore: semver lock * fix(contracts): reset isFeatureEnabled(CUSTOM_GAS_TOKEN) * refactor(l1block): align feature flag interface with SystemConfig Use bytes32 keys with Features library constants, public mapping auto-getter, FeatureSet event, and setFeature function name. * feat(l2cm): populate isInterop from L1Block feature flag Read INTEROP feature from L1Block into FullConfig instead of querying L1Block inline in _apply. * feat(l2cm): revert if interop dev feature and system feature disagree Move interop flag resolution into _loadFullConfig and revert with L2ContractsManager_FeatureFlagMismatch if the dev feature and L1Block system feature are out of sync. * feat(l2cm): dev feature gates system customization, not vice versa The dev feature is a prerequisite for the system customization to be enabled. Revert only when sys=true and dev=false (misconfiguration). * fix(contracts): Address contracts checks failures * Enable custom gas token feature in L1Block test * Use legacy isCustomGasToken() and use try/catch on isInterop * Apply suggestion from @0xOneTony Co-authored-by: 0xOneTony <112496816+0xOneTony@users.noreply.github.com> * Add custom gas token check in L2ContractsManager * feat(contracts): Update authorization on setFeature and setCustomGasToken * feat(contracts): move docs to better place * fix(contract): interfaces for L1Block proxy admin inheritance * fix: semver bumps * fix: increase gaslimit for L1block deployment * fix: address PR review feedback - Remove redundant isCustomGasToken() check in setCustomGasToken() - Fix typo: consenus -> consensus in L2ContractsManager - Use setCustomGasToken() instead of setFeature() in L2Genesis for consistency * fix: downgrade L1BlockCGT semver and add @dev comment Semver back to +custom-gas-token.1 after removing the redundant check. Document authorization behavior on setCustomGasToken(). * fix: remove unused import and regenerate NUT bundle L1Block_FeatureAlreadyEnabled import was unused after removing the redundant check in setCustomGasToken(). * fix(l2cm): fix typo in _loadFullConfig comment s/def/dev/ in feature flags comment. * chore(l2cm): add TODO to remove CGT migration step after Karst * feat(l2cm): remove setCustomGasToken() There is now only one right way to set a feature which is to call setFeature(). * feat(l1block): restrict CUSTOM_GAS_TOKEN feature to genesis only Prevents setFeature(CUSTOM_GAS_TOKEN) from being called after block 1, ensuring the feature can only be set during genesis. * fix(l1block): update interfaces, tests, and snapshots for setCustomGasToken removal setCustomGasToken() was removed from L1BlockCGT but references in interfaces, L2CM, and tests were not updated. Regenerated snapshots. * fix(contracts): address review feedback on versions and NUT comment Downgrade L1Block to 1.9.0 and L2CM to 1.2.0 per reviewer request. Add comment explaining how INTEROP feature is enabled via NUT. * fix(l1block): remove genesis-only guard for CUSTOM_GAS_TOKEN feature The block.number check is incompatible with L2ContractsManager which needs to call setFeature(CUSTOM_GAS_TOKEN) post-genesis for migration. Access control via _assertSetFeatureAuthorized is sufficient. * fix(contracts): remove unused imports, bump semver, regen snapshots Removes unused Features import from L1Block and IL1BlockCGT import from L2ContractsManager after genesis guard removal. * fix(l1block): match natspec tag to version string * fix(contracts): revert semver bumps, regen snapshots These contracts already had their versions bumped in earlier commits on this branch. The semver-diff check compares against the target branch, not the previous commit. * Update snapshots * fix(l2cm): bump L2ContractsManager semver to 1.3.0 Bytecode changed due to removed IL1BlockCGT import. Regen snapshots. --------- Co-authored-by: 0xOneTony <112496816+0xOneTony@users.noreply.github.com>
* feat: add weekly l2 fork tests * fix: remove okx-xlayer from l2 fork ci matrix Co-authored-by: Maurelian <john@oplabs.co> --------- Co-authored-by: Maurelian <john@oplabs.co>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )