op-node: EngineController: Proper locking#17648
Merged
Conversation
6639dfe to
b878ff6
Compare
bbbab53 to
4078e23
Compare
6bf7c4c to
6b26c57
Compare
nonsense
approved these changes
Sep 30, 2025
theochap
pushed a commit
that referenced
this pull request
Oct 1, 2025
* op-node: EngineController: Proper locking * op-node: EngineController: proper tryUpdateEngine sync * stick to rwlock for simplicity * Remove goroutine limit since race solved * proper locking for ForceReset * fix rebase * fix locking
BrycePy
added a commit
to gattaca-com/based-optimism
that referenced
this pull request
Nov 13, 2025
* op-service/eth: fix exec payload creation from block (#17154)
* op-service/eth: fix validationError string pointer reference
* op-service/eth: fix exec payload creation from block
Execution payloads must only set the withdrawals root post-Isthmus.
The block's withdrawals root is set during assembly pre-Isthmus.
* go: update op-geth dependency
* op-node: remove PromoteFinalizedEvent (#17165)
* chore(op-acceptance-tests): migrate TestInteropReadiness to op-devstack (#17160)
Convert the TestInteropReadiness test from devnet-sdk to op-devstack framework.
Use MultiCaller batching for contract interactions and presets.NewSimpleInterop()
for test setup. Fix challenger preset compilation issue temporarily.
* ci: Increase timeout of publish-cannon-prestates job (#17163)
* op-e2e: Remove unused withdrawal action methods (#17128)
* Remove unused withdrawal action methods
* fix lint from ‘go fmt’ to make ci happy
* feat(devstack/rpc): expose rpc endpoint (#17168)
* op-deployer: Add forge autodiscovery (#17152)
* op-deployer: Add forge autodiscovery
* add limit reader
* cr updates
* op-acceptance-tests: Introduce GameHelper to perform multiple moves (#16994)
* op-acceptance-tests: Add helper contract to perform multiple moves in dispute games.
# Conflicts:
# op-acceptance-tests/tests/isthmus/operator_fee/tx_utils.go
* op-acceptance-tests: Rename GameState to GameHelper and use it via FaultDisputeGame rather than directly.
* op-acceptance-tests: Verify claims are responded to correctly
# Conflicts:
# op-devstack/dsl/proofs/fault_dispute_game.go
* op-acceptance-tests: Better test name
* op-acceptance-tests: Simplify
* Use specific imports.
* Fix contract checks.
* Add comment
* Update snapshots.
* Remove unused extraData
* Remove unused extraData
* op-acceptance-tests: Review feedback
* plan: Add test that other node's dependencies are unaffected.
* plan: Introduce single function to reset fn and dependencies.
* dsl: Don't set a fixed gas limit for ETH transfers.
Transferring ETH to a contract uses more than 21,000 gas.
* op-service: Clarify testlogs (#17174)
* cannon: Drop version 7 feature flags (#17167)
* Drop SupportMinimalSysEventFd2 feature flag
* Drop SupportDclzDclo feature flag
* Drop SupportNoopMprotect feature flag
* Bump MIPS64 contract version
* Fix typo
* Cut unused variable
* Run semver-lock
* Update mips version in the StandardValidator
* Run semver-lock
* Bump StandardValidator contract version
* Cut unused features / stateVersion variables
* op-program: Disable go1.25 annotation of anonymous memory mappings. (#17176)
Prepares for go 1.25 to avoid it needing the prctl syscall which cannon doesn't support.
* acceptance-tests: Wait for follower node to be in sync with sequencer before allowing tests to start using the system. (#17179)
* feat: create a v2 of the fault dispute game to validate creator pattern (#16929)
* feat: create a new version of the fault dispute game to validate creator pattern flow
* chore: make ci happy with interface
* chore: run pre pr snapshots and rename interface to fix ci
* chore: remove duplicated(?) files
* chore: update immutable variable allowlist
* fix: exclude the FaultDisputeGameV2 from reinitialize test
* fix: array access
* fix: compiler setting restriction v2
* fix: snapshot lock
* fix: add faultdisputegame v2 to allowlist
* fix: use correct path
* feat: add helper function to test contract for v2 fdg
* Update packages/contracts-bedrock/test/dispute/DisputeGameFactory.t.sol
Co-authored-by: mbaxter <meredith@oplabs.co>
* fix: remove CANNON_2 for now
* fix: pull in readability change for cwia
* fix: add error to interface
* fix: add error to interface
* chore: bump semver and lock
---------
Co-authored-by: mbaxter <meredith@oplabs.co>
* Move `closer.Close()` to a defer statement immediately after error checking (#17166)
* op-sync-tester: Verifier Engine APIs for Isthmus (#17072)
* op-sync-tester: Verifier Engine APIs
* refactor and add comments
* rebasing for changing canyon from shanghai
* op-sync-tester: Verifier Engine APIs for Ecotone, Fjord, Granite, Holocene (#17181)
* Support fjord, granite, holocene
* Revise comments
* op-devstack: add SyncTester to sysgo; initial E2E test with SyncTester (#17132)
* op-devstack: link SyncTester with L2CL; initial e2e test
* op-sync-tester: augment sync tester config
* op-devstack: add TargetBlocks to sync tester initialization
* op-sync-tester, op-devstack: use FCUState
* op-devstack: remove SyncTester.hydrate
* op-acceptance-tests: enable L2CL2 sync with SyncTester
* op-sync-tester, op-devstack: renames
* op-devstack: remove pointer as FCUState is mandatory
* Upload finalized Cannon (Go 1.24) audit report (#17183)
* feat(cannon): reduce info logging frequency from %100000 to %1000000 (#17186)
* optimize cannon ux
* Fix from %1000000 to %1000000000
* Update README.md (#16753)
* Reorganize sync deriver logic (#17098)
* op-devstack: add hydrate to sync tester (#17198)
* cannon: Deploy Cannon with Go 1.24 support (#17155)
* Update standard MIPSVersion constant
* Update OPCMStandardValidator stateVersion() check
* Update StandardConstants.MIPS_VERSION
* Replace hard-coded mipsversion values in OPCMStandardValidator tests
* Run forge fmt
* Update OPContractsManagerStandardValidator version
* Run semver-lock
* chore: Add fork retries to upgrade tests (#17201)
* chore: Add fork retries to upgrade tests
* fix: Param
* chore: Use env instead
* feat(kurtosis-devnet): 1/2 add flashblocks support (#17172)
* feat(kurtosis-devnet): flashblocks support
* feat(kurtosis-devnet): lint
* fix(flashblocks): 1/2 comments
* all: Update op-geth dependency, based on geth v1.16.1 (#16785)
* Upgrade op-geth with upstream v1.16.1 version
* Update to fix linters
* go mod tidy
* Fix part of tests
* Update op-geth dependency
* don't enable osaka in op-program test miner
* Bump op-geth version
* Disable Osaka in op-program test miner
* op-program: Refresh cannon compat report (#17071)
This is done for an incoming op-geth dependency update.
The new vm-compat findings highlight a new control flow path where the
flock syscall could be used. Similar control flow paths already exist in
the existing compatibility report. And these are benign for the same
reason; because they're only reachable by a program that uses a real
file-based ethdb.Database. The op-program uses a memory-based
ethdb.Database implementation to ensure that no file-related operations
occur during its execution.
The other flagged (WARNING) syscall use is related to the above flock
operation. This occurs when the go runtime issues epoll_ctl syscalls to
synchronize the file lock. Since we know that file operations won't
occur, this syscall use is also unreachable.
* Bump op-geth version
* op-service/eth: fix validationError string pointer reference
* op-service/eth: fix exec payload creation from block
Execution payloads must only set the withdrawals root post-Isthmus.
The block's withdrawals root is set during assembly pre-Isthmus.
* Bump op-geth version
* Bump op-geth version (catch nil chainView)
* Bump op-geth dependency to v1.101601.0-rc.1
---------
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
Co-authored-by: Inphi <mlaw2501@gmail.com>
* challenger: Add a metric to report the number of consecutive failures (#17193)
* challenger: Add a metric to report the number of consecutive failures per VM type
Allows ignoring transient errors in setup because a source node is briefly offline.
* challenger: Create vmInstructionCacheMissCount metric.
Fixes nil dereference.
* superchain-config: Fix fuzz test proxyAdmin constraints (#17203)
* Disallow *super* proxyAdmin/Owner
* Tweak comment
* op-up: add ascii art (#17205)
* op-chain-ops: update srcmap loading to handle forge compiler profiles (#17196)
* op-up: add survey link (#17206)
* op-up: add ascii art
* op-up: add survey link
We needed to build the orchestrator ourselves instead of using
the higher-level `presets.DoMain` function because `DoMain` calls
`os.Exit`, preventing us from showing the link on exit. This
dependency was also preventing us from implementing better CLI
handling (#17076), which is now unblocked.
* op-up: basic cli argument handling (#17208)
* ci: Write cannon preimage commit info to a temp file before uploading (#17219)
May let gsutil cp retry better and fix flakiness.
* op-sync-tester: implement L2ELNode interface with sync tester (#17200)
* op-devstack: implement SyncTester as ELNode interface
* op-sync-tester: remove Target and EntryCfg
* op-devstack: use ids.SyncTester identity for the SyncTester
* op-devstack: both userRPC and authRPC contain session parameters
* op-devstack: add user and auth proxy to sync tester
* chore: update op-deployer docs (#17204)
* Update installation.md
* Update installation.md
* fix(ci): remove #986 todo (#17229)
* Verify contract deployment tx is actually included. (#17232)
The generated bindings only verify that the transaction can be sent, not that it was actually included which can lead to race conditions where estimating gas for the next tx that uses the transaction fails because there is no code at the address if the tx is still pending.
* op-sync-tester: Verifier Engine APIs for Bedrock, Canyon, Delta (#17234)
* op-sync-tester: Verifier Engine APIs for Bedrock, Canyon, Delta
* op-devstack: Presets for sequential HF activation
* op-acceptance-tests: L2CL with Sync Tester advance HF with distinct time
* typo
* feat(op-devstack): support kona supervisor sysgo (#17195)
* feat(op-devstack): support kona-supervisor in sysgo
* remove cluster rollupcfg
* supervisor opt removed
* op-up: add unit test (#17210)
* op-program: Fix length check for pending progress in consolidate step (#17220)
* op-challenger: Implement an option to restrict frequency of update cycles. (#17233)
By running update cycles less often, the number of calls made to the L1 node can be reduced.
* feat(op-acceptance-tests): flaky test report; updates. (#17250)
- Ensure its sorted by #flakes(desc)
- Add a warning about positive false positives
* op-sync-tester: Session Types and API interfaces (#17252)
* op-sync-tester: Session Types and API interfaces
* linter
* op-deployer: Add forge CLI wrapper (#17231)
* op-deployer: StandardBin enforces specific forge version (#17242)
* AutodetectBin enforces specific forge version
* remove dir creation from AutodetectBin.Ensure()
* rename AutodetectBinary to StandardBinary
* cannon: Reduce size of heap/code cache (#17246)
* cannon: Reduce size of heap/code cache
* op-e2e: Bump executor limiter for fp tests
* cannon: rename defaultCodeRegionSize
* op-devstack: Fix flakiness in AwaitTimestamp (#17270)
There's no guarantee that a waiter will see every block, so just find the block the fork should activate and wait for it specifically.
* op-deployer: enable embedded artifacts integration test (#17276)
* ci: Remove codecov from go tests (#17291)
* op-devstack: Explicit Sync Tester EL and API Session Binding (#17275)
* op-devstack: Explicit mock EL and Session binding
* Add dummy session to acceptance tests
* op-devstack: better sync tester naming and init
* revoke and comments
* Modularize and clean up
* configurable delay between game responses (#16988)
* update op-challenger README devnet startup commands
* implement basic version of configurable delay between game responses inside the op-challenger
* add integration testing for the ResponseDelay parameter which controls the configurable delay between game responses
* implement feedback from reviews, in particular improvements to the unit / integration testing and switching to use of clock.Clock
* implement ResponseDelayAfter config, adding a new config param controlling how many responses into each game the ResponseDelay config should become active
* implement the agent to respond immediately (bypass any ResponseDelay config set) if the game is currently inside the extension period
* make improvements from feedback, add a check to ensure that delaying only occurs when it will not cause the challenger to wait until the extension period begins, and also add the additionally needed testing associated with that new check
* fix minimal race condition of responseCount using mutex
* simplify delay calculation logic by removing calculateActualExtension() function and its associated testing, since the base extension is, anyway, a more conservative figure
* switch to using an atomic int for responseCount instead of a separate mutex
* add clarity on the functioning of the ResponseDelay and ResponseDelayAfter configuration fields in config.go
* Apply suggestions from code review
Co-authored-by: Adrian Sutton <adrian@symphonious.net>
* correct bug identified in feedback with wrong grandparent claim logic in agent.go and updated relevant tests
* fix typo from suggestion and associated issues in testing
* simplify logical legibility based on review feedback in agent.go
---------
Co-authored-by: Adrian Sutton <adrian@symphonious.net>
* chore: remove the frozen file check (#17289)
* chore: remove the frozen file check
* fix: remove references to removed script
* fix: remove frozen code check
* feat(op-acceptance-tests): port fjord (holocene) tests to devstack (#16920)
* feat(op-acceptance-tests): port fjord (holocene) tests to devstack
* feat(op-acceptance-tests): add holocene to base tests
* cr nits
* block nos
* blocknum
* fix(tests): fix port
* fix(tests): typo
* fix(op-acceptance-tests): typo
* fix(op-acceptance-tests): simplify tests
* fix(op-acceptance-tests): fix teku version
* fix(op-acceptance-tests): pass context
* fix(op-acceptance-tests): pin l1 block reads
---------
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
* op-sync-tester: Support sync namespace (#17299)
* op-sync-tester: Sync namespace implementation
* op-devstack: Sync Tester DSL
* op-acceptance-tests: Sync Tester sync namespace tests
* all: Update op-geth dependency, based on geth v1.16.2 (#17228)
* update op-geth version
* Update cannon baseline files for geth 1.16.2 upgrade.
---------
Co-authored-by: Adrian Sutton <adrian@oplabs.co>
* op-deployer: add configurable chainIntent.GasLimit field (#17271)
* feat(op-acceptance-tests): Port TestSmokeTestFailure and TestInteropSystemNoop to Devstack (#17300)
* feat(op-acceptance-tests): port interop smoke tests
* feat(op-acceptance-tests): linter
* ci: Run the publish-cannon-prestates job on circleci boxes instead of latitude. (#17296)
It doesn't need lots of resources and we're seeing network flakiness so try uploading from a different network.
* op-devstack: add sync-tester with external EL (#17251)
* op-devstack: add sync-tester with ext cl config
* op-devstack: try setting up remote L2 chain
* op-devstack: use remote EL and CL for L1 nodes
* op-devstack: fix L2CL from sequencer to verifier
* op-devstack: remove redundant configs
* op-acceptance-tests: use RPC for CI
* op-acceptance-tests: skip tests until CI allows tests using external endpoints
* circleci: attempt CI endpoints
* op-devstack: address comments from PR
* op-devstack: address comments from PR
* fix comment for l1.cache-size (#17107)
* feat: add feature flagging functionality to SystemConfig (#17281)
* feat: add feature flagging functionality to SystemConfig
Adds a function to the SystemConfig for feature flagging. Features
are identified by 32 byte strings and can be toggled on or off by
the ProxyAdmin or the owner of the ProxyAdmin. Note that this
commit does not actually use any feature flags but demonstrates
what a feature flag would look like by adding in the flag for
the ETHLockbox feature.
* feat: update for PR feedback
* fix: small test tweaks
* fix: broken test
* feat(op-acceptance-tests): add more sysgo tests. (#16817)
* feat(op-acceptance-tests): add more sysgo tests.
* fix(op-devstack): ecotone; fees.
Use the actual increase in the L1FeeVault balance. This is because in Ecotone, the L1 fee includes both base fee and blob base fee components.
* fix(op-acceptance-tests): skipping flaky/broken tests.
* fix(op-acceptance-tests): interop; TestInteropSystemSupervisor
* fix(op-acceptance-tests): justfile; exit early for gateless.
* fix(op-acceptance-tests): tidied justfile
* fix(op-acceptance-tests): fix ecotone fees.
The recent commit changed L1 fee calculation to use vault balance increases as the source of truth, but base fee and priority fee calculations were still using the old method (calculating from block data). Made all fee calculations by making vault increases the source of truth.
* fix(op-acceptance-tests): increase default timeout for gateless mode.
* chore: Conditional logic
* fix(op-acceptance-tests): TestSuperRootWithdrawal nonce issue and timeouts
* fix(op-acceptance-tests): re-enable safeheaddb tests after #17083 fix
* fix(op-acceptance-tests): security; env var injection
The LOG_LEVEL environment variable is used directly in shell command execution without validation or sanitization, allowing command injection attacks.
* feat(op-acceptance-tests): justfile; allow gateless for sysext.
Allow gateless mode to run for an external devnet ('sysext' orchestrator)
* clean(op-acceptance-tests): circleci; removed memory-base job
The new memory-all is a superset of memory-base; so we don't need both.
* fix(op-devstack): enhance Ecotone fee validation and enforce operator vault constraints
- Add validation that receipt L1Fee matches L1FeeVault increase
- Restore receipt-based fee calculations for validation (baseFee and L2Fee)
- Enforce OperatorVault must be zero in Ecotone (operator fees introduced in Isthmus)
- Exclude OperatorVault from total fee calculations in Ecotone
- Add comprehensive receipt fee validation checks
* fix(op-devstack): ecotone; cross-validation of fees
Added cross-validation between receipt and vault fees: The code now verifies that:
- receiptBaseFee (block.BaseFee × gasUsed) equals vaultBaseFee (BaseFeeVault increase)
- receiptL2Fee (effectiveGasPrice × gasUsed) equals vaultL2Fee (BaseFee + SequencerFee vault increases)
* fix(op-devstack): supervisor sync status L1 mismatch retry
Increase retry attempts and handle L1 sync mismatch errors to fix flaky TestExecMsgDifferEventIndexInSingleTx.
* fix(op-acceptance-tests): TestPostInteropUpgradeComprehensive
Made it serial due to flakiness.
* feat(op-acceptance-tests): ci; tweak timeout and verbosity.
* fix(op-acceptance-tests): exclude interop tests from ci tag
These in-memory devstack tests don't work reliably with gotestsum's
retry mechanism. They run fine via op-acceptor in the memory-all job
but fail when run directly with go test in go-tests-short.
Adding !ci build constraint to exclude from standard CI test suite
while keeping them available for dedicated acceptance test runs.
* fix(op-acceptance-tests): TestWithdrawal nonce synchronization
Use fresh EOA instance for withdrawal initiation to prevent nonce
conflicts when shared L1/L2 keys encounter retry logic.
* chore(op-acceptance-tests): TestPreNoInbox marked as flaky
* chore(op-acceptance-tests): test limiting concurrency
* chore(op-acceptance-tests): self-hosted runner
Default to using our self-hosted runners.
Accept a parameter which allows individual jobs to opt-out and use CCI/Cloud runners.
---------
Co-authored-by: Jan Nanista <jan.jakub.nanista@gmail.com>
* feat(op-acceptance-tests): move all ATs to one workflow (#16755)
Stop running (sysgo/in-memory) acceptance tests as unit tests in other workflows
* feat(op-acceptance-tests): op-acceptor v3.1.0 (#17310)
Upgrades op-acceptor to [v3.1.0](https://github.com/ethereum-optimism/infra/releases/tag/op-acceptor%2Fv3.1.0)
* make `IDelayedWETH` inherit `IProxyAdminOwnedBase` (#16912)
* make IDelayedWETH inherit IProxyAdminOwnedBase
* forge fmt
* circleci, op-acceptance-tests: nightly ci sync tests with external networks (#17314)
* circleci, op-acceptance-tests: nightly ci sync tests with external networks
* circleci: try sync_tester_ext_el within op-acceptance-tests
* circleci: disable test on every push; run on daily schedule
* feat: bump op-geth and update GetCommittedState to GetStateAndCommitedState (#17323)
Co-authored-by: Jacob Elias <jacobelias@Mac.lan>
* remove un-used code in backend.FromConfig (#17321)
* remove dup (#17325)
* feat: creator pattern integrate FaultDisputeGameV2 into DGF (#17119)
* feat: update dispute game factory to support impl args
* test: test cwia update through dgf
* fix: test function name linting
* fix: remove unneeded function
* test: move creator pattern create test to create contract
* fix: remove funciton for setImplementationArgs from the interface as well
* fix: add back unclassified tests
* fix(nit): update wording
Co-authored-by: mbaxter <meredith@oplabs.co>
* fix: conflict from cherry pick
* fix: update table to not be prescriptive about layout
* fix: formatting for table
* test: add tests for v2 and adjust based on impl updates for cwia
* fix: vm getter in tests
* fix: reuse _setGame and add additional param for implArgs
* chore: run forge fmt
* fix: directory structure validation
* fix: semver version bump fault dispute game v2
* fix: add same exclusion that exists for FaultDisputeGame.sol
* fix: bump snapshots
* chore: bump opcm standard validator semver
* fix: assert revert explicitly revert with no data
* fix: fork tests root claim
* fix: remove unused params from _getGameConstructorParamsv2 and setupFaultDisputeGameV2
* fix: bump major version for breaking change
* test: add tests for setImplementation with args
* test: check the rest of the constructor args
* test: set l2ChainId to nonzero value to make validate setting
* chore: remove console.log
* fix: revert earlier with calldata length check
* test: add asserts for the creator and l2blocknumber
* chore: remove comment about skipping in fork environment
* fix: follow new naming convention
* fix: use more realistic args for implArgs
* fix: bump semver for standard validator
* chore: bump snapshot for StandardValidator
---------
Co-authored-by: mbaxter <meredith@oplabs.co>
* op-sync-tester: Better Session Handling (#17316)
* op-sync-tester: Better Session Handling
* Use lock instead of rlock
* bug fix and style
* handle concurrency properly
* Simply session locking model
* feat: op-node sync tests for multiple networks in ci (#17334)
* feat: try to run synctest inci
* fea: try to run sync test with envvars
* fea: try to run sync test with envars and updated job
* fea: try to run sync test with matrix
* feat: no beacon l1 ci endpoint yet, just add base sepolia
* feat: added some todos for sync tester and unisepolia syncing
* op-acceptance-tests: remove chain id comparison; move runtime logs to test
* do not trigger on PRs
---------
Co-authored-by: Jacob Elias <jacobelias@Mac.lan>
Co-authored-by: Anton Evangelatov <anton.evangelatov@oplabs.co>
* min-base-fee: bring in op-geth code (#17307)
* boilerplate for Jovian fork
* update op-geth version
brings in min-base-fee code
* changes to get current tests passing
* kurtosis devnet: use temporary image for op-geth
Matches the version currently in go.mod. Can be reverted to default once the op-geth release is made.
We need to do this because interop implies jovian, so we need a jovian compatible op-geth to run with the longer extradata from genesis.
* bump op-geth
* update expected error message in TestCheckEIP1559ParamsMatch
* update to take account of PayloadAttributes.MinBaseFee being a *uint64
* op-program fixes
* fix computePayloadId
* use static error
* update op-geth image for interop kt-devnet
* createGenesisWithForkTime => createGenesisWithForkTimeOffset
* fully add interop override flag to op-service
* refactor: define holoceneArgs in terms of jovianArgs
* add test cases
* MinBaseFeeExtraData -> JovianExtraData
* bump op-geth version, make use of eip1559.DecodeOptimismExtraData
* checkEIP1559ParamsMatch -> checkExtraDataParamsMatch
* bump op-geth
* go mod tidy
* use eip1559.Validate/DecodeOptimismExtraData in PayloadToSystemConfig
* bring interop devnet op-geth in line with go.mod op-geth
* fix bug (pointer comparison)
* fix test
* go mod tidy
* tag issue in TODO
* consolidate: validate extra data even pre Holocene and fix test
* fix test miner to set minbasefee correctly
* use eip1559.DecodeOptimismExtraData in blockToDepositsOnlyAttributes
* bump op-geth
* go mod tidy
* bump op-geth in kt devnet
* only validate extra data from holocene
* bump op-geth to tagged RC
* use pre-Jovian value in test miner.Fork
* op-program test miner: set min base fee to a stub (valid) value if Jovian is active
* remove redundant check on isOptimism
We are always running op rules inside the program
* Co-authorship credit
This PR contains work that was cherry-picked from https://github.com/ethereum-optimism/optimism/pull/16852.
This commit will mean they are credited with co-authorship.
Co-authored-by: William Law <williamlaw.wtl@gmail.com>
Co-authored-by: Niran Babalola <niran@niran.org>
---------
Co-authored-by: William Law <williamlaw.wtl@gmail.com>
Co-authored-by: Niran Babalola <niran@niran.org>
* feat: dev feature flagging in OPCM (#17268)
* feat: dev feature flagging in OPCM
Adds functionality to tests and OPCM that makes it possible to
execute use feature flags in the OPCM that selectively utilize
specific functionality. This flag is represented as a 32 byte
bitmap for op-deployer compatibility and makes it possible to
support 32 unique development features at the same time.
* feat: small ergonomic cleanup
* feat: test fixes
* fix: portal upgrade implementation
* fix: more test fixes
* fix: working on lockbox tests
* fix: most contract tests should work now
* fix: run opcm against latest blocks
* fix: update OPCM bindings
* fix: correct error format in OPCMCC
* fix: update ReadImplementationAddresses
* fix: bug in ReadImplementations
* fix: tweaked superchain config check in ocpm for now
* fix: opcm fix after rebase
* fix: use fake feature for SystemConfig tests
* feat: parameterized tests for dev features
* fix: circle ci syntax
* fix: matrix naming
* feat: parameterize upgrades too
* fix: only parameterize coverage
* feat: more tests
* fix: rebase conflicts
* feat: add dev feature bitmap to e2e
* fix: go bug
* fix: more go test failures
* fix: pr comments
* fix: better check for use super roots
* fix: pr feedback
* fix: skip test for interop lockbox
* fix: typo
* fix: rebase fixes
* fix: ci naming
* feat: updated system config pause (#17322)
* feat: updated system config pause
* fix: ci fixes
* fix: simpler logic in system config paused check
* fix: rebase fixes
* feat: have VerifyOPCM check for dev bitmap (#17324)
* feat: have VerifyOPCM check for dev bitmap
* fix: include required getter in verifyopcm
* op-e2e: Fix broken jovian precompile FP tests (#17349)
* contracts: Add CANNON_KONA game type (#17358)
* contracts: Add CANNON_KONA game type
* contracts: Add SUPER_ASTERISC_KONA game type
* contracts: Add super cannon kona game type
* feat(readme): update directory structure (#17359)
* refactor(op-e2e): use ActivateForkAtOffset utility (#17362)
Currently, each time we do a new fork we need to go back and modify activation action tests for some prior forks. With this change, such modifications will no longer be necessary.
* fix superchainConfig upgrade issue & support multiple superchainConfigs (#16838)
* fix superchainConfig upgrade issue & support multiple superchainConfigs
* fixes to upgrade tests and contracts-check
* better approach, compare versions
* fixes
* fixes
* fix non op upgrade tests
* fix the opcm upgrade checks to support upgradeSuperchainConfig function checks
* add test for SuperchainConfigInconsistent error
* fix upgrade fn superchainConfig check
* add more tests for SemverComp
* implement decisions from design doc review
* implement decisions from design doc review
* fix semver and snapshots
* implement checks for upgradeSuperchainConfig
* fix ci
* address comments
* address comments
* rm dup comment
* improve test nit
* address graphite comments
* fix ci
* op-sync-tester: Better logging (#17364)
* proofs: Introduce PermissionedDisputeGame v2 (#17290)
* Create PDG v2
* Add PDG v2 interface
* Fix references to FDG and interface
* Add PDG v2 test
* Fix pdg v2 setup in test
* Fix pdg v2 game setup in tests
* Add a few more test assertions, rework l2ChainId handling
* Update PDG v2 version
* Update some config files that should reference PDG v2
* Run semver-lock
* fix: exclude PermissionedDisputeGamev2
* chore: run forge fmt
* fix: follow new naming convention
* fix: incoming change added exclusion as well
---------
Co-authored-by: steven <steven.nevins.js@gmail.com>
* docs(op-e2e/system): add deprecation notice (#17369)
* op-e2e/system: add deprecation notice
* clarify where to put acceptance tests
* op-service: cliutils add support for common.Hash (#17376)
* op-service: cliutils add support for common.Hash
* add hash validation to avoid unexpected behavior
* op-challenger: Fix metric label name for asterisc-kona (#17367)
* prestate-check: Add support for kona (#17355)
* prestate-check: Introduce abstraction for how prestate data is loaded
Begins preparing for adding kona prestate support.
* prestate-check: Abstract chain config loader.
op-reth doesn't use the same format for superchain config data.
* prestate-check: Support loading config data for kona states.
* prestate-check: Remove config loader abstraction again.
* prestate-check: Replace todo with explanation
* prestate-check: Point back to optimism branch
* op-program: Use prestate build script in repro.justfile (#17372)
* op-challenger: Add cannon-kona trace support (#17356)
* add kona cannon executor
* implement cannon-kona trace type support
- add TraceTypeCannonKona case to runner/factory.go
- add TraceTypeCannonKona validation to flags/flags.go
- fix CLI arguments for kona-host in kona_server_executor.go
* simplify switch logic over trace types in flags.go
* fix cannon-kona trace type CI failures: add missing validation, test setup, and parameter fixes
* implement more robust Cannon/CannonKona architectural separation with dedicated flags, config validation, and test setup to fix CI failures based on feedback
* Set cannon-kona path in docker images
Add cannon-kona to set of default games.
* op-challenger: Fix tests.
* op-challenger: Add super-cannon-kona game type
Not yet supported as a trace type.
* op-challenger: Reduce duplicate code
---------
Co-authored-by: angel-ding-cb <angel.ding@coinbase.com>
Co-authored-by: Leopold Joy <leo@leopoldjoy.com>
* fix: version loop to handle tags with spaces (#17360)
* fix: bump validator version on develop (#17378)
This PR bumps the version for the StandardValidator on develop.
The version in the 4.1.0 proposal branch is 1.13.0 and this
version incldues changes that are not on the proposal branch, so
this version will be 1.14.0.
* fixed kona envs (#17370)
* op-acceptance-tests: upgrade tests with real-data (op-sepolia) (#17363)
* op-acceptance-tests: hfs ext package
* enable acceptance tests
* op-acceptance-tests: wait for LocalSafe to progress as well
* SerialT to ParallelT
* longer timeout
* correct runtime config print
* try run_all: true
* op-acceptance-tests: split sync_tester tests into multiple packages
* op-acceptance-tests: add Delta HF; use RollupConfig() instead of ChainConfig()
* enable check against UnsafeL2.Time
* use rollup types, and simplify tests
* extract WaitForNonZeroUnsafeTime
* better errors for syncTester session
* Get version of impls from the impl contracts themselves, reduce bytecode (#17377)
* docs: add interface inheritance guidelines and style examples to guide (#17339)
* docs: add interface inheritance guidelines to style guide
- Document why contracts must not inherit from their own interfaces
- Explain alignment issues with base contracts and compiler errors
- Add examples showing correct and incorrect patterns
- Include rationale for pseudo-constructor requirements
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Update intro
* Fix outdated errors section
* Add examples to underscore prefixed args section
* Add examples for named vars
* Add examples for events
* Examples for immutables
* Examples for spacers
* Remove "trivial boolean with string" case as allowed.
* Fix example: errors go inside contract
* feat: add semgrep rule for event parameter formatting
Implement sol-style-event-param-fmt rule to enforce:
- Event parameters must use camelCase
- No underscore prefixes on event parameters
- All event parameters must be named
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Improve event params guidance and add a semgrep rule
* Undo adding immutable tests
It's a rabbit hole I don't want to go down rn
* Improve immutable examples
* Typo fix
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* op-up: encode version information in binary (#17405)
* fix(op-acceptance-tests): wait for fund balance for persistent devnets (#17397)
* fix(op-acceptance-tests): wait for fund balance for persistent devnets
* fix(op-acceptance-tests): always wait for balance
* fix: remove unused variables from test file (#17400)
* op-conductor: p2p healthcheck fix and execution_p2p_healthcheck_api_type (#17294)
* op-conductor: p2p healthcheck fix and execution_p2p_healthcheck_api_type
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* nit
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
---------
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* circleci: enable OPM and Base mainnet op-node sync tests (nightly) (#17393)
* circleci: enable OPM op-node sync tests
* add base mainnet
* slack: notify on failure with mention in #notify-ci-failures
* use slack member id
* op-dispute-mon: Support cannon-kona games (#17380)
* ci: Add a stand alone check for solc warnings (#17403)
* ci: Add a stand alone check for solc warnings
* Use non-dev build to prevent compiler warnings
* op-up: update default version in install script (#17414)
* acceptance-tests.yaml: flashblocks-with-isthmus gate config (#17413)
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* feat(op-acceptance-tests): v3.2.1 (#17422)
Updates op-acceptor to v3.2.1, which adds an optional progress indicator
* feat(devstack): add user RPC method. fix kona config in sysgo (#17390)
* Revert "ci: Add a stand alone check for solc warnings (#17403)" (#17428)
This reverts commit 3f11e7f90488ace578c5ec27a937e9414421e309.
* afix slack in semgrep-scan (#17433)
* chore(op-acceptance-tests): ci timeout (#17438)
Temporarily increase the 'no_output' CircleCI timeout as there's an issue making the tests occasionally stall for a long time.
* op-node: Skip L1 genesis hash check if block is not available from the L1 (#17407)
* op-node: Skip L1 genesis hash check if block is not available from the L1
* op-node: Switch L1 genesis check to using MaybeAsNotFoundErr
Switch supervisor_client back to it's own isNotFound. MaybeAsNotFoundErr is specific to identifying blocks and headers that are not found, the supervisor client is looking for super root not found. That's an important distinction so we should use separate code.
* Fix lint
* Update test
* chore: bump op-geth to include new superchain registry configuration of arena-z-sepolia isthmus hardfork (#17437)
* refactor(test): improve L2CrossDomainMessenger test coverage and quality (#17415)
* refactor(test): improve L2CrossDomainMessenger test coverage and quality
- convert sendMessage test to fuzz test for broader parameter validation
- enhance constructor test with version and MESSAGE_VERSION assertions
- enhance initialize test with additional state validation
- add focused sendMessage test with full event verification
- all tests pass and maintain existing functionality
* fix: rename test function to follow naming convention
- Change testFuzz_sendMessage_validParams_succeeds to testFuzz_sendMessage_withValidTargetAndGasLimit_succeeds
- Addresses GitHub comment about generic 'validParams' reason
- Function name now follows [method]_[functionName]_[reason]_[status] pattern
- Updated comment to be more descriptive of test scenario
* fix: apply forge fmt to resolve contracts-bedrock-checks CI failure
- Fix import statement formatting (add spaces around braces)
- Fix function call formatting (add spaces around braces)
- Fix function parameter formatting for multi-line declarations
- Addresses contracts-bedrock-checks CI failure from previous commit
* fix: replace assert with assertGt for better test practices
- Replace assert(bytes(...).length > 0) with assertGt(bytes(...).length, 0)
- Use Forge's assertion functions instead of native Solidity asserts
- Addresses mds1's code review feedback
* feat: increase fuzz test gas limit bound from 5M to 30M
- Align with other cross-domain messaging tests in codebase
- CrossDomainMessenger.t.sol uses 30M, bridges use 10M, portal uses 50M
- 30M is only 0.70% of uint32.max and well within technical constraints
- Provides better fuzz coverage for realistic gas limit scenarios
- Addresses mds1's feedback about conservative 5M bound
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat: set up OPCM for U17 (#17406)
* feat: set up OPCM for U17
This PR removes U16 code from the OPCM and updates it to work for
U17. Various tests have been updated to support this, and the OPCM
has been improved so that it can be more easily utilized by
future maintainers.
* feat: get rid of old upgrade functions
* fix: semgrep errors
* fix: encodecall error
* fix: opcm check look at internal func
* fix: bump interop portal version
* fix: one more broken test
* fix: opcm graphite comment
* fix: go tests
* fix: superchain config test error
* fix: more test failures
* fix: more test failures
* fix: correct semgrep/event rules
* fix: pr review
* fix: compilation errors
* feat: contract changes to enable min-base-fee (#17330)
* min-base-fee solidity diffs
* Update packages/contracts-bedrock/src/L1/SystemConfig.sol
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
* just pre-pr
* remove codegen bin
* update semver and remove some more diffs in systemconfig codegen
* revert bindings/systemconfig
* just pre-pr
---------
Co-authored-by: George Knee <georgeknee@googlemail.com>
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
* fix(op-deployer): EnsureDefaultCacheDir (#17411)
* justfile: add latest-versions recipe (#17399)
* justfile: add latest-versions recipe
* fix command failure masking
* print both stable and latest versions
* chore(cleanup): close #17194 (#17452)
* op-acceptance-tests: remove INITIAL_L2_BLOCK variable, and fetch latest block number from EL (#17453)
* op-deployer: read addresses onchain instead of from chainConfig (#17456)
* feat(op-acceptance-tests): op-acceptor v3.3.0 (#17467)
https://github.com/ethereum-optimism/infra/releases/tag/op-acceptor%2Fv3.3.0
* feat: add tests for min-base-fee (#17441)
* min-base-fee solidity diffs
* remove codegen bin
* update semver and remove some more diffs in systemconfig codegen
* revert bindings/systemconfig
* e2e test
* spike acceptance-test
* wip acceptance test
* add support for jovian mbf
* op-acceptance-test: min base fee (#14)
* add kurtosis files
* move dsl into test
* passing
* ensure block is progressing
* remove checkfordecrease func
* simulate txs
* nits + simplify
* base + jovian sysgo passes
* sysext passes
* nits + reduce bindings diff
* just wait for 1 block
* use zero addr, and swap test order
* add else clause to e2e test
* use high/med/zero mbfs
* e2e test configure mbf
* check activation block base fee is less than mbf
* wip setting diff mbfs
* claude fix
* build activation+1 block
* simulate some tx on diff med/high mbfs
* wip claude dont use extclient
* use 2gwei, 5gwei too high causes maxFeePerGas error
* sysgo and sysext pass for jovian
* dont default ptr(0) and first nit on action test
* remove user tx in actions
* acceptance-test no user tx + reduce diffs in actions
* kurtosis: run on jovian devnet (#15)
* wip
* pin teku version
* fix TestSystemConfigMarshaling
* fix attribute test + add comment in payload_util
* godoc: mbf in SystemConfig (#17481)
* fix: bug blocking op-deployer verify (#17478)
Fixes some bugs in op-deployer's verify command. Also fixes a few
issues with the contracts that causes the deployer to struggle
to properly verify things.
* feat(ci): parallelise go-tests jobs (#17468)
* feat(ci): go-tests now uses a fan-out.
These tests should now fan-out to multiple machines in CI, making the runs faster and more reliable.
* feat(make): simplified go-test-ci jobs
Reused a common target, as they were almost identical.
* op-deployer: update docker builds to install forge binary (#17304)
* op-deployer: include contracts build in 'just build' recipe
* modify build command to skip contracts build in ci
* install forge binary in op-deployer docker container
* lint and comment fixes
* remove Dockerfile.minimal
* always use docker bake to build and publish images
* op-program: Add hint for fast block hash lookup (#17449)
* chore(superchain-registry): bump version for addresses cleanup (#17404)
update to geth v1.101602.3-rc.1
* cleanup kt-devnets (#17455)
* cleanup kt-devnets
* ci: isthmus -> jovian
* update justfile
* dedupe
* activate jovian at genesis on jovian devnet
* op-acceptance-tests: Increase timeout for interop msg tests (#17492)
* op-acceptance-tests: Deflake TestPreNoBox by adjust Interop time to future (#17495)
* Revert "feat(op-acceptance-tests): op-acceptor v3.3.0 (#17467)" (#17502)
This reverts commit c813b04c9bd24a9b1088ec8a8e3a7598344633ff.
* op-devstack: op-sync-tester: Add configurable preset (#17491)
* op-devstack: op-sync-tester: Add sync tester config
* Use concrete orchestrator type
* refactor: introduce `IsFeature` toggles for Jovian (#17424)
* introduce IsMinBaseFee feature toggle
* add comment
* fix fn call (rename)
* fix test
* decouple features
* add operator fee fix toggle
* fix tests
* bump op-geth to mainline commit
* fix failing semgrep check (#17504)
* fix failing semgrep check
* add semgrep checks to pre-pr
* op-node: remove elSyncEnabled as it is a noop (#17425)
* remove hold job phase (#17506)
* op-sync-tester: Support EL Sync (#17516)
* op-sync-tester: Support EL Sync
* op-sync-tester: Rename to ELSyncActive
* proofs: Move proposer/challenger params on v2 contract (#17463)
* Make calldata length check overridable
* Rework calldata length check
* Make calldata length helpers more granular
* Update PDG to use CWIA for proposer and challenger
* Add a few more tests
* Cleanup - rework method name, comments
* Run just lint
* Fix test names
* Add some more tests around invalid FDG immutable args data
* Add tests around invalid immutable args when creating PDGv2
* Add some method documentation
* Regenerate snapshots, run semver-lock
* Simplify method name
* Fix notice natspec comments
* Clean up step tests
* Reorder auth check and call to super.initialize
* Add fuzz test to validate step() reverts for unauthorized actors
* Run semver-lock
* op-deployer: create generic forge.BytesScriptEncoder (#17524)
* op-deployer: create generic forge.BytesScriptEncoder
* add encoding support for arrays
* LivenessModule2 implementation (#17272)
* start
* DeployOwnership scripts update
* cleanup
* reset challangeStartTime when re-enabling the module
Co-authored-by: almanax-ai[bot] <174396398+almanax-ai[bot]@users.noreply.github.com>
* remove duplicated comment
* test cleanup
* fmt
* semverlock
* add livenessmodule2 to checkfrozenfiles
* address alcueca's feedback
* change ownershiptransfer logic
* pre-pr
* LivenessModule - Slightly simplified code (#17277)
* Slightly simplified code
---------
Co-authored-by: alcueca <alberto@yield.is>
* address smartcontract's feedback
* alcueca's feedback
* smartcontract's feedback
* add extra checks suggested by alcueca
* fix clear error
* update snapshots
* conflicts
* name nitpicks and coverage at 100%
* fix tests
* remove interface extra lines
* fix event on test
* rename isChallenged function to getChallengePeriodEnd
* update snapshots
* update implementation from specs
* sentinel owner and interface fix
* DRYness comments
* move getter at the top
* update comment
* rename event
* add _assertModuleConfigured
* add _assertModuleEnabled
* assert module enable fixes
* _cancelChallenge internal function
* fix comments
* more comments
* split configure errors
* owner transfer invariant
* address comments
* address kelvin's feedback
* lint
* more comments
* alcueca's comments
---------
Co-authored-by: almanax-ai[bot] <174396398+almanax-ai[bot]@users.noreply.github.com>
Co-authored-by: Alberto Cuesta Cañada <38806121+alcueca@users.noreply.github.com>
Co-authored-by: alcueca <alberto@yield.is>
* op-acceptance-tests: move presets into tests, away from config.yaml (#17519)
* op-acceptance-tests: move network presets into tests, away from config.yaml
* op-acceptance-tests: simplify defaults for TestSyncTesterExtEL
* op-acceptance-tests: add stack.ExtNetworkConfig
* feat: add U16a report (#17538)
* feat: add U16a report
* Update docs/security-reviews/README.md
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* fix(op-deployer): forge verbose install (#17540)
* fix(op-deployer): forge verbose install
* fix(op-deployer): add ci docker build job
* opcm: Support cannon+kona games in addGameType (#17513)
* opcm: Support cannon+kona games in addGameType
* opcm: Update test name validation
* opcm: Remove unnecessary skips.
* opcm: Simplify test
* fix(op-deployer): remove forge version check (#17541)
* feat(op-deployer): cli based integration tests (#17511)
* refactor(test-validation): extract exclusions to TOML config and add tests (#17510)
* refactor(test-validation): extract exclusions to TOML config file
- move hardcoded exclusion lists from Go code to external TOML configuration
- add TOML parsing with structured ExclusionsConfig type
- implement dynamic exclusions loading with fallback path resolution
* test(test-validation): add test coverage for test-validation functions
- add tests for all previously untested functions in main.go
- organize test functions to match source file order
* op-deployer: simplify ReadImplementationAddresses.s.sol (#17542)
* op-deployer: simplify ReadImplementationAddresses.s.sol
* fix semgrep finding
* use getEIP1967Impl helper function
* fix comment
* tests: Skip Interop Acceptance Tests (#17555)
* Skip Interop Acceptance Tests
* exempt TestSuperRootWithdrawal
* fix: errant comment in OptimismPortal2 (#17482)
* fix: simplified code for SystemConfig code (#17539)
* chore(op-acceptance-tests): isthmus into base gate. (#17514)
As Isthmus is on Mainnet, we now move this gate into the 'base' gate which should work against all devnets.
* txmgr: fetch BlobBaseFee over RPC instead of computing from block header (#17566)
* txmgr: fetch BlobBaseFee over RPC instead of computing from block header
This simplifies the transaction manager, meaning it does not need to understand the chain config of L1 in order to estimate fees properly (which, from Fusaka, it will otherwise need to do because the formula for computing the blob base fee from the excess blob gas changes frequently with BPO forks).
* fix TestIncreaseGasPriceLimits
* fix TestTxMgrConfirmsBlobTxAtHigherGasPrice
* Update op-service/txmgr/txmgr.go
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
---------
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
* op-acceptance-tests: Ext Network EL Sync Test using Sync Tester (#17532)
* op-devstack: Expose L2EthExtendedClient for shim L2EL
* op-devstack: L2 CL Signaler Logic using admin API
* op-acceptance-test: op-acceptance-tests: EL Sync Test Config
* op-acceptance-tests: Sync Tester External Network HF tests: SyncMode
* op-sync-tester: Fix Post Isthmus WithdrawalRoots check
* op-devstack: Logging when L2 CL Signaling
* op-devstack: Explict Read Only Ext L2EL
* op-acceptance-tests: Proper preset for EL/CL Sync Testing
* rebase and cleanup
* ci: Sync Tester EL Sync test for real world
* op-acceptance-tests: Proper genesis set for EL/CL Sync Testing
* fix test name
* deflake
* tame possible race
* op-acceptance-tests: Bump attempts for CL Sync testing (#17567)
* tools: add justfile command for updating op-geth (#17549)
* add just command for updating op-geth
* improve script
no dependence on jq
accept other git ref types
* txmgr: lock mutex when updating cachedTx map (#17570)
* feat(ops): add AI Contract Test Maintenance System v0.1.0 (#17560)
* feat(ops): add AI Contract Test Maintenance System v0.1.0
- Add new ai-eng directory for AI engineering projects
- Implement test ranking system with staleness-based scoring algorithm
- Add modular Python architecture for test file discovery and contract mapping
- Integrate with existing exclusion system from contracts-bedrock
- Add runbook.md document
- Add justfile integration for command-line execution
- Generate JSON output format for ranked test results
- Support git-based commit timestamp analysis for priority calculation
- Add CHANGELOG.md following
* fix(ops): clean up AI Contract Test Maintenance System files
- Remove generated ranking.json output file
- Remove CHANGELOG.md
- Fix formatting issues in runbook.md documentation
* refactor(ops): simplify AI Contract Test Maintenance System structure
- consolidate modular Python files into single test_ranker.py module
- trim runbook.md to essential info only (overview, usage, output)
- add .gitignore for Python projects and output files
* feat(ai-eng): add exclusion configuration for contract test maintenance
- Create exclusion.toml file with separate directory and file exclusions
- Update test_ranker.py to use centralized exclusion configuration
- Add tests without .sol counterparts to exclusion list
- Apply code formatting improvements to test_ranker.py
* all: update op-geth (based on go-ethereum v1.16.3) (#17547)
* update op-geth to: merge go-ethereum v1.16.3
https://github.com/ethereum-optimism/op-geth
* bump op-geth
* various fixes
* `params.HistoryServeWindow` changed
8192 -> 8191
https://github.com/ethereum/go-ethereum/pull/32127
* Updated op-geth to v1.101602.4-0.20250922085653-2f0528ba0ed5
* update op-geth
* update op-geth to v1.101603.0-rc.1
---------
Co-authored-by: geoknee <georgeknee@googlemail.com>
* fix: update spearbit reviews (#17576)
* feat(ai-contracts-test): add prompt renderer component (#17578)
* feat(ai-contracts-test): add prompt renderer component
- implement render.py script for prompt generation with placeholder replacement
- add prompt/ directory with canonical prompt template (prompt.md)
- extend justfile with new commands: just render and just prompt (combined workflow)
- update runbook documentation with multi-step workflow instructions
* fix(semgrep): exclude prompt files from sol-safety-trycatch-eip150 rule
* perf: explictly set compiler runs to 0 to reduce profiles (#17572)
* feat: add safety checks for lockbox in setFeature (#17559)
* feat: add safety checks for lockbox in setFeature
* fix: better comment
* add coverage for MIPS64 back (#17409)
* chore(op-acceptance-tests): ci; remove kurtosis jobs. (#17581)
Kurtosis is being deprecated.
* feat(ai-contracts-test): add devin API integration (#17602)
* feat(ai-eng): reorganize components into a /component folder
- move test_ranker.py to components/tests_ranker/
- move prompt renderer to components/prompt-renderer/
- update justfile commands to use new component paths
- update documentation to reflect new directory structure
* feat(ai-contracts-test): add run ID system for test ranking and prompt generation
- add unique run ID generation using datetime format (YYYYMMDD_HHMMSS)
- update ranking output to include run_id field in JSON metadata
- change ranking filename format to {run_id}_ranking.json
- update prompt renderer to extract run_id from ranking filename
- change prompt filename format to {run_id}_prompt.md
- add automatic cleanup of old ranking and prompt files
* feat(ai-contracts-test): add devin api client with session logging
- add devin_client.py with full Devin API integration
- add JSONL logging system for session tracking and audit trail
- extend justfile with devin and ai-contracts-test commands
- update runbook documentation with Devin workflow and logging details
- add log.jsonl to gitignore for session logs
* github: Add git cliff config for release notes generation (#17594)
* chore(op-acceptance-tests): op-acceptor v3.3.1 (#17515)
Updates op-acceptor to [v3.3.1](https://github.com/ethereum-optimism/infra/releases/tag/op-acceptor%2Fv3.3.1)
* opcm: Zero out cannon-kona game types in migrate. (#17523)
* opcm: Zero out cannon-kona game types in migrate.
Only active if dev feature is enabled.
* fix opcm semver bump
* bump opcm validator semver
* revert semver changes to OPCMStandardValidator
---------
Co-authored-by: inphi <mlaw2501@gmail.com>
* op-acceptance-tests: move sync-tester hardforks tests under one package (#17535)
* op-acceptance-tests: move all ext hfs tests to a single pkg
* op-acceptance-tests/hfs-ext: change Serial to Parallel
* op-acceptance_tests: consolidate hardforks_ext and sync_tester_hfs_ext
* op-service/httputil: move resp.Body.Close right after err check (#17611)
* feat: integrate creator pattern implementations in DeployImplementations.s.sol (#17329)
* feat: integration v2 implementations in DeployImplementations.s.sol + tests
* feat: add feature flag on and integrate deploy.s.sol
* feat: integrate deploy config and pass input struct values from config
* fix: configure a proposer in PDG
* fix: update the input struct for DeployImplementations.s.sol
* fix: implementation structs
* Update implementations_test.go
Co-authored-by: mbaxter <meredith@oplabs.co>
* fix: use previous direct casting appraoch
* feat: integrate new bitmap feature
* fix: delete old bool
* fix: lint
* feat: add proposer to the config
* fix: implementation struct usage in sepolia test
* fix: add proposer to the struct for integration tests
* fix: fund the proposer and add it to the supercahin config
* fix: constructor args for pdgV2
* revert: remove proposer changes from op-chain-ops and op-deployer
Reverted changes to op-chain-ops/interopgen and op-deployer/pkg/deployer
directories back to the develop branch version as these changes are no
longer necessary for this PR.
* fix: remove proposer from deploy and deploy implementations
* fix: add back struct params
* fix: use casting for Impleemntations struct
* Update packages/contracts-bedrock/scripts/deploy/DeployImplementations.s.sol
Co-authored-by: mbaxter <meredith@oplabs.co>
* Update op-deployer/pkg/deployer/bootstrap/implementations.go
Co-authored-by: mbaxter <meredith@oplabs.co>
* fix: remove modification of inputs ad revert if feature flag enabled
* Update packages/contracts-bedrock/scripts/deploy/DeployImplementations.s.sol
Co-authored-by: Inphi <mlaw2501@gmail.com>
* Update packages/contracts-bedrock/scripts/deploy/DeployImplementations.s.sol
Co-authored-by: Inphi <mlaw2501@gmail.com>
* fix: go back to v2 impl
* fix: missing import and simplify conditional for valid impl addresses
* fix: update check for correct nibble after kona consumed 0x010
* fix: remove unused import
* test: add assertions for constructor params
* test: add sensible fuzz input ranges
* feat: add reasonable constraints to deploys script and fuzz inputs
* fix: remove unused import
* refactor: add helper function and constant
* fix: move flags to their owner file
* fix: lint warning
* test: remove constraints on bitmap
* fix: remove input validation from deploy implemenations
* Revert "fix: remove input validation from deploy implemenations"
This reverts commit aa2557bf164854b9b917601fd32b8b542d3eef53.
* test: add splitdepth check
* test: update run with feature flag on and update asserts
* fix: add back superchain proxy admin and superchainConfigProxy
* fix: correct max game depth
* test: expand bounded values
* refactor: move asserts about v2 config params
---------
Co-authored-by: mbaxter <meredith@oplabs.co>
Co-authored-by: Inphi <mlaw2501@gmail.com>
* op-acceptance-tests: Disable `TestSyncTesterELSync` tests for flakiness (#17617)
* op-devstack: fix WaitForFinalization bug (#17618)
Previously, we waiting for the current finalized block to be finalized,
while the expected behavior is to wait for the current unsafe block
to be finalized. This is now documented as well.
* chore(op-acceptance-tests): op-acceptor v3.4.2 (#17623)
Updates op-acceptor to [v3.4.2](https://github.com/ethereum-optimism/infra/releases/tag/op-acceptor%2Fv3.4.2)
* op-node/rollup/clsync: test for popping the same element (#17608)
* refactor(test): improve Storage test coverage and quality (#17610)
* refactor(test): improve Storage test coverage and quality
- reorganize tests into function-specific contracts following codebase patterns
- convert all tests to proper fuzz tests with testFuzz_ naming
- organize test contracts to match source function declaration order
- enhance test documentation with proper @notice comments
- maintain existing comprehensive coverage for all 8 Storage library functions
* fix: address GitHub PR comments
- Move testFuzz_setGetBytes32Multi_succeeds to Storage_GetBytes32_Test
- Rename Storage_Unclassified_Test to Storage_Uncategorized_Test
- Add natspec comments for all fuzz parameters
* fix: address GitHub PR comments
- remove empty Storage_Uncategorized_Test contract
- rename testFuzz_setGetBytes32Multi_succeeds to testFuzz_getBytes32_multiSlot_succeeds for correct naming format
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* op-sync-tester: Retry block fetching when processing newPayload (#17624)
* op-sync-tester: Retry block fetching when processing newPayload
* op-acceptance-tests: Reenable TestSyncTesterELSync
* txmgr: allow blobs to be sent with fusaka-compatible cell proofs (sidecar version 1) by configuration (#17620)
* update batcher
* txmgr: log full tx hash to enable debugging
* cell proofs OFF by default
* thread configurable helper through to test code and add test TODOs
* wire up flag
* fix test
* op-e2e/actions: add EnableCellProofs config
* remove TODO
* use regular not atomic bool
* refactor MakeSidecar
* optimize creation of proofs slice
* feat: add rules for Diamond (#17640)
* contracts: Add new dispute game dev feature flags to bedrock test matrix (#17635)
* Integrate v2 dispute game feature flag into FeatureFlags setup util
* Add v2 flag to circleci matrix
* Add CANNON_KONA to test matrix
* fix: have acceptance job skip building contract tests (#17639)
Skips building contract tests in the acceptance job which reduces
the amount of memory used and decreases the chance of the job
being killed. Also makes it faster.
* op-e2e/actions: replicate geth txpool validation in `L1Miner.IncludeTx` (#17636)
* op-e2e/actions: replicate geth txpool validation in L1Miner.IncludeTx
* lint
* remove unecessary check
* op-node/rollup: remove ReceivedUnsafePayloadEvent event (#17530)
* op-node/rollup: remove ReceivedUnsafePayloadEvent event
* op-node/rollup: add lock around AddUnsafePayload
* op-deployer: setup forge callers for apply deploy scripts (#17637)
* op-deployer: prepare deploy scripts with forge invokers
* op-deployer: align test script with runWithBytes convention
* remove runWithBytes from DeployOPChain.s.sol
* op-e2e: Tweak EL Sync Test to check non genesis (#17440)
* fix(ai-contracts-test): handle 504 timeout, prevent duplicate work, prompt changes (#17616)
* fix(ai-contracts-test): handle 504 timeout and prevent duplicate work
- add 30s timeout and exponential backoff retry for Devin API server errors
- exclude files processed in last 7 days from ranking to avoid duplicate work
- add system version tracking to log entries
- minor cleanup: sort imports, remove shebangs and add invariants/ to exclusion list
- update runbook with latest changes
* fix(prompt): correct test naming, categorization, and assertion patterns
* update opcm.upgrade* natspec to explain the delegateCaller assumptions (#17644)
* update opcm.upgrade* natspec to explain the delegateCaller assumptions
* fix semver
* change semver
* feat: add ProtocolVersions to restrictions (#17651)
* feat: add ProtocolVersions to restrictions
* chore: snapshots
* sysgo: l1 geth subprocess support (#17619)
* refactor(test): standardize Unclassified to Uncategorized in test naming (#17650)
* refactor(test): standardize Unclassified to Uncategorized in test naming
- update test contract names from *_Unclassified_Test to *_Uncategorized_Test
- simplify checkTestMethodName function to only check for "Uncategorized"
- remove unused featureEnabledName parameter in checkTestMethodName
* Apply suggestion from @graphite-app[bot]
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Apply suggestion from @JosepBove
Co-authored-by: JosepBove <josep@oplabs.co>
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: JosepBove <josep@oplabs.co>
* feat(op-acceptance-tests): kurtosis nightly tests. (#17658)
* add valid semver check script and tests (#17641)
* add valid semver check script and tests
* upgrade MERC20F in opcm.upgrade
* cleanup
* cleanup
* change semver
* op-node: refactor EngineController (#17647)
* op-node/rollup: merge CLSync with EngineController
* op-node/rollup: migrate CLSync tests to EngineController
* op-node/rollup: use e.requestForkchoiceUpdate instead of emit
* op-node: renames
* op-node: lock unit test expectation
* op-node: better comments
* op-node: EngineController: Proper locking (#17648)
* op-node: EngineController: Proper locking
* op-node: EngineController: proper tryUpdateEngine sync
* stick to rwlock for simplicity
* Remove goroutine limit since race solved
* proper locking for ForceReset
* fix rebase
* fix locking
* op-deployer: ensure standard forge version matches mise (#17670)
* chore(op-acceptance-tests): ci; discord notifications. (#17672)
- Update Platforms notification from user 'stefano' to role 'protocol devx pod'
- Remove 'changwan' from Kurtosis notifications
* clean(op-acceptance-tests): ci; consolidate workflows. (#17673)
We no longer need a separate workfor for pre/post-merge to develop.
* all: update op-geth to "fusaka defence cherry pick" commit (#17661)
* updated op-geth to v1.101603.0-synctest.0.0.20250930110811-5eee1eab50e6
pairs with https://github.com/ethereum-optimism/op-geth/pull/690
* Updated op-geth to v1.101603.1-rc.1
* opcm: Add unit tests around DevFeatures (#17643)
* Add unit tests for DevFeatures.sol, fix logic
* Port changes and tests to go util
* Bump contract versions
* Run semver-lock
* Align test names with existing conventions
* ci: Add nightly heavy fuzz testing job (#17668)
* ci: Add nightly heavy fuzz testing job
- Add contracts-bedrock-heavy-fuzz-nightly job using ciheavy profile
- Configure for 20000 fuzz runs, 128 invariant runs, 512 depth
- Schedule via build_daily (nightly at 2 AM UTC)
- Add heavy_fuzz_dispatch parameter for manual testing
- Set 90m timeout for comprehensive fuzzing
* Update .circleci/config.yml
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* ci: Address PR feedback - remove unnecessary steps
- Remove 'Lint forge test names' step from nightly job
- Remove contracts-bedrock-build from workflow (job builds as needed)
- Update dependency to initialize directly
Addresses feedback from @mds1 and @aliersh
* ci: Restore duplicate generate-flaky-report section
Restores the duplicated generate-flaky-report job that was removed
during merge conflict resolution in b379b03. The duplicate section
was part of the develop branch changes and should not have been
removed as it was outside the scope of this PR.
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Ariel Diaz <65925295+aliersh@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* op-acceptance-tests: introduce flake-shake system (#…
ClaytonNorthey92
added a commit
to hemilabs/optimism
that referenced
this pull request
Dec 1, 2025
* txmgr: allow blobs to be sent with fusaka-compatible cell proofs (sidecar version 1) by configuration (#17620)
* update batcher
* txmgr: log full tx hash to enable debugging
* cell proofs OFF by default
* thread configurable helper through to test code and add test TODOs
* wire up flag
* fix test
* op-e2e/actions: add EnableCellProofs config
* remove TODO
* use regular not atomic bool
* refactor MakeSidecar
* optimize creation of proofs slice
* feat: add rules for Diamond (#17640)
* contracts: Add new dispute game dev feature flags to bedrock test matrix (#17635)
* Integrate v2 dispute game feature flag into FeatureFlags setup util
* Add v2 flag to circleci matrix
* Add CANNON_KONA to test matrix
* fix: have acceptance job skip building contract tests (#17639)
Skips building contract tests in the acceptance job which reduces
the amount of memory used and decreases the chance of the job
being killed. Also makes it faster.
* op-e2e/actions: replicate geth txpool validation in `L1Miner.IncludeTx` (#17636)
* op-e2e/actions: replicate geth txpool validation in L1Miner.IncludeTx
* lint
* remove unecessary check
* op-node/rollup: remove ReceivedUnsafePayloadEvent event (#17530)
* op-node/rollup: remove ReceivedUnsafePayloadEvent event
* op-node/rollup: add lock around AddUnsafePayload
* op-deployer: setup forge callers for apply deploy scripts (#17637)
* op-deployer: prepare deploy scripts with forge invokers
* op-deployer: align test script with runWithBytes convention
* remove runWithBytes from DeployOPChain.s.sol
* op-e2e: Tweak EL Sync Test to check non genesis (#17440)
* fix(ai-contracts-test): handle 504 timeout, prevent duplicate work, prompt changes (#17616)
* fix(ai-contracts-test): handle 504 timeout and prevent duplicate work
- add 30s timeout and exponential backoff retry for Devin API server errors
- exclude files processed in last 7 days from ranking to avoid duplicate work
- add system version tracking to log entries
- minor cleanup: sort imports, remove shebangs and add invariants/ to exclusion list
- update runbook with latest changes
* fix(prompt): correct test naming, categorization, and assertion patterns
* update opcm.upgrade* natspec to explain the delegateCaller assumptions (#17644)
* update opcm.upgrade* natspec to explain the delegateCaller assumptions
* fix semver
* change semver
* feat: add ProtocolVersions to restrictions (#17651)
* feat: add ProtocolVersions to restrictions
* chore: snapshots
* sysgo: l1 geth subprocess support (#17619)
* refactor(test): standardize Unclassified to Uncategorized in test naming (#17650)
* refactor(test): standardize Unclassified to Uncategorized in test naming
- update test contract names from *_Unclassified_Test to *_Uncategorized_Test
- simplify checkTestMethodName function to only check for "Uncategorized"
- remove unused featureEnabledName parameter in checkTestMethodName
* Apply suggestion from @graphite-app[bot]
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Apply suggestion from @JosepBove
Co-authored-by: JosepBove <josep@oplabs.co>
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: JosepBove <josep@oplabs.co>
* feat(op-acceptance-tests): kurtosis nightly tests. (#17658)
* add valid semver check script and tests (#17641)
* add valid semver check script and tests
* upgrade MERC20F in opcm.upgrade
* cleanup
* cleanup
* change semver
* op-node: refactor EngineController (#17647)
* op-node/rollup: merge CLSync with EngineController
* op-node/rollup: migrate CLSync tests to EngineController
* op-node/rollup: use e.requestForkchoiceUpdate instead of emit
* op-node: renames
* op-node: lock unit test expectation
* op-node: better comments
* op-node: EngineController: Proper locking (#17648)
* op-node: EngineController: Proper locking
* op-node: EngineController: proper tryUpdateEngine sync
* stick to rwlock for simplicity
* Remove goroutine limit since race solved
* proper locking for ForceReset
* fix rebase
* fix locking
* op-deployer: ensure standard forge version matches mise (#17670)
* chore(op-acceptance-tests): ci; discord notifications. (#17672)
- Update Platforms notification from user 'stefano' to role 'protocol devx pod'
- Remove 'changwan' from Kurtosis notifications
* clean(op-acceptance-tests): ci; consolidate workflows. (#17673)
We no longer need a separate workfor for pre/post-merge to develop.
* all: update op-geth to "fusaka defence cherry pick" commit (#17661)
* updated op-geth to v1.101603.0-synctest.0.0.20250930110811-5eee1eab50e6
pairs with https://github.com/ethereum-optimism/op-geth/pull/690
* Updated op-geth to v1.101603.1-rc.1
* opcm: Add unit tests around DevFeatures (#17643)
* Add unit tests for DevFeatures.sol, fix logic
* Port changes and tests to go util
* Bump contract versions
* Run semver-lock
* Align test names with existing conventions
* ci: Add nightly heavy fuzz testing job (#17668)
* ci: Add nightly heavy fuzz testing job
- Add contracts-bedrock-heavy-fuzz-nightly job using ciheavy profile
- Configure for 20000 fuzz runs, 128 invariant runs, 512 depth
- Schedule via build_daily (nightly at 2 AM UTC)
- Add heavy_fuzz_dispatch parameter for manual testing
- Set 90m timeout for comprehensive fuzzing
* Update .circleci/config.yml
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* ci: Address PR feedback - remove unnecessary steps
- Remove 'Lint forge test names' step from nightly job
- Remove contracts-bedrock-build from workflow (job builds as needed)
- Update dependency to initialize directly
Addresses feedback from @mds1 and @aliersh
* ci: Restore duplicate generate-flaky-report section
Restores the duplicated generate-flaky-report job that was removed
during merge conflict resolution in b379b03. The duplicate section
was part of the develop branch changes and should not have been
removed as it was outside the scope of this PR.
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Ariel Diaz <65925295+aliersh@users.noreply.github.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* op-acceptance-tests: introduce flake-shake system (#17646)
Flake-shake is a test stability validation system that runs tests multiple times to detect flakiness before they reach production gates.
It serves as a quarantine area where new or potentially unstable tests must prove their reliability.
* op-node: merge EngineResetDeriver with EngineController (#17662)
* op-node: merge EngineResetDeriver with EngineController
* op-node/rollup: move startPayload under EngineController
* op-acceptance-tests: Cache and canonicalize L2EL payloads after gap fill (#17675)
* op-acceptance-tests: Cache and canonicalize L2EL payloads after gap fill
* Clarify args for retrying
* better var name
* op-contracts: DeployOPChain.s.sol conform to input/output struct pattern (#17657)
* op-contracts: DeployOPChain.s.sol conform to input/output struct pattern
* op-contracts: remove unused imports
* op-contracts: fix build check findings
* ChainAssertions.sol: add logs
* L2ChainDeployment: revert field name, json tag change
* DeployOPChain.s.sol: add input validations for dispute params
* Replace go-bip39 dependency (#17526)
* Replace go-bip39 dependency
* Bump go-ethereum-hdwallet dep
* op-node,op-program,kona: embed L1ChainConfig in configuration (#17568)
* op-node: add optional flag to load L1ChainConfig
And wire up to BlockInfo.BlobBaseFee() getter, which now accepts the config.
Flag need not be provided as long as the chain has a known l1 chain id (Mainnet, Sepolia).
* use test l1 chain config in many tests
* more wiring
* WIP: get op-program to compile
I don't expect this to work, yet
* sysgo: wire up op-node constructor with L1ChainConfig
* op-program host wiring
* op-e2e/actions wiring
* wire up boot info
* op-program looks up chain config for l1 mainnet and l1 sepolia
* wire up l1 chain config in op-e2e/system
* fix tests by passing sepolia chan config from op-geth
* add L1ChainConfig to e2esys.System struct
* handle err
* op-program/interop fixes
* add l1ChainConfig to supersystem_l2.go
* op-program: wire up l1chainconfigs to host flags and config
* fix mockInteropBootstrapOracle
* feat(l1): add custom l1 configs to kona proof
* op-program/chaincfg: split loading of l1 and l2 chain configs
* op-program/boot-interop: us a single l1 chain config
* fix tests
* lint
* wiring in op-challenger
* expose L1Genesis on SuperDisputeSystem
* lint
* fix test
* fixes
* add case to switch statement
* fix op-challenger error handling
* op-program: one chain config for interop, multiple otherwise
* op-program/host: always return a single l1 chain config
* fix chain Id comparisons
also add error for nil blob schedule
* op-node/service: add unit tests for NewL1ChainConfig
* op-program/host: use a single L1ChainConfig
* op-program can fallback to mainnet / sepolia L1s automatically
* lint
* add check
* sysgo/l2_Cl_opnode: replicate op-node fallback to known l1 chain configs
* single l1 genesis in challenger and vm executor
* simplify
* typo
* more harmony around single l1 chain config
* tweaks
* remove whoopsie
* wire up l1ChainConfig in test sequencer
* deprecate calcBlobFeeDefault
* reinstate method
* lint
* feat(devstack/kona): fix devstack commands for kona
* Add TestCannonNetworkorL1GenesisPathRequired and TestAsteriscNetworkorL1GenesisPathRequired
* move --l1-config-path into required args slice
* use single l1ChainConfig in RunKonaNative
* remove caldBlobFeeDefault
* refactor tests with validConfigWithNoNetworks
* NewL1ChainConfig warns when config is ignored
* add assertion for --l1-config-path in TestKonaFillHostCommand
* Implement validation for L1GenesisPath in OracleCommand and update tests to reflect changes
* fail on multiple l1 networks
* move lookup of l1 chain config out of core sysgo constructors and into system_synctester_ext.go
* remove duplicate test
* op-program/chaincfg: checkConfigFilenames permits 0 or 1 l1 genesis files
Adds test for not supplying a custom l1 genesis config.
* add test case for multiple l1 genesis files
* op-program/boot-info: add test for missing l1 chain config
* op-program/client/boot: panic if custom chain l1 config does not match rollup config l1 chain id
* specify l1/l2 in err msg
* typo
* fix test
* use single l1 chain config in interop_test.go
* validate l1 chain id matches when loading config from file
* reorder arguments for derive.L1InfoDeposit
* reorder action helper verifier/sequencer constructor arguments
* add comment
* reordering
* assert chain is consistency
* reorder
* change to path flag
* dedupe and fix test
* remove magic code from WithKonaNode sysgo helper
* DRY out, centralize, dedupe and unit test L1ChainConfigByChainID
* undo ff0901783842e80c76c50510117d87447f8223a4
* Update op-devstack/sysgo/l2_challenger.go
Co-authored-by: mbaxter <meredith@oplabs.co>
* fix
* mockInteropBootstrapOracle embeds a single l1ChainCfg and tests assert
* challenger should not require l1 genesis path to be configured
* make l1 genesis config optional for kona
* allow for multiple l1 configs in custom chain fs
* add l1 genesis flag to op-challenger
* fix
* fix lints and tests
* fix op-program config tests
* fix op-program cmd tests
* remove failing tests that shouldnt exist
* add comment
* Add TestCalcBlobFeeAcrossForksWithFixedExcess
* improve test
it will now fail if any fork is rescheduled
* fix test
* fix system/proofs tests
* Add warning to CalcBlobFeeCancun
* lint
---------
Co-authored-by: theochap <theodore.chap@gmail.com>
Co-authored-by: mbaxter <meredith@oplabs.co>
Co-authored-by: Josh Klopfenstein <joshklop@oplabs.co>
* Run isolated cannon-kona devfeature in ci (#17702)
* op-e2e/actions: add L1 Osaka activation test (#17666)
* add Fusaka activation test
* updated the test to add L1 blob base fee assertions
* fixes
* wire up Fusaka on L1 and improve test
* give test teeth
* improve prague fork test
* activate prague at genesis and osaka after
* updated op-geth to v1.101603.0-synctest.0.0.20250930110811-5eee1eab50e6
pairs with https://github.com/ethereum-optimism/op-geth/pull/690
* extend test to cover BPO forks
* typo fix
* typo fix
* dedupe tests
* rename file
* respond to review
---------
Co-authored-by: Dense <DenseDenise12@proton.me>
* feat(test-validation): add library support (#17690)
* feat(test-validation): add library support
- extract functions from AST for libraries (internal functions not in ABI)
- add test coverage for library validation helpers
- update exclusions for library-specific test patterns
- add success message when all validations pass
* fix(test): fix DevFeatures test contract naming
* test(op-program): test resolution of l1 chain config by chain ID (#17707)
* test resolution of l1 chain config by chain ID in op-program
* add sanity check
* fix(op-acceptance-tests): flaky tests report. (#17706)
Ensure we only show tests for the target branch
* op-acceptance-tests: Fix Unsafe payload queue syncing logic comments (#17712)
* fix(test) exclude foundry VM address from L2ToL2CrossDomainMessenger fuzz test (#17709)
* op-deployer: reduce default GasPadFactor 2.0 -> 1.2 (#17710)
* op-acceptance-tests: test that unsafe chain is stalled when ReqResSync is disabled (#17696)
* op-acceptance-tests: test that unsafe chain is stalled when ReqResSync is disabled
* address comments
* Full TimelockGuard implementation (#17584)
* feat: implement configureTimelockGuard function
- Add configureTimelockGuard function to allow Safes to set timelock delays
- Validate timelock delay between 1 second and 1 year
- Check that guard is properly enabled on calling Safe using getStorageAt()
- Store configuration per Safe with GuardConfigured event emission
- Add comprehensive test suite covering all spec requirements
- Implement IGuard interface for Safe compatibility
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement clearTimelockGuard function
- Add clearTimelockGuard function to allow Safes to clear timelock configuration
- Validate that guard is disabled before allowing configuration clearing
- Check that Safe was previously configured before clearing
- Delete configuration data and emit GuardCleared event
- Add comprehensive test suite covering all spec requirements
- Add new errors: TimelockGuard_GuardNotConfigured, TimelockGuard_GuardStillEnabled
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: extract guard checking logic to internal helper function
- Add internal _getGuard() helper to centralize guard address retrieval
- Update configureTimelockGuard and clearTimelockGuard to use helper
- Reduces code duplication and improves maintainability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement cancellationThreshold function
- Add cancellationThreshold function to return current threshold for a Safe
- Return 0 if guard not enabled or not configured
- Initialize to 1 when Safe configures guard
- Clear threshold when Safe clears guard configuration
- Add comprehensive test suite covering all spec requirements
- Function never reverts as per spec requirements
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add placeholder functions for remaining TimelockGuard functionality
- Add scheduleTransaction placeholder (Function 4)
- Add checkPendingTransactions placeholder (Function 6)
- Add rejectTransaction placeholder (Function 7)
- Add rejectTransactionWithSignature placeholder (Function 8)
- Add cancelTransaction placeholder (Function 9)
- Update checkTransaction placeholder (Function 5)
- All placeholders have proper signatures and documentation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Self review fixes
* Fix warnings on unimplemented functions
* Fix names of test functions
* Satisfy semgrep by removing revert with string
* Remove arg names from unimplemented functions
* Snapshots
* Add interface
* Simplify cancellationThreshold() getter
* Replace _getGuard with isGuardEnabled
* Allow a timelock delay of zero
* TimelockGuard: Add scheduleTransaction()
* Add todo note
* Pseudocode draft of a non-nested timelock
Simpler code
Add cancelTransaction function relying on the Safe's internal logic
undo type change
Add note explaining getScheduledTransactions
* Remove signatures field from ExecTransactionParams
* Refactor tests with improve utils (_getDummyTx, _getSignaturesForTx)
* Test for TransactionCancelled event
* Further improve util functions
* Add approve hash test case
* fix warnings
* Use correct typing for Safe addresses
This is applied to function inputs/outputs as well as mappings and
events
* Add additional scheduleTransaction tests
* Enable specifying which safeInstance in utility functions
* Change cancelTransaction to accept a tx hash
* Add increaseCancellationThreshold to cancelTransaction
* Add configured boolean to guard config
* Fix signature reuse vulnerability in cancelTransaction
Include transaction hash in cancellation signature data to prevent
signatures from being reused across different transactions with the
same nonce. Updates both contract implementation and tests.
* Move signature verification before existence check in scheduleTransaction
* Remove unused console.logs
* Fix increaseCancellationThreshold inputs
* Separate cancellation threshold events from transaction cancellation
Add CancellationThresholdUpdated event and emit it from threshold
modification functions. Remove threshold parameter from TransactionCancelled
event for cleaner separation of concerns.
* Remove unused _txHash argument from resetCancellation function
* Update ITimelockGuard to match implementation
* Use configured flag instead of timelockDelay check in clearTimelockGuard
* Add configuration check to scheduleTransaction and fix test names
* Implement checkTransaction
* Add itest placeholder contract
* Add comment to checkAfterExecution body
* pre-pr checks
* Remove GuardConfig.configured boolean field
We can simply use `timelock > 0` as an indicator of configuration
* Remove clearTimelockGuard
The right way to do this is now just to set timelockDelay to zero.
* Refactor: Add TransactionBuilder library
This library significantly reduces the amount of boilerplace required to
setup a Safe transaction, then schedule, cancel, or execute it.
* Add unreachable AlreadyExecuted error
* Add integration tests
* Add getPendingTransactions function and tests
* Add tests for getScheduledTransaction
* Add _ prefix in front of internal mappings
* Rename viewTimelockGuard to timelockSafeConfigurationper specs
* Add maxCancellationThreshold
* Improve names on getter functions
* Remove @dev tags with invariants
Avoids duplicating logic between specs and implementation
* Update configureTimelockGuard to accept and validate signatures outside of the Safe
* Refactor: use a single struct to store all state for a given Safe
* Do not unnecessarily reset cancellation threshold when config set to 0
* Revert "Update configureTimelockGuard to accept and validate signatures outside of the Safe"
This reverts commit daad53b9090af05de64177680dfbe9baf7b2f9e8.
* Move timelockDelay out of unnecessary struct
* Add top level detail natspec, reorder functions by vis and mutability
* Remove test that does not conform to spec
* Add cancelTransactionOnSafe to interface as reverting function
* Add many more comments
* Apply suggestions from code review
Co-authored-by: Alberto Cuesta Cañada <38806121+alcueca@users.noreply.github.com>
* Fix ITimelockGuard iface to match impl
* Rename arguments for consistency
* Add/fixup @param on events
* Small fixes
* Fix ITimelockGuard declaration
* Improve names on getter functions
* Move ExecTransactionParams into TimelockGuard.sol
* Address comment nits
* Add TimelockGuard_MaxCancellationThreshold_Test and _deploySafe helper
* Fix up iface and comment typos
* Fix storage lookup in test
* Add enum Transaction state and remove cancelled/executed booleans
* add /// @custom:field on ScheduledTransaction struct
* add /// @custom:field on ExecTransactionParams struct
* Add SemverComp to enforce minimum Safe version
* Rename empty function to signCancellationForSafe
* Fix location of external view functions
* Add some more comments where helpful.
* Further expand on the maxCancellationThreshold rationale
* Clarify blocking threshold
* iFace fixes
* Fix iface
* Move update of tx state, event emission and cancellationThreshold into checkAfterExection
* Simplified comment
* remove unclear comments
* fix semgrep sol-style-use-abi-encodecall
* snapshots
* Add course of actions table
* Remove unnecessary address arg from signCancellation
* Fix test names
* Fix test name validation
* Remove enabled guard check from configureTimelockGuard
* Allow <ContractName>_Integration_Test in tests
* Add isExcludedTest in checkContractNameFilePath()
* Update semver-lock
* Fix typo
* fix typo in tests
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: alcueca <alberto@yield.is>
Co-authored-by: Alberto Cuesta Cañada <38806121+alcueca@users.noreply.github.com>
* opcm: Support cannon+kona games in updatePrestates (#17512)
* opcm: Support cannon+kona games in updatePrestates
* fmt; and check devfeatures flag at updatePrestate
* update semver and snapshots
* remove duplicate import
* bump semver after rebase
* fix addGameType for SUPER_CANNON_KONA; add more cannon-kona tests
* remove proxyAdmin from UpdatePrestateInput
* update IOPCM interface
* update semver
* check all topics in expectEmit
* add updatePrestate helper function for testing
* lint test
* fix semgrep issues
---------
Co-authored-by: inphi <mlaw2501@gmail.com>
* op-service/L1BeaconClient: allow blob proof verification to be skipped via `l1.beacon.skip-blob-verification` flag (#17713)
* op-service/L1BeaconClient: allow blob proof verification to be skipped via CLI flag
* assign parameter correctly
* add test at the L1BeaconClient level
* move skip boolean into existing config struct
* tweak flag description
* Add `skip-blob-verification` flag to op-program and op-challenger (#17718)
* op-program: Add skip-blob-verification flag
* op-challenger: add flag to skip blob verification
* Soften warning message for skip blob verification
* feat(op-conductor): rollup-boost partial unhealthiness tolerance (#17633)
* feat(op-conductor): rollup-boost partial unhealthiness tolerance
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* rlock protection to currentValue function
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* timeboundcounter separate file and unit tests
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* comment about the concurrent access bad path testing
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* nit
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* shift the max value logic to health monitor
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* nit
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
---------
Signed-off-by: Yashvardhan Kukreja <yashvardhan@oplabs.co>
* l1-beacon-client: verify blobs using commitment only (not the proof) (#17725)
* recompute blob proof if skipBlobVerification
* use even simpler verification
* replace verification logic
* refactor to make verification more direct
This approach does not use any additional data from the beacon endpoint, aside from the blob itself, so anticipates future API changes where this will be the only data provided.
* tweak comments
* rename to verifyBlob
* tweak test comments
* Revert "op-service/L1BeaconClient: allow blob proof verification to be skipped via `l1.beacon.skip-blob-verification` flag (#17713)"
This reverts commit 05ba528ae52a48efc2cde8e0e0390cf47ad5f4ad.
* Revert "Add `skip-blob-verification` flag to op-program and op-challenger (#17718)"
This reverts commit 3ee883bcfb1b6ac4717ae430a84e92d08359c21f.
* add an extra unit test
* sysgo: add Osaka activation test (#17529)
* op-service/txplan: support blob txs
* op-service/txinclude: handle future nonce gaps
This can happen when we get mempool errors like "nonce too high", which
itself can occur when we hit "account limit exceeded" errors in the blob
pool.
* sysgo: add Osaka activation test
* sysext: infer L1 config when possible
* op-challenger: Convert l1-genesis flag to a vm flag (#17722)
* op-challenger: convert l1 genesis flag to VMFlag
* Disallow l1-genesis flag use with the network flag
* typo
* another typo
---------
Co-authored-by: geoknee <georgeknee@googlemail.com>
* op-devstack: L2EL Engine API support for op-geth (#17714)
* op-service: Engine APIs
* op-devstack: L2EL Engine API support: op-geth
* Handle Read Only ELs
* Move to different dir
* op-devstack: DSL for ref by hash and FCU
* op-acceptance-tests: Manual Verifier Sync
* op-acceptance-tests: Manual Verifier Sync: Harden
* op-devstack: godoc and better var naming
* Remove upgrade controller from OPCM (#17660)
* upgrade controller removed from OPCM
* renamed upgradeController to l1PAO in DeployImplementations.Input
* Update semver
* Remove upgradeController from the docs
* Fix VerifyOPCM
* Did quite the find and replace here
* The OPCM constructor only takes 24 slots now
* Some straggler renamings
* Fix: semver-lock
* Doh
* Snapshots?
* lint
* Fixed the last of the lint with the power of regex
* fixed linting
* L1PAO == SuperchainProxyAdminOwner
* We shouldn't need to pass the upgrade controller to op-deployer to deploy opcm anymore
* L1PAO != SuperchainPAO
* Let's accept both the backwards compatible UPGRADE_CONTROLLER and the new L!_PROXY_ADMIN_OWNER
* Maybe I'll need to drop UPGRADE_CONTROLLER
* addressed comments from @bitwiseguy
* Needed the three dots, it seems
* Shortened form of L1PAO not used in code anymore
* update semver-lock and opcm bytecode
* *sigh*
* feat(ci): add manual workflow for AI contracts test maintenance system (#17730)
* build(ci): add manual workflow for AI contracts test maintenance system
- add ai_contracts_test_dispatch parameter for manual pipeline triggering
- add ai-contracts-test job that runs just ai-contracts-test command
- add ai-contracts-test-workflow with manual dispatch only
- use devin-api context for Devin API credentials
- set 60 minute timeout for AI contract test execution
* build(ci): store log artifact in AI contracts test workflow
- add store_artifacts step to save log.jsonl from test runs
* fix: handle socket timeouts in devin API client
- add TimeoutError exception handling in _make_request function
- update version to 0.3.2
* docs(ci): add runbook reference to AI contracts test job
* chore(op-acceptance-tests): op-acceptor v3.5.0 (#17739)
* Fix cli arg typo in op-challenger executor for op-program server (#17737)
* feat(op-acceptance-tests): flake-shake auto-promotions (#17692)
Adds semi-automated promotions to our FlakeShake system, by:
- Reviewing the flake-shake results for promotion candidates
- Creating a PR for the promotion-ready tests
- Notifying us of this on Slack
* beacon client: use new fusaka endpoint to get blobs (#17736)
* beacon client: use new fusaka endpoint to get blobs
Fallback to old endpoint on error.
* unexport method
* tests: rename clientWithValidation -> client
* remove comments
* Update op-service/sources/l1_beacon_client.go
---------
Co-authored-by: geoknee <georgeknee@googlemail.com>
* op-acceptance-tests: ELP2P for EL Syncing for unsafe gap (#17752)
* op-devstack: engine: FCU retry helper
* op-devstack: Helper for L2EL p2p removal
* op-acceptance-tests: ELP2P for EL Syncing for unsafe gap
* op-acceptance-tests: ELP2P newPayload not retained automatically
* op-acceptance-tests: Better comments
* Add file hashes to the u16a audit report (#17753)
* cleanup(ctb): Remove unused MT_CANNON env (#17731)
* opcm: Switch cannon kona tests to depend on dev features being set through env vars. (#17746)
Previously, the enabled case was tested by explicitly enabling the dev flag but CI has been updated to run all tests with and without the flag enabled.
The explicit enabling gets in the way of testing creator pattern changes.
* refactor(test): improve ProtocolVersions test coverage (#17721)
- add test for version constant
- ensure comprehensive coverage of all public elements
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* Add make gen-binding (#17761)
Adds a new make gen-binding command for generating or updating go
bindings for a contract.
Also includes documentation in the op-e2e README.
* op-deployer: Do not create cache directory on import (#17776)
* op-deployer: Do not create cache directory on import
* create the one the flag makes
* op-acceptance-tests: Add smoke tests for disputegamev2 (#17775)
* op-acceptance-tests: Add smoke tests for disputegamev2
* add missing skip
* op-service: use correct response type in blob retrieval (#17779)
* op-program/host: have prefetcher use new beacon API (not `blob_sidecars`) (#17778)
* remove GetBlobSidecars from L1BlobSource
* remove tests
* tweak comments
* fix test
* feat(op-acceptance-tests): flake-shake; tweaks (#17780)
* fix(op-acceptance-tests): flake-shake; job URL.
Make the job URL in our Slack notification point to the artifacts tab of the report job URL.
* fix(op-acceptance-tests): flake-shake; add job URL to PR body.
* fix(op-acceptance-tests): flake-shake; report owner.
* fix(op-acceptance-tests): flake-shake; tweaked defaults.
* fix(circleci): always run contracts-bedrock-build before docker-build (#17781)
* fix(circleci): always run contracts-bedrock-build before docker-build
* fix(circleci): include op-deployer in scheduled-docker-publish
* Interfaced CLI Context (#17759)
* op-node: Initialization Control Refactor (#17766)
* Interfaced CLI Context
* No more side-effect initialization
* Wire L1 and Server Overrides to Initialization
* add permissable side-effects and mark with comments
* Address Adrian's Comments
* vm-runner: Annotate logs with a trace id for runs (#17801)
* op-deployer: add cli-level bootstrap integration tests (#17803)
* tests: Re-enable Interop Proof Acceptance Tests (#17770)
* Re-enable Interop Proof Acceptance Tests
* Flake Shake
* chore(op-acceptance-tests): flake-shake; test promotions (#17804)
* feat(ai-eng): release v1.0.0 production-Ready Contracts Test Maintenance System (#17807)
* refactor(ai-contracts-test): use CircleCI artifacts for test exclusion
- replace log.jsonl with log.json and fetch via CircleCI API
- add circleci-api-token context for artifact access
- treat blocked status as success when PR exists
- remove .env loading for CI-only execution
- improve Devin setup logging to single message
* fix(ai-eng): handle server errors and user-stopped sessions in devin client
- handle 502 Bad Gateway errors as retryable (like 504)
- add support for suspend_requested status when user stops session
- fix AttributeError when status is None during blocked check
- reduce resource_class from xlarge to large
* fix(ai-eng): improve devin session monitoring and reduce noise
- reduce timeout messages
- remove "finished" status handling
- clarify blocked status messages
- handle expired status separately
- reduce resource class from large to medium
* fix(ai-eng): add debug logging and fix artifact parsing in test exclusion
- add debug prints to trace CircleCI artifact fetching
- fix artifact parsing: use selected_files.test_path instead of test_path
* refactor(ai-contracts-test): integrate CircleCI API v2 for artifact-based test exclusion
- implement CircleCI API v2 to fetch artifacts from previous runs
- exclude test files processed in the last 2 weeks
- extract helper functions following SRP
- add debug logging for artifact fetching process
* fix(ai-contracts-test): prevent crash when manually stopping devin sessions
* chore(ai-contracts-test): release v1.0.0 with scheduled execution
- add bi-weekly monday-thursday scheduled workflow trigger in CircleCI
- update default branch from feature to develop for production use
- enhance prompt guidance for test organization and source order matching
* feat(op-acceptance-tests): flake-shake; fixes and improvements (#17811)
* fix(op-acceptance-tests): flake-shake; artifacts URL.
* fix(op-acceptance-tests): flake-shake; test URL.
* fix(op-acceptance-tests): flake-shake; close old/stale PRs.
* fix(op-acceptance-tests): flake-shake; updated flake-shake gate.
* fix(op-acceptance-tests): flake-shake; upload logs.
* fix(op-acceptance-tests): flake-shake; convert JSON logs to plaintext.
* fix(op-acceptance-tests): flake-shake; use CircleCI static egress IPs.
* clean(op-acceptance-tests): flake-shake; removed dummy test.
* op-node: allow for L2 chain configs to be passed to NewL1ChainConfig (#17799)
* do not error if l1 chain config has no BlobScheduleConfig, if it is an optimism config
* op-node: allow for L2 chain configs to be passed to NewL1ChainConfig
This should fix the problem where L3 nodes cannot start.
Closes https://github.com/ethereum-optimism/optimism/issues/17798
* typos
* op-devstack: Error handle when direct FCU call errored (#17816)
* op-acceptance-tests: Error handle when direct FCU call errored
* op-devstack: Track target node when Engine API invoked
* Add SaferSafes as child of the module and guard (#17767)
* Add SaferSafes as child of the module and guard
* Add ISaferSafes
* Test comment and assertion fixes
* Improve comments
* Make LivenessModule2 and TimelockGuard abstract
Move semver to SaferSafes
semver lock
* fix test contract name
* txmgr: replace `UseCellProofs` flag with `CellProofTime` flag (#17649)
* txmgr: replace UseCellProofs flag with CellProofTime flag
Closes https://github.com/ethereum-optimism/optimism/issues/17634
* use default CellProofTime in op-e2e/utils.NewTxMgrConfig
* fix comparison
* unit test the important bit
* WIP
* Apply suggestions from code review
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
* Revert "WIP"
This reverts commit 1eb8a919576668dd2f124f051bc9bb866d63ba00.
* improve handling of fallback to cover 4 L1 chains
* fix test
* add debug log
* format
* add 12s buffer
* avoid overflow
---------
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
* acceptance-tests: force batcher to use cell proofs in osaka test (#17818)
* op-{sync-tester|devstack}: Support multiple EL Sync Runs (#17800)
* op-{sync-tester|devstack} Support multiple EL Sync Runs
* op-acceptance-tests: Increase Unsafe payload signaling for window policy
* op-sync-tester: Async Set Canonical When EL Sync done
* op-devstack: Enable Engine API for SyncTesterEL
* op-acceptance-tests: Multiple EL Sync Runs for SyncTesterEL
* op-sync-tester: Reorganize Default EL Sync Policy
* op-sync-tester: ELSyncPolicy godoc and better initialization
* op-sync-tester: WindowSyncPolicy unit tests
* op-acceptance-tests: Comment for EL Sync Policy
* docs(ai-eng): update documentation for contract test maintenance system (#17820)
* docs(ai-eng): document contract test maintenance system
- add ai-eng and contracts-test-maintenance READMEs
- add comprehensive operational runbook (601 lines)
- cross-reference Notion docs (design doc, tech spec)
* docs(ai-eng): remove external notion documentation references
* docs(ai-eng): improve documentation clarity and add direct links
* docs(ai-eng): update graphite status to active
* fix(op-acceptance-tests): flake-shake; fix ci. (#17823)
* fix(circleci): ensure contracts-bedrock-build runs in release workflow (#17822)
* op-dispute-mon: distinguish 404 from output root not found (#17819)
* op-deployer: fix, support, test upgrades up to v4.1.0 (#17824)
* op-deployer: add upgrade v4_1_0 command (#17790)
* update superchain-registry/validation import
* op-deployer: fix upgrader.ArtifactsURL and add tests
* op-service: add WithForkBlock opt to anvil
* op-deployer: add cli level upgrade tests
* fix(op-acceptance-tests): flake-shake; misc. fixes (#17830)
* chore(op-acceptance-tests): flake-shake; TestL2ELP2PCanonicalChainAdvancedByFCU (#17833)
Run the new test 'TestL2ELP2PCanonicalChainAdvancedByFCU' through FlakeShake.
* chore(op-acceptance-tests): flake-shake; resource class (#17847)
* chore(op-acceptance-tests): flake-shake; tweaked default workers. (#17850)
This should reduce the chance of CircleCI timeouts.
* fix(ai-contracts-test): always fetch develop branch for artifact exclusions (#17840)
- hardcode branch to "develop" to avoid CIRCLE_BRANCH env var issues
* all: Add DA footprint configurability via SystemConfig (#17466)
Co-authored-by: Sebastian Stammler <seb@oplabs.co>
Co-authored-by: Matt Solomon <msolomon@oplabs.co>
* opcm: Update OPCM.deploy to use v2 games (#17408)
* feat: integrate v2 implementations into opcm
* fix: skip v2 implementations if not deployed
* chore: bump semver version
* feat: conditionally set the v2 games based on feature flag
* feat: add override for setup to re-deploy opcm with feature flag
* test: improve test by deploying with the feature flag and asserting on output
* test: add assertion that the deployment configuration on the dgf is correct
* chore: improve test name
* refactor: add helper function for feature toggled deployment of opcm
* fix: bytecode size check failing
* chore: run forge fmt
* fix: address CI naming and semver bump
* fix: rename setup contract name to align with ci checks
* chore: comment out added fix
* fix: verify opcm
* fix: naming convention for test contracts
* fix: move the updates for addGameType to the addGameType pr
* fix: proposer removed
* fix: rename function for clarity in VerifyOPCM script
Rename _isV2Implementation to _isV2DisputeGameImplementation for better clarity about what types of contracts this function checks for.
* fix: add proper gameArgs for V2 dispute game registration and fix setting output implementation on outupt struct
* test: add helper functin for creating game proxies
* test: refactor helper functions for test and remove impl from output struct
* test: test args correct on created proxy games
* chore: remove unused helper for now
* fix: remove guard clause from local issue
* chore: bump semver
* chore: revert changes to ignore v2 implementations
* fix: check bitmap and contract name for ref
* test: with feature toggle on
* chore: forge fmt
* Revert "chore: forge fmt"
This reverts commit d029fdb8dd12445a839026972e3859be7aae1470.
* Revert "test: with feature toggle on"
This reverts commit a932eb608d25f9acf486ce49aeb5318742c666de.
* chore: forge fmt
* fix: test compiler restriction fix
* Revert "fix: test compiler restriction fix"
This reverts commit 50282cf4fbf32b2a3615a4d9537e0887436f682d.
* fix: compiler bump
* fix: typo
* test: add test for verify opcm with v2 dispute games deployed
* test: add skips for v1 tests if v2 deployed
* fix: skip standard validator until its implemented
* fix: skip addGameType until its implemented
* fix: skip updatePrestate until its implemented
* fix: remove diff in natspec
* chore: add TODO comments with issue tracking to skips
* fix: bump semver
* chore: bump semver
* Fix silent merge conflicts with develop
* Bump semver version
* Run semver-lock
* Reintroduce OPContractsManager_Version_Test
* Cleanup - revert comment change
* Remove v2 contracts from DeployOutput
* Remove unused imports
* Update DeployOPChain tests to run across feature flags (in progress)
* Update OPCM tests to work with FeatureFlags options
* Merge PermissionedDisputeGame tests, use feature flags
* Merge FaultDisputeGame tests, use feature flag in setup
* Remove redundant test
* Fix test name
* Fix anchorRootNotFound test - pass in extra data
* Extend deployment test to check more fields
* Add guards around new setImplementation call
* Add new error to OPCM interface
* Run semver-lock
* Prefix var with underscore
* Remove unused imports
* Regenerate snapshots
* Pass opcm as an argument to _verifyOpcmContractRef
* Reorganize verifyOPCM v2 skip logic
* Add TODO to fix acceptance test
* Add function documentation for the new opcm param
* Cleanup: add test assertion messages
* Remove opcm param from runSingle script
* Tweak method documentation
* Cleanup dead code
---------
Co-authored-by: mbaxter <meredith@oplabs.co>
* feat(op-acceptance-tests): moved notifications to Slack (#17843)
* chore(op-acceptance-tests): op-acceptor v3.6.0 (#17842)
Updates op-acceptor to [v.3.6.0](https://github.com/ethereum-optimism/infra/releases/tag/op-acceptor%2Fv3.6.0).
* op-acceptance-tests: Integration test for op-deployer add-game-type (#17865)
* op-acceptance-tests: Integration test for op-deployer add-game-type
* more generic gameType adder fn in devstack
* chore(op-acceptance-tests): flake-shake; test promotions (#17851)
Co-authored-by: Stefano Charissis <stefano@oplabs.co>
* make solidity upgrade test run for base ink and unichain, update fork block and remove running of U16A upgrade (#17827)
* make solidity upgrade test run for base ink and unichain, update fork block and remove running of U16A upgrade
* fixes
* op-supernode: Initial Chain Container Framework (#17659)
* op-supernode: Initial Chain Container Framework
* op-supernode: Shared L1
* Context Exit Cleanup
* op-supernode: RPC Router Resource for Virtual Nodes
* op-supernode: Virutal Node Lifecycle Fixes
* op-supernode: Node and Chain Lifecycle Updates ; Unit Tests
* just coverage
* op-supernode minor 2-chain runtime fixes
* op-supernode: Single Chain TestCLAdvance for Supernode
* op-acceptance-tests: 2 L2 System ; Supernode Multi-Tenant-CL Test
* remove e2e changes
* README
* Restructure Packages/Files
* Rename Proxy to Router ; Rewrite Acceptance Tests
* update to new op-node InitializationOverrides struct
* Update to CLI Interface ; Related/Required Edits
* Shared Metrics
* Repair Acceptance Tests ; Register optimism handler for supernode
* Flake Shake ; Remove Sample Flag
* Delete unused preset
* Remove Sample from Tests
* Fix chain_container_test signatures
* lint
* remove unused
* Review Comments
* Use eth.ChainID
* Use OP Service HTTP Server
* remove unused superchainProxyAdmin immutable variable from OPCM (#17828)
* remove unused protocolVersions and superchainProxyAdmin immutable variables
* keep protocolVersions
* fixes
* refactor(test): improve ResourceMetering test coverage and quality (#17812)
* refactor(test): improve ResourceMetering test coverage and quality
- convert 3 duplicate empty block tests to single fuzz test
- add test for block.basefee = 0 protection
- add test for below-target gas usage (fee decrease)
- add test for minimum base fee configuration
- reorganize test contracts to match source declaration order
* test: add explicit assertion for base fee protection in zero basefee test
- Add assertGt(prevBaseFee, 0) to verify Math.max protection works
- Addresses automated PR review feedback
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat(ai-contracts-test): add Slack notifications and bug fixes (v1.1.0) (#17876)
* feat(ai-contracts-test): add Slack notification for PR creation
* fix(ai-contracts-test): add pagination to fetch enough pipelines
- paginate through CircleCI API to fetch up to 200 pipelines
- add debug logging to troubleshoot artifact exclusion
- temporarily exclude ReinitializableBase
* fix(ai-contracts-test): exit with error when devin session blocked without PR
* fix(ai-contracts-test): use Slack orb pattern for PR notifications
* fix(ai-contracts-test): fix user tag formar in slack message
* docs(ai-contracts-test): enhance prompt with constructor and assertion guidelines
- Add zero tolerance rule for constructor parameter test organization
- Add TargetContract_Constructor_Test naming pattern for constructor tests
- Require explicit assertions beyond non-reversion checks
- Add examples for proper assertion usage and constructor test structure
- Fix typo in avoid section ("contex" → "context")
* docs(ai-contracts-test): update documentation for v1.1.0 release
* Update ops/ai-eng/contracts-test-maintenance/prompt/prompt.md
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Update ops/ai-eng/contracts-test-maintenance/prompt/prompt.md
Co-authored-by: smartcontracts <14298799+smartcontracts@users.noreply.github.com>
* chore(ai-contracts-test): remove ReinitializableBase test file from exclusion list
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: smartcontracts <14298799+smartcontracts@users.noreply.github.com>
* feat: reduce lite profile fuzz runs (#17877)
Reduces lite profile fuzz and invariant runs to 8 across the board.
We now run heavier fuzz runs in CI, so it's generally nicer and
easier if we run significantly reduced runs locally.
* fix(acceptance-tests/op-reth): fix acceptance tests for op-reth (#17882)
* op-dispute-mon: Consider node invalid if it has not processed L1 past the game head (#17831)
* Update TODO with more granular issue number (#17885)
* refactor(test): improve ReinitializableBase test organization (#17839)
* refactor(test): improve ReinitializableBase test organization
- Split tests into separate contracts per function
- ReinitializableBase_Constructor_Test for constructor validation
- ReinitializableBase_InitVersion_Test for initVersion getter
- Fixed comment length to comply with <100 char standard
- Tests organized to match source declaration order
* refactor(test): consolidate tests into Constructor test suite
Per review feedback, move initVersion fuzz test into Constructor
test contract since initVersion() just returns the immutable value
set by the constructor. Delete separate InitVersion test contract.
* refactor(test): rename test function to match container contract
Per review feedback, rename testFuzz_initVersion_validVersion_succeeds
to testFuzz_constructor_validVersion_succeeds since the test is now in
the Constructor_Test contract. Test names should match their container.
* refactor(test): improve test comment clarity
- update comment to better describe constructor validation test
- comment now matches function naming convention
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* op-acceptance-tests: Retry FCU for triggering EL Sync (#17894)
* feat: implement Operator Fee Fix (Jovian) (#17366)
* fix!: multiply operatorFeeScalar by 100 instead of dividing by 1e6
* chore: bump to 1.5.0
* chore: bump to 2.0.0
* refac: gate at Jovian
* missing changes
* update
* reduce diff
* snapshot abi + storage layout + remove unncessary change
* apply comments
* make ci green
* chore: update go.mod
* fix: activate Jovian in e2e tests
* feat: add Jovian upgrate transactions
* fix: update GPO bytecode
* use IsOperatorFeeFix
* add jovian operator fee acceptance test
* chore: add commit hash for GPO bytecode
* chore: remove useless replace in go.mod
* acceptance-tests: push common code for operator fee into dsl
Also use block timestamp to infer isJovian and assert consistency in GPO.
* tweak
* refactor IsthmusCostOracle
* fix link
* tag TODO for followup
* update op-geth
* lint
* lint
* revert changes to op-service/txinclude
According to @joshklop we don't need to make any changes here at the current time, the code is not actually being used anywhere apart from some skipped tests.
* regenerate l1block bytecode and resolve nonce clash
* decouple upgrade transactions, change API to getter and fix tests
* update op-geth reference
* Update packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
* jovian upgrade transactions: reorder deployer addresses
* just update-op-geth 5c6d276814f2cce1d4dda25ed9e5a3a1c52e59a4
* explicitly disallow user transactions in jovian activation block
* assert on receipts in operator fee acceptance test
* op-e2e/actions: remove jovianActivationBlock test case
replace with running the normalTx test case on the jovian fork
---------
Co-authored-by: leruaa <aurelien.catinon@gmail.com>
Co-authored-by: geoknee <georgeknee@googlemail.com>
Co-authored-by: Matt Solomon <matt@mattsolomon.dev>
* op-acceptance-tests: Reorg then gap filling tests (#17893)
* op-devstack: SingleChain MultiNode preset with TestSequencer
* op-devstack: Add L2CL NoDiscovery preset
* op-devstack: Additional DSLs for L2CL, L2EL
* op-acceptance-tests: Reorg then gap filling tests
* op-node WithNoDiscovery for deflake clp2p
* add TestEndToEndBootstrapApplyWithUpgrade and UpgradeSuperchainConfig scripts (#17826)
* add TestEndToEndBootstrapApplyWithUpgrade and UpgradeSuperchainConfig scripts
* Update packages/contracts-bedrock/scripts/deploy/UpgradeSuperchainConfig.s.sol
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* add comment
* fixes
* fixes
* Update op-deployer/pkg/deployer/integration_test/apply_test.go
Co-authored-by: Maurelian <john@oplabs.co>
* fixes...
* add comments to solidity code
* add comments to solidity code
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Maurelian <john@oplabs.co>
* refactor(test): improve SafeSend test coverage and quality (#17896)
* refactor(test): improve SafeSend test coverage and quality
- Convert 2 tests to fuzz tests for broader coverage
- Add test for zero address recipient edge case
- Fuzz ETH amounts from 0 to type(uint128).max
- All assertions verify contract self-destruct and balance transfers
* Remove uint128 bound from fuzz tests per reviewer feedback
* Fix overflow issue: bound fuzz tests to uint192 max
Prevents arithmetic overflow in balance calculations while still
testing a very large range (~6.3e57 vs total ETH supply ~1.2e26)
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* supernode: update readme (#17878)
Updated README.md to clarify virtual node configuration and metrics routing.
* make all _TestInit contracts abstract (#17889)
* make all _TestInit contracts abstract
These contracts don't need to run, so they can all be abstract. Local
testing suggests this saves about 30 seconds during the build.
* Make test setup contracts abstract
* fix(op-acceptance-tests): flaky tests; less filtering (#17891)
* op-devstack: dynamically assign geth subprocess p2p listening port (#17904)
Otherwise it defaults to 30303, which can cause test flakes if the
port is already taken.
* fix: no env var manipulation in VerifyOPCM tests (#17813)
* fix: no env var manipulation in VerifyOPCM tests
* Update packages/contracts-bedrock/test/scripts/VerifyOPCM.t.sol
Co-authored-by: Maurelian <john@oplabs.co>
* fix: remove old variable
---------
Co-authored-by: Maurelian <john@oplabs.co>
* op-deployer: re-enable v3 upgrade test with new fork blockNum (#17852)
* Set v0.1.0 and Docker Image Target (#17906)
* op-acceptance-tests: ELP2P down but payload appendable till chain tip (#17895)
* op-acceptance-tests: ELP2P down but payload appendable till chain tip
* Make sure batcher is still down
* Verifier at least reached once the tip of the chain
* remove safe head check
* better err msg
* add KONA_LOG_LEVEL (#17496)
* op-acceptance-tests: disable discovery for test (#17918)
* all: Update op-geth to use blobGasUsed field for DA footprint (#17861)
* op-fetcher: Support the CANNON_KONA FaultDisputeGame (#17656)
* op-fetcher: Support the CANNON_KONA FaultDisputeGame
* cleanup; add test cases for missing cannon-kona
* op-conductor: use op-service HTTP Server for Flashblocks ; fix test flake (#17880)
* Expose bound port of conductor ; allow port assignment ; fix test
* PR Comments
* Use OP-Service HTTPServer
* add requested panic
* PR Comments
* Disable the guard upon ownership transfer (#17808)
* Add SaferSafes as child of the module and guard
* Add ISaferSafes
* Test comment and assertion fixes
* Improve comments
* Make LivenessModule2 and TimelockGuard abstract
Move semver to SaferSafes
semver lock
* fix test contract name
* Move semver to SaferSafes
* Disable the guard and module upon ownership transfer
* Add _disableThisGuard function
* Update tests
* Add config resets
* fmt
* fix test_changeOwnershipToFallback_canRechallenge_succeeds
* Simplify by clearing config directly
* Put _disableThisGuard into child contract
* Add timelockDelay reset on _disableThisGuard
* semver-lock
* Move _disableThisGuard logic into TimelockGuard
* clear livenessSafeConfig at tend of _disableThisModule
* Clarify use of SENTINEL_OWNER
* Fix the ordering of the disableGuard and disableModule calls
* semver-lock
* remove unused imports
* rename _disableThisGuard to _disableGuard
* bump semver
* Add test to remove unrelated guard
* Add SENTINEL_MODULE constant
* Clean up using ternary if
* Reset cancellationThreshold to 0 on changeOwnership
* Fix moduleFound if/else handling
* Clear pending transactions
* Pre-pr fixes
* Add test contract to test name lint exclusions
* fix name of test contract
* Move _disableGuard impl into TimelockGuard
* Add missing natspec
* Add gas limit testing on changeOwnershipToFallback
* Remove interfaces for abstract contracts
* Move state changes out into internal _clearLivenessModule
* Improve names on the internal _disableX methods
* Add clearTimelockGuard function
* Add _disableGuard helper to TLG tests
* Limit number of transactions cancelled to 100
* Revert "Remove interfaces for abstract contracts"
This reverts commit bd032889b639b35b8f512f941de3a924699fe44c.
* Move livenessModule2 address into TestUtils
Reduces diff a bit
* Reduce diff somewhat
* Remove unused arg
* Update packages/contracts-bedrock/src/safe/TimelockGuard.sol
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Fix iface
* update abi for iface fix
* Do not clear or disable the module during ownership transfer
* Fix inaccurate comment on _disableAndClearGuard
* Further improve comment
* remove unused import
* fix test name
* Do not clear guard during changeOwnershipToFallback
* Remove unused SENTINEL_MODULE var
* Remove dangling comment
* Revert "Remove dangling comment"
This reverts commit d266d12dbc5af68b192c8898b7c97d772a8954a3.
* Fix whitespace
* remove unnecessary internal _clearTimelockGuard function
It's no longer reused in the change ownership call.
* Address feedback
* Add missing assertion
* Move guard slot into constants
* semver-lock
* Remove LivenessModule from semver-lock
* fix: fmt, semver-lock, unused imports
* Remove unused variable
* fix semver lock by resetting old LivenessModule
* fix unused import
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* proofs: Pass game type as a CWIA arg instead of a constructor arg (#17832)
* proofs: Pass game type as a CWIA arg instead of a constructor arg.
* proofs: Remove ReservedGameType check
* fix(Makefile): remove Makefile sharding; rely on (op-e2e) in-test sharding (#17930)
* fix(Makefile): remove Makefile sharding; rely on (op-e2e) in-test sharding
* fix(op-e2e): TestSystemP2PAltSync
Ensure L1 chain config is provided.
* ci: Use a fixed version of mise in golang docker builds (#17954)
* op-devstack/dsl/operator_fee: compute expected vault increase from all transactions in block (#17935)
* op-service: expose BalanceAtHash method
* op-devstack/dsl/operator_fee: compute expected vault increase from all transactions in block
* Revert "op-service: expose BalanceAtHash method"
This reverts commit 078fc26ec1ff3b352a300ed46ee6b979fefb463b.
* revert to checking balance by block number
* query "prior" operator fee vault balance by block number
* ci: Clean up op-deployer caches (#17959)
* ci: Clean up op-deployer caches
We keep running into issues where OPD caches are not properly cleaned up in tests. This adds a stopgap that cleans them up after every test to prevent disk usage exploding on our self-hosted runners.
* bump
* chore(op-acceptance-tests): flake-shake; test promotions (#17951)
* fix(op-acceptance-tests): flake-shake; slack notification channel. (#17931)
* opcm: Update upgrade method for disputegame-v2 (#17874)
* opcm: Update upgrade method for disputegame-v2
* update opcm semver
* check game args; run post-upgrade checks
* update std validator semver lock
* fix assertGameArgsLength error prefix
* opcm and validator fixes
* lint LibGameArgs
* fix interfaces; natspec
* fix natspec in opcm
* forwards-compatible challenger/proposer retrieval
* assert deployed CANNON game parameters
* use v2 getters
* review comments
* fix asr getter name
* use v1 functions for existing upgrade path
* remove dead code (#17937)
* op-node: Fix gossip validation for Jovian blocks (#17940)
Jovian blocks can have a non-zero blobGasUsed value, as the DA footprint
is stored in it.
* Update ManageDrippie.s.sol (#17717)
* remove the superchainProxyAdmin input from upgradeSuperchainConfig function (#17902)
* remove the superchainProxyAdmin input from upgradeSuperchainConfig function
* pull and update
* fix semver
* Require that msgSender be an owner of the Safe (#17900)
* Add SaferSafes as child of the module and guard
* Add ISaferSafes
* Test comment and assertion fixes
* Improve comments
* Make LivenessModule2 and TimelockGuard abstract
Move semver to SaferSafes
semver lock
* fix test contract name
* Move semver to SaferSafes
* Disable the guard and module upon ownership transfer
* Add _disableThisGuard function
* Update tests
* Add config resets
* fmt
* fix test_changeOwnershipToFallback_canRechallenge_succeeds
* Simplify by clearing config directly
* Put _disableThisGuard into child contract
* Add timelockDelay reset on _disableThisGuard
* semver-lock
* Move _disableThisGuard logic into TimelockGuard
* clear livenessSafeConfig at tend of _disableThisModule
* Clarify use of SENTINEL_OWNER
* Fix the ordering of the disableGuard and disableModule calls
* semver-lock
* remove unused imports
* rename _disableThisGuard to _disableGuard
* bump semver
* Add test to remove unrelated guard
* Add SENTINEL_MODULE constant
* Clean up using ternary if
* Reset cancellationThreshold to 0 on changeOwnership
* Fix moduleFound if/else handling
* Clear pending transactions
* Pre-pr fixes
* Add test contract to test name lint exclusions
* fix name of test contract
* Move _disableGuard impl into TimelockGuard
* Add missing natspec
* Add gas limit testing on changeOwnershipToFallback
* Remove interfaces for abstract contracts
* Move state changes out into internal _clearLivenessModule
* Improve names on the internal _disableX methods
* Add clearTimelockGuard function
* Add _disableGuard helper to TLG tests
* Limit number of transactions cancelled to 100
* Revert "Remove interfaces for abstract contracts"
This reverts commit bd032889b639b35b8f512f941de3a924699fe44c.
* Move livenessModule2 address into TestUtils
Reduces diff a bit
* Reduce diff somewhat
* Remove unused arg
* Update packages/contracts-bedrock/src/safe/TimelockGuard.sol
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Fix iface
* update abi for iface fix
* Do not clear or disable the module during ownership transfer
* Fix inaccurate comment on _disableAndClearGuard
* Further improve comment
* remove unused import
* fix test name
* Do not clear guard during changeOwnershipToFallback
* Remove unused SENTINEL_MODULE var
* Remove dangling comment
* Revert "Remove dangling comment"
This reverts commit d266d12dbc5af68b192c8898b7c97d772a8954a3.
* Fix whitespace
* remove unnecessary internal _clearTimelockGuard function
It's no longer reused in the change ownership call.
* Address feedback
* Add missing assertion
* Move guard slot into constants
* semver-lock
* Remove LivenessModule from semver-lock
* fix: fmt, semver-lock, unused imports
* Remove unused variable
* fix semver lock by resetting old LivenessModule
* fix unused import
* Require that msgSender be an owner of the Safe
* fix compiler error
* Fix placement of _msgSender check
* semver-lock
* Add TimelockGuard_NotOwner test
* Bump semver
* Add test comment, make into fuzz test
* Improvements to SaferSafes styling (#17903)
* Add public getter livenessSafeConfiguration to return a struct rather than tuple
* Use Safe as input type to mappings and functions on LivenessModule2
* Add dividers based on function type
* fmt
* snapshots
* Remove conditional return of 0 in the cancellationThreshold if the guard is not enabled
* rename timelockConfiguration func to timelockDelay
* semver-lock
* Add missing natspec on tests and convert to fuzzing where possible
* fix import and abi snapshot
* fix: off by one error in challenge period test
* fix test name
---------
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* op-service: improve beacon client robustness (#17866)
* op-service: always fall back to fetching blob sidecars
Previously, we only reverted to fetching sidecars when an error was
received from the beacon server. In an attempt to be more robust,
we also fetch sidecars when the beacon server gives us a semantically
invalid response.
* op-service: rearrange blobs based on provided hashes
The behavior in the post-Fulu /blobs/ happy path and the
/blob_sidecars/ fallback slightly differed: in the former case,
returned blobs were ordered based their index in the blob, while in the
latter case they were ordered based on the provided hashes.
This bug was not caught in testing because all calls to BeaconBlobs
provide a slice of hashes sorted by index.
* GasPriceOracle: remove saturating math from getOperatorFee (jovian) (#17913)
* GasPriceOracle: remove saturating math fro getOperatorFee (isthmus and jovian)
Extend test coverage to edge cases
* restore Isthmys formula
* fix test
* use library
* lint
* semver bump
* modify semver and regenerate lock file
* fix(op-deployer): use temp cache dir for cli tests (#17965)
* Improve SaferSafes test suite. (#17949)
* Add SaferSafes as child of the module and guard
* Add ISaferSafes
* Test comment and assertion fixes
* Improve comments
* Make LivenessModule2 and TimelockGuard abstract
Move semver to SaferSafes
semver lock
* fix test contract name
* Move semver to SaferSafes
* Disable the guard and module upon ownership transfer
* Add _disableThisGuard function
* Update tests
* Add config resets
* fmt
* fix test_changeOwnershipToFallback_canRechallenge_succeeds
* Simplify by clearing config directly
* Put _disableThisGuard into child contract
* Add timelockDelay reset on _disableThisGuard
* semver-lock
* Move _disableThisGuard logic into TimelockGuard
* clear livenessSafeConfig at tend of _disableThisModule
* Clarify use of SENTINEL_OWNER
* Fix the ordering of the disableGuard and disableModule calls
* semver-lock
* remove unused imports
* rename _disableThisGuard to _disableGuard
* bump semver
* Add test to remove unrelated guard
* Add SENTINEL_MODULE constant
* Clean up using ternary if
* Reset cancellationThreshold to 0 on changeOwnership
* Fix moduleFound if/else handling
* Clear pending transactions
* Pre-pr fixes
* Add test contract to test name lint exclusions
* fix name of test contract
* Move _disableGuard impl into TimelockGuard
* Add missing natspec
* Add gas limit testing on changeOwnershipToFallback
* Remove interfaces for abstract contracts
* Move state changes out into internal _clearLivenessModule
* Improve names on the internal _disableX methods
* Add clearTimelockGuard function
* Add _disableGuard helper to TLG tests
* Limit number of transactions cancelled to 100
* Revert "Remove interfaces for abstract contracts"
This reverts commit bd032889b639b35b8f512f941de3a924699fe44c.
* Move livenessModule2 address into TestUtils
Reduces diff a bit
* Reduce diff somewhat
* Remove unused arg
* Update packages/contracts-bedrock/src/safe/TimelockGuard.sol
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
* Fix iface
* update abi for iface fix
* Do not clear or disable the module during ownership transfer
* Fix inaccurate comment on _disableAndClearGuard
* Further improve comment
* remove unused import
* fix test name
* Do not clear guard during changeOwner…
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.
Description
There are multiple control flows which invokes Engine Controller logic. Some subroutines will be invoked starting from events, namely
onEvent, and it properly acquires RW mutex which is embedded in EngineController struct.The current codebase does not properly acquire mutexes while modifying the state of the EngineController. This may lead to potential race conditions.
The root of the current mis-synchronization stems from two reasons.
PromoteFinalizedEventwas replaced with function, and mutex locking got removed. TheFinalizerstruct directly called engine controller subroutine.PromotePendingSafeEvent,PromoteLocalSafeEventwas replaced with function, and mutex locking got removed.AttributeHandlerstruct directly called engine controller subroutine.s.Engine.TryUpdateEngineat SyncDeriver.ForceReset(ctx context.Context, localUnsafe, crossUnsafe, localSafe, crossSafe, finalized eth.L2BlockRef)EngineController.IsEngineSyncing()was invoked outside the engine controller, at SyncDeriver without read lock.Upper lists are non-exhaustive.
The easy way to check the engine controller subroutines entrypoint is to search
type EngineController interfacethroughout the codebase. This PR attempts to apply proper mutex locking.If possible, the exposure of these methods should be minimized.
Will follow up on the other subroutines.
Possibly related with the race conditions reported at #17564