Skip to content

Commit 7492dac

Browse files
feat: OPCMv2
1 parent 8e56ed1 commit 7492dac

40 files changed

+3394
-433
lines changed

.circleci/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2547,6 +2547,7 @@ workflows:
25472547
- main
25482548
- OPTIMISM_PORTAL_INTEROP
25492549
- CANNON_KONA,DEPLOY_V2_DISPUTE_GAMES
2550+
- OPCM_V2
25502551
context:
25512552
- circleci-repo-readonly-authenticated-github-token
25522553
check_changed_patterns: contracts-bedrock,op-node

.semgrep/rules/sol-rules.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ rules:
320320
- packages/contracts-bedrock/src
321321
exclude:
322322
- packages/contracts-bedrock/src/L1/OPContractsManager.sol
323+
- packages/contracts-bedrock/src/L1/opcm/OPContractsManagerV2.sol
324+
- packages/contracts-bedrock/src/L1/opcm/OPContractsManagerContractsContainer.sol
323325
- packages/contracts-bedrock/src/L1/OptimismPortal2.sol
324326
- packages/contracts-bedrock/src/L1/OptimismPortalInterop.sol
325327
- packages/contracts-bedrock/src/L2/FeeVault.sol

op-chain-ops/addresses/contracts.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type ImplementationsContracts struct {
4949
AnchorStateRegistryImpl common.Address
5050
FaultDisputeGameV2Impl common.Address
5151
PermissionedDisputeGameV2Impl common.Address
52+
StorageSetterImpl common.Address
5253
}
5354

5455
// OpChainContracts struct contains all the contracts for a specific L2 OpChain

op-chain-ops/interopgen/deployments.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Implementations struct {
1717
OpcmUpgrader common.Address `json:"OPCMUpgrader"`
1818
OpcmInteropMigrator common.Address `json:"OPCMInteropMigrator"`
1919
OpcmStandardValidator common.Address `json:"OPCMStandardValidator"`
20+
OpcmV2 common.Address `json:"OPCMV2"`
2021
DelayedWETHImpl common.Address `json:"DelayedWETHImpl"`
2122
OptimismPortalImpl common.Address `json:"OptimismPortalImpl"`
2223
OptimismPortalInteropImpl common.Address `json:"OptimismPortalInteropImpl"`
@@ -36,6 +37,7 @@ type Implementations struct {
3637
PermissionedDisputeGameV2Impl common.Address `json:"PermissionedDisputeGameV2Impl"`
3738
SuperFaultDisputeGameImpl common.Address `json:"SuperFaultDisputeGameImpl"`
3839
SuperPermissionedDisputeGameImpl common.Address `json:"SuperPermissionedDisputeGameImpl"`
40+
StorageSetterImpl common.Address `json:"StorageSetterImpl"`
3941
}
4042

4143
type SuperchainDeployment struct {

op-deployer/pkg/deployer/opcm/implementations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type DeployImplementationsOutput struct {
3535
OpcmUpgrader common.Address `json:"opcmUpgraderAddress"`
3636
OpcmInteropMigrator common.Address `json:"opcmInteropMigratorAddress"`
3737
OpcmStandardValidator common.Address `json:"opcmStandardValidatorAddress"`
38+
OpcmV2 common.Address `json:"opcmV2Address" abi:"opcmV2"`
3839
DelayedWETHImpl common.Address `json:"delayedWETHImplAddress"`
3940
OptimismPortalImpl common.Address `json:"optimismPortalImplAddress"`
4041
OptimismPortalInteropImpl common.Address `json:"optimismPortalInteropImplAddress"`
@@ -54,6 +55,7 @@ type DeployImplementationsOutput struct {
5455
PermissionedDisputeGameV2Impl common.Address `json:"permissionedDisputeGameV2ImplAddress"`
5556
SuperFaultDisputeGameImpl common.Address `json:"superFaultDisputeGameImplAddress"`
5657
SuperPermissionedDisputeGameImpl common.Address `json:"superPermissionedDisputeGameImplAddress"`
58+
StorageSetterImpl common.Address `json:"storageSetterImplAddress"`
5759
}
5860

5961
type DeployImplementationsScript script.DeployScriptWithOutput[DeployImplementationsInput, DeployImplementationsOutput]

op-deployer/pkg/deployer/pipeline/implementations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func DeployImplementations(env *Env, intent *state.Intent, st *state.State) erro
8989
AnchorStateRegistryImpl: dio.AnchorStateRegistryImpl,
9090
FaultDisputeGameV2Impl: dio.FaultDisputeGameV2Impl,
9191
PermissionedDisputeGameV2Impl: dio.PermissionedDisputeGameV2Impl,
92+
StorageSetterImpl: dio.StorageSetterImpl,
9293
}
9394

9495
return nil

packages/contracts-bedrock/foundry.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ compilation_restrictions = [
2828
{ paths = "src/dispute/v2/PermissionedDisputeGameV2.sol", optimizer_runs = 5000 },
2929
{ paths = "src/L1/OPContractsManager.sol", optimizer_runs = 5000 },
3030
{ paths = "src/L1/OPContractsManagerStandardValidator.sol", optimizer_runs = 5000 },
31+
{ paths = "src/L1/opcm/OPContractsManagerV2.sol", optimizer_runs = 5000 },
32+
{ paths = "src/L1/opcm/OPContractsManagerContractsContainer.sol", optimizer_runs = 5000 },
3133
{ paths = "src/L1/OptimismPortal2.sol", optimizer_runs = 5000 },
32-
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 5000 }
34+
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 5000 },
35+
{ paths = "src/universal/StorageSetter.sol", optimizer_runs = 5000 }
3336
]
3437

