Overview
This is a release candidate of the OP Stack smart contracts for Upgrade 20 (U20). Note that U20 does not include a hard fork so L2 predeploy changes will not be deployed.
Changes new since op-contracts/v8.0.0-rc.2 are marked [new in rc.3].
What's Changed
OP Contracts Manager and upgrade path
- OPCM v8.0.0 (#22096): the
PermittedProxyDeploymentallowance for DelayedWETH is removed from upgrade instructions, thestartingAnchorRootoverride window moves to pre-9.0.0 releases, and upgrade-sequence enforcement is now active — upgrades revert unless the chain's last upgrade was applied by an OPCM 7.x. - Upgrades now resolve each proxy's own ProxyAdmin and SystemConfig instead of assuming the calling chain's, fixing upgrades for non-first member chains of an interop set (#22034).
- Upgrades revert if the new implementation is an OZ v5-style Initializable with its storage slot in use (#21070).
- Removed the ProtocolVersions contract and its OPCM integration (#20527).
- [new in rc.3] Chain deployment reverts on game config mismatches instead of silently promoting them to Super Games (#22128).
Standard validator
- [new in rc.3] The validator now checks that the SystemConfig
l2ChainId()matches the chain ID under validation (SYSCON-140) (#22366). - [new in rc.3] The validator now checks that each registered dispute game implementation is the expected release implementation (
-150error codes for the Super Fault, Super Permissioned and ZK games), and that the ZK game verifier is the release-approved SP1 PLONK adapter (#22365, #22218). - [new in rc.3] The validator now checks that the AnchorStateRegistry a game anchors against is the same registry the OptimismPortal consults when finalizing withdrawals (
-70) (#22412).
Dispute games
- The proofs system now uses super roots instead of output roots. Permissioned chains now use the
SUPER_PERMISSIONEDgame type as the respected game. Permissionless chains useSUPER_CANNON_KONAwith previous game implementations being removed. - Simplified the super permissioned dispute game (#20641), renamed its game type (#21513), and removed the super cannon game type (#20363).
- [new in rc.3]
SuperPermissionedDisputeGame.initializenow reverts when sent ETH (#22410). The game has no bond accounting, so any value sent would have been trapped in the clone.
L1 contracts
- SystemConfig v4.0.0: removed the unused
batchInbox()getter and the legacysetGasConfigfunction (#21641). CrossL2Inbox.validateMessagenow reverts when executed by a deposit transaction, as defense in depth (#21693).OptimismPortal2.migrateToSharedDisputeGamenow validates its inputs (#20928).- FeeVault gains
setWithdrawalRouteto update the recipient and withdrawal network atomically (#20982). - SuperchainConfig is now marked audited (#21265).
L2 predeploys
Note: These changes will not be deployed to existing chains until the next hard fork, not as part of U20.
- L2 Fee values now have a setWithdrawalRoute(address,Types.WithdrawalNetwork) method - an atomic combination of the existing recipient and network setters.
Other
- [new in rc.3]
Fork.INTEROPis renamed toFork.LAGOONin the L2 genesis scripts (#22157, #22161). This is a naming change only and affects no deployed contract.
Contract version changes
Versions that changed between rc.2 and rc.3 are marked [new in rc.3].
| Contract | v7.0.0 | v8.0.0-rc.3 | |
|---|---|---|---|
| OPContractsManagerV2 | 7.1.17 | 8.0.1 | [new in rc.3] |
| SystemConfig | 3.14.2 | 4.0.0 | |
| OptimismPortal2 | 5.6.1 | 5.8.0 | |
| OPContractsManagerStandardValidator | 2.9.1 | 3.3.0 | [new in rc.3] |
| SuperchainConfig | 2.4.2 | 2.4.3 | |
| SuperFaultDisputeGame | 0.7.2 | 0.8.0 | |
| SuperPermissionedDisputeGame | 0.7.0 | 1.1.0 | [new in rc.3] |
| ZKDisputeGame | 1.1.0 | 2.0.1 | |
| CrossL2Inbox | 1.0.2 | 1.1.0 | |
| L2ContractsManager | 1.8.0 | 1.14.0 | |
| L2DevFeatureFlags | 1.0.0 | 1.3.0 | |
| L2ProxyAdmin | 1.0.0 | 1.1.0 | |
| L2ToL2CrossDomainMessenger | 1.3.1 | 1.3.2 | |
| ETHLiquidity | 1.1.0 | 1.1.1 | |
| BaseFeeVault / L1FeeVault / SequencerFeeVault | 1.6.1 | 1.7.0 | |
| OperatorFeeVault | 1.1.1 | 1.2.0 | |
| ProtocolVersions | 1.1.2 | removed |
Full Changelog: op-contracts/v7.0.0...op-contracts/v8.0.0-rc.3