Overview
Important
This is a release candidate of the op-contracts for Upgrade 22. It contains per-chain withdrawal delays, the ZK dispute game, the contracts for Lagoon interop and several safety fixes.
Breaking changes
- StandardValidator inputs change (#23870, #23252).
validatewithValidationInputDevtakes a newzkPrestatefield, so its selector changes. Passbytes32(0)for a chain without the ZK dispute game. TheValidationInputoverload passes zero, so it reportsZKDG-70on a chain that has the ZK dispute game. The StandardValidator constructor no longer takeswithdrawalDelaySeconds.
Other changes
Withdrawals and dispute games
- The proof maturity delay on
OptimismPortal2, the dispute game finality delay onAnchorStateRegistryand the withdrawal delay onDelayedWETHare now per-chain settings. The L1 ProxyAdmin owner can change each delay with a new setter, within these bounds: proof maturity 1 to 7 days, finality 12 hours to 3.5 days, DelayedWETH 12 hours to 7 days. The StandardValidator checks each delay against its bounds (PORTAL-100,ANCHORP-80,DWETH-40) (#23215, #23252) OptimismPortal2andAnchorStateRegistryfail closed when a delay is zero: a withdrawal cannot finalize and a game does not become final. OPCM rejects a zero delay. A correctly initialized chain sees no change (#23902)OptimismPortal2rejects a withdrawal that targets the L1StandardBridge of the chain, at prove and at finalize. Standard bridge withdrawals targetL1CrossDomainMessengerand are not affected. Prove and finalize use slightly more gas (#23520)ETHLockbox.migrateLiquidityreverts while the lockbox is paused (#23852)- A closed
SuperFaultDisputeGamecan now unlock credit while the system is paused, the same asFaultDisputeGame.DelayedWETHstill blocks the withdrawal itself while paused (#23267)
ZK dispute game
- Every deployment now includes
ZKDisputeGameandSP1PlonkAdapter, and OPCM no longer needs a dev feature flag for the ZK dispute game. A chain enables the ZK dispute game with an explicit game config inupgrade()ormigrate()(#23868) - The StandardValidator accepts the ZK dispute game as the permissionless game of a super-root chain, alone or with
SUPER_CANNON_KONA. It reportsDF-60for a super-root chain with onlySUPER_PERMISSIONED,ZKDG-NOSHAPEfor the ZK dispute game on an output-root chain, andZKDG-70when the ZK prestate differs from the expected value (#23869, #23870)
Interop
L2ToL2CrossDomainMessengercan mark an interop message as expired when it stays undelivered for 8 days. The newUndeliveredMessageExporterpredeploy (0x4200000000000000000000000000000000000030) and the newL1CrossDomainMessenger.relayUndeliveredMessagefunction process the expired message (#23286, #23649)SuperchainETHBridge.refundETHreturns the ETH of an expired send to the sender (#23284)- The L1 pause now applies to
ETHLiquidity. Anyone can callL1CrossDomainMessenger.syncETHLiquidityPause()to copy the L1 pause state to L2. While paused,ETHLiquidityblocksburnandmint(#23348, #23649) - The new
L1CrossDomainMessengerfunctions above revert unless the chain has interop enabled.
L2 contracts
L2ERC721Bridgeaccepts all pastOptimismMintableERC721interface IDs, and new tokens report each ID. Deposits into older L2 NFT tokens failed before. Users can now replay them. This change ships in the Lagoon L2 upgrade bundle (#23540)
Contract versions
| Contract | v9.0.0 | v10.0.0-rc.1 |
|---|---|---|
AnchorStateRegistry
| 4.0.0 | 5.1.0 |
ChainConfig
| — | 1.0.1 |
DelayedWETH
| 2.0.0 | 3.0.0 |
ETHLiquidity
| 1.1.1 | 2.0.0 |
ETHLockbox
| 2.0.0 | 2.1.0 |
L1CrossDomainMessenger
| 2.13.0 | 3.3.0 |
L1StandardBridge
| 2.8.2 | 2.9.0 |
L2ContractsManager
| 1.14.0 | 1.17.0 |
L2ERC721Bridge
| 1.10.1 | 1.11.0 |
L2ToL2CrossDomainMessenger
| 1.3.2 | 2.1.0 |
OPContractsManagerStandardValidator
| 4.1.1 | 6.0.0 |
OPContractsManagerV2
| 9.0.3 | 10.0.0 |
OptimismMintableERC721
| 1.3.2 | 1.4.0 |
OptimismMintableERC721Factory
| 1.5.1 | 1.6.0 |
OptimismPortal2
| 6.1.0 | 7.5.0 |
SuperFaultDisputeGame
| 0.8.0 | 0.9.0 |
SuperchainETHBridge
| 1.0.1 | 2.0.0 |
SystemConfig
| 4.3.0 | 4.4.0 |
UndeliveredMessageExporter
| — | 1.0.0 |
Full Changelog: op-contracts/v9.0.0...op-contracts/v10.0.0-rc.1