3538
extra_output = ['devdoc', 'userdoc', 'metadata', 'storageLayout']
@@ -154,6 +157,8 @@ compilation_restrictions = [
154157
{ paths = "src/dispute/v2/PermissionedDisputeGameV2.sol", optimizer_runs = 0 },
155158
{ paths = "src/L1/OPContractsManager.sol", optimizer_runs = 0 },
156159
{ paths = "src/L1/OPContractsManagerStandardValidator.sol", optimizer_runs = 0 },
160+
{ paths = "src/L1/opcm/OPContractsManagerV2.sol", optimizer_runs = 0 },
161+
{ paths = "src/L1/opcm/OPContractsManagerContractsContainer.sol", optimizer_runs = 0 },
157162
{ paths = "src/L1/OptimismPortal2.sol", optimizer_runs = 0 },
158163
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 0 },
159164
]

packages/contracts-bedrock/interfaces/L1/IOPContractsManager.sol

Lines changed: 12 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,21 @@ import { IDelayedWETH } from "interfaces/dispute/IDelayedWETH.sol";
1010
import { IAnchorStateRegistry } from "interfaces/dispute/IAnchorStateRegistry.sol";
1111
import { IAddressManager } from "interfaces/legacy/IAddressManager.sol";
1212
import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol";
13-
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
1413
import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol";
1514
import { IFaultDisputeGame } from "interfaces/dispute/IFaultDisputeGame.sol";
1615
import { IPermissionedDisputeGame } from "interfaces/dispute/IPermissionedDisputeGame.sol";
1716
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
1817
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
1918
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
20-
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
2119
import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol";
2220
import { IL1ERC721Bridge } from "interfaces/L1/IL1ERC721Bridge.sol";
2321
import { IL1StandardBridge } from "interfaces/L1/IL1StandardBridge.sol";
2422
import { IOptimismMintableERC20Factory } from "interfaces/universal/IOptimismMintableERC20Factory.sol";
2523
import { IETHLockbox } from "interfaces/L1/IETHLockbox.sol";
2624
import { IOPContractsManagerStandardValidator } from "interfaces/L1/IOPContractsManagerStandardValidator.sol";
27-
28-
interface IOPContractsManagerContractsContainer {
29-
error OPContractsManagerContractsContainer_DevFeatureInProd();
30-
31-
function __constructor__(
32-
IOPContractsManager.Blueprints memory _blueprints,
33-
IOPContractsManager.Implementations memory _implementations,
34-
bytes32 _devFeatureBitmap
35-
)
36-
external;
37-
38-
function blueprints() external view returns (IOPContractsManager.Blueprints memory);
39-
function implementations() external view returns (IOPContractsManager.Implementations memory);
40-
function devFeatureBitmap() external view returns (bytes32);
41-
function isDevFeatureEnabled(bytes32 _feature) external view returns (bool);
42-
}
25+
import { IOPContractsManagerV2 } from "interfaces/L1/opcm/IOPContractsManagerV2.sol";
26+
import { IOPContractsManagerContractsContainer } from "interfaces/L1/opcm/IOPContractsManagerContractsContainer.sol";
27+
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
4328

