Documentation Index
Fetch the complete documentation index at: https://docs.optimism.io/llms.txt
Use this file to discover all available pages before exploring further.
This feature ships with Upgrade 19. It is non-functional until the upgrade is approved by governance and activated on Mainnet.
Overview
Before L2CM, upgrading L2 predeploy contracts required individual multisig transactions for each contract, coordinated outside the normal upgrade process. L2CM replaces this with a single atomic upgrade triggered automatically by the consensus layer at the start of a hard fork block, using a Network Upgrade Transaction (NUT). L2CM is a prerequisite for interoperability and future protocol upgrades that need to modify L2 contracts.How it works
L2CM is implemented as theL2ContractsManager contract, which holds the new implementation addresses for all predeploys as immutables. During a network upgrade activation:
- The consensus layer (
op-node) emits a Network Upgrade Transaction (NUT) targeting theL2ProxyAdminpredeploy. - The
L2ProxyAdminexecutes aDELEGATECALLto theL2ContractsManager.upgrade()function. upgrade()reads chain-specific configuration from the current state —L1Block(forisCustomGasToken,isInterop), fee vault recipients, bridge addresses, and other per-chain parameters.- Using this configuration,
L2ContractsManagerupgrades and re-initializes every predeploy in a single atomic transaction.
upgrade() is called via DELEGATECALL from L2ProxyAdmin, no multisig approval is needed for individual contracts — the upgrade is entirely encoded in the L2ContractsManager deployment and activated by governance through the normal network upgrade process.
What gets upgraded
EachL2ContractsManager deployment ships new implementations for all core L2 predeploys, including:
L2CrossDomainMessengerL2StandardBridgeL2ERC721BridgeL1BlockL2ToL1MessagePasserGasPriceOracleOptimismMintableERC20FactoryOptimismMintableERC721Factory- Fee vaults (
SequencerFeeWallet,BaseFeeVault,L1FeeVault,OperatorFeeVault) ProxyAdmin- Interop contracts (
CrossL2Inbox,L2ToL2CrossDomainMessenger,SuperchainETHBridge,ETHLiquidity) when interop is enabled - Custom Gas Token contracts (
NativeAssetLiquidity,LiquidityController) when CGT is enabled
Why it matters
- Atomic upgrades: All predeploys are upgraded in a single transaction, eliminating partial upgrade states.
- Reduced multisig overhead: No per-contract signing required; the upgrade is encoded at deployment time and activated through the governance-approved hard fork.
- Auditable: The full set of implementation changes is visible in the
L2ContractsManagersource code before the upgrade activates. - Interop prerequisite: Interop requires coordinated changes across multiple predeploys; L2CM makes this feasible.
- Stage 1 decentralization: By routing L2 predeploy upgrades through the Security Council-owned
L2ProxyAdmin, L2CM satisfies the Stage 1 requirement that the Security Council has a blocking vote on L2 upgrades.
For app developers
If your application interacts directly with predeploy contracts (for example, calling methods onL2CrossDomainMessenger, L2StandardBridge, or L1Block), be aware that:
- Predeploy behavior may change with each network upgrade. Review the changelog for the specific upgrade to understand new functions, removed functions, or behavior changes.
- Proxy addresses remain stable — only implementations change.
- Existing ABIs remain backward-compatible unless a breaking change is explicitly noted in the upgrade changelog.