4429
interface IOPContractsManagerGameTypeAdder {
4530
error OPContractsManagerGameTypeAdder_UnsupportedGameType();
@@ -179,45 +164,6 @@ interface IOPContractsManager {
179164
IDelayedWETH delayedWETHPermissionlessGameProxy;
180165
}
181166

182-
/// @notice Addresses of ERC-5202 Blueprint contracts. There are used for deploying full size
183-
/// contracts, to reduce the code size of this factory contract. If it deployed full contracts
184-
/// using the `new Proxy()` syntax, the code size would get large fast, since this contract would
185-
/// contain the bytecode of every contract it deploys. Therefore we instead use Blueprints to
186-
/// reduce the code size of this contract.
187-
struct Blueprints {
188-
address addressManager;
189-
address proxy;
190-
address proxyAdmin;
191-
address l1ChugSplashProxy;
192-
address resolvedDelegateProxy;
193-
address permissionedDisputeGame1;
194-
address permissionedDisputeGame2;
195-
address permissionlessDisputeGame1;
196-
address permissionlessDisputeGame2;
197-
}
198-
199-
/// @notice The latest implementation contracts for the OP Stack.
200-
struct Implementations {
201-
address superchainConfigImpl;
202-
address protocolVersionsImpl;
203-
address l1ERC721BridgeImpl;
204-
address optimismPortalImpl;
205-
address optimismPortalInteropImpl;
206-
address ethLockboxImpl;
207-
address systemConfigImpl;
208-
address optimismMintableERC20FactoryImpl;
209-
address l1CrossDomainMessengerImpl;
210-
address l1StandardBridgeImpl;
211-
address disputeGameFactoryImpl;
212-
address anchorStateRegistryImpl;
213-
address delayedWETHImpl;
214-
address mipsImpl;
215-
address faultDisputeGameV2Impl;
216-
address permissionedDisputeGameV2Impl;
217-
address superFaultDisputeGameImpl;
218-
address superPermissionedDisputeGameImpl;
219-
}
220-
221167
/// @notice The input required to identify a chain for upgrading.
222168
struct OpChainConfig {
223169
ISystemConfig systemConfigProxy;
@@ -302,6 +248,10 @@ interface IOPContractsManager {
302248

303249
error InvalidDevFeatureAccess(bytes32 devFeature);
304250

251+
error MissingPermissionedDisputeGame();
252+
253+
event Deployed(uint256 indexed l2ChainId, address indexed deployer, bytes deployOutput);
254+
305255
// -------- Methods --------
306256

307257
function __constructor__(
@@ -310,6 +260,7 @@ interface IOPContractsManager {
310260
IOPContractsManagerUpgrader _opcmUpgrader,
311261
IOPContractsManagerInteropMigrator _opcmInteropMigrator,
312262
IOPContractsManagerStandardValidator _opcmStandardValidator,
263+
IOPContractsManagerV2 _opcmV2,
313264
ISuperchainConfig _superchainConfig,
314265
IProtocolVersions _protocolVersions
315266
)
@@ -379,7 +330,7 @@ interface IOPContractsManager {
379330
function chainIdToBatchInboxAddress(uint256 _l2ChainId) external pure returns (address);
380331

381332
/// @notice Returns the blueprint contract addresses.
382-
function blueprints() external view returns (Blueprints memory);
333+
function blueprints() external view returns (IOPContractsManagerContractsContainer.Blueprints memory);
383334

384335
function opcmDeployer() external view returns (IOPContractsManagerDeployer);
385336

@@ -391,6 +342,8 @@ interface IOPContractsManager {
391342

392343
function opcmStandardValidator() external view returns (IOPContractsManagerStandardValidator);
393344

345+
function opcmV2() external view returns (IOPContractsManagerV2);
346+
394347
/// @notice Retrieves the development feature bitmap stored in this OPCM contract
395348
/// @return The development feature bitmap.
396349
function devFeatureBitmap() external view returns (bytes32);
@@ -401,5 +354,5 @@ interface IOPContractsManager {
401354
function isDevFeatureEnabled(bytes32 _feature) external view returns (bool);
402355

403356
/// @notice Returns the implementation contract addresses.
404-
function implementations() external view returns (Implementations memory);
357+
function implementations() external view returns (IOPContractsManagerContractsContainer.Implementations memory);
405358
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
interface IOPContractsManagerContractsContainer {
5+
struct Blueprints {
6+
address addressManager;
7+
address proxy;
8+
address proxyAdmin;
9+
address l1ChugSplashProxy;
10+
address resolvedDelegateProxy;
11+
address permissionedDisputeGame1;
12+
address permissionedDisputeGame2;
13+
address permissionlessDisputeGame1;
14+
address permissionlessDisputeGame2;
15+
}
16+
17+
struct Implementations {
18+
address superchainConfigImpl;
19+
address protocolVersionsImpl;
20+
address l1ERC721BridgeImpl;
21+
address optimismPortalImpl;
22+
address optimismPortalInteropImpl;
23+
address ethLockboxImpl;
24+
address systemConfigImpl;
25+
address optimismMintableERC20FactoryImpl;
26+
address l1CrossDomainMessengerImpl;
27+
address l1StandardBridgeImpl;
28+
address disputeGameFactoryImpl;
29+
address anchorStateRegistryImpl;
30+
address delayedWETHImpl;
31+
address mipsImpl;
32+
address faultDisputeGameV2Impl;
33+
address permissionedDisputeGameV2Impl;
34+
address superFaultDisputeGameImpl;
35+
address superPermissionedDisputeGameImpl;
36+
address storageSetterImpl;
37+
}
38+
39+
error OPContractsManagerContractsContainer_DevFeatureInProd();
40+
41+
function blueprints() external view returns (Blueprints memory);
42+
function implementations() external view returns (Implementations memory);
43+
function isDevFeatureEnabled(bytes32 _feature) external view returns (bool);
44+
function devFeatureBitmap() external view returns (bytes32);
45+
function __constructor__(Blueprints memory _blueprints, Implementations memory _implementations, bytes32 _devFeatureBitmap) external;
46+
}

0 commit comments

Comments
 (0)