Commit ef6ef6fd authored by Michael Amadi's avatar Michael Amadi Committed by GitHub

make interfaces for opcm contracts and use them in tests and scripts (#13922)

* make interfaces for opcm contracts and use them in tests and scripts

* fix opcm interop deployment
parent 95801790
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
interface IOPContractsManagerInterop is IOPContractsManager {
function __constructor__(
ISuperchainConfig _superchainConfig,
IProtocolVersions _protocolVersions,
string memory _l1ContractsRelease,
Blueprints memory _blueprints,
Implementations memory _implementations
)
external;
}
...@@ -17,10 +17,8 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; ...@@ -17,10 +17,8 @@ import { Predeploys } from "src/libraries/Predeploys.sol";
import { Types } from "scripts/libraries/Types.sol"; import { Types } from "scripts/libraries/Types.sol";
import { Blueprint } from "src/libraries/Blueprint.sol"; import { Blueprint } from "src/libraries/Blueprint.sol";
// Contracts
import { OPContractsManager } from "src/L1/OPContractsManager.sol";
// Interfaces // Interfaces
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IResourceMetering } from "interfaces/L1/IResourceMetering.sol"; import { IResourceMetering } from "interfaces/L1/IResourceMetering.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol"; import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
...@@ -472,7 +470,7 @@ library ChainAssertions { ...@@ -472,7 +470,7 @@ library ChainAssertions {
/// @notice Asserts that the OPContractsManager is setup correctly /// @notice Asserts that the OPContractsManager is setup correctly
function checkOPContractsManager( function checkOPContractsManager(
Types.ContractSet memory _contracts, Types.ContractSet memory _contracts,
OPContractsManager _opcm, IOPContractsManager _opcm,
IMIPS _mips IMIPS _mips
) )
internal internal
...@@ -494,7 +492,7 @@ library ChainAssertions { ...@@ -494,7 +492,7 @@ library ChainAssertions {
require(bytes(_opcm.l1ContractsRelease()).length > 0, "CHECK-OPCM-40"); require(bytes(_opcm.l1ContractsRelease()).length > 0, "CHECK-OPCM-40");
// Ensure that the OPCM impls are correctly saved // Ensure that the OPCM impls are correctly saved
OPContractsManager.Implementations memory impls = _opcm.implementations(); IOPContractsManager.Implementations memory impls = _opcm.implementations();
require(impls.l1ERC721BridgeImpl == _contracts.L1ERC721Bridge, "CHECK-OPCM-50"); require(impls.l1ERC721BridgeImpl == _contracts.L1ERC721Bridge, "CHECK-OPCM-50");
require(impls.optimismPortalImpl == _contracts.OptimismPortal, "CHECK-OPCM-60"); require(impls.optimismPortalImpl == _contracts.OptimismPortal, "CHECK-OPCM-60");
require(impls.systemConfigImpl == _contracts.SystemConfig, "CHECK-OPCM-70"); require(impls.systemConfigImpl == _contracts.SystemConfig, "CHECK-OPCM-70");
...@@ -506,7 +504,7 @@ library ChainAssertions { ...@@ -506,7 +504,7 @@ library ChainAssertions {
require(impls.mipsImpl == address(_mips), "CHECK-OPCM-130"); require(impls.mipsImpl == address(_mips), "CHECK-OPCM-130");
// Verify that initCode is correctly set into the blueprints // Verify that initCode is correctly set into the blueprints
OPContractsManager.Blueprints memory blueprints = _opcm.blueprints(); IOPContractsManager.Blueprints memory blueprints = _opcm.blueprints();
Blueprint.Preamble memory addressManagerPreamble = Blueprint.Preamble memory addressManagerPreamble =
Blueprint.parseBlueprintPreamble(address(blueprints.addressManager).code); Blueprint.parseBlueprintPreamble(address(blueprints.addressManager).code);
require(keccak256(addressManagerPreamble.initcode) == keccak256(vm.getCode("AddressManager")), "CHECK-OPCM-140"); require(keccak256(addressManagerPreamble.initcode) == keccak256(vm.getCode("AddressManager")), "CHECK-OPCM-140");
......
...@@ -24,9 +24,6 @@ import { ...@@ -24,9 +24,6 @@ import {
DeployImplementationsOutput DeployImplementationsOutput
} from "scripts/deploy/DeployImplementations.s.sol"; } from "scripts/deploy/DeployImplementations.s.sol";
// Contracts
import { OPContractsManager } from "src/L1/OPContractsManager.sol";
// Libraries // Libraries
import { Constants } from "src/libraries/Constants.sol"; import { Constants } from "src/libraries/Constants.sol";
import { Types } from "scripts/libraries/Types.sol"; import { Types } from "scripts/libraries/Types.sol";
...@@ -35,6 +32,7 @@ import { StorageSlot, ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.so ...@@ -35,6 +32,7 @@ import { StorageSlot, ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.so
import { GameType, Claim, GameTypes, OutputRoot, Hash } from "src/dispute/lib/Types.sol"; import { GameType, Claim, GameTypes, OutputRoot, Hash } from "src/dispute/lib/Types.sol";
// Interfaces // Interfaces
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IProxy } from "interfaces/universal/IProxy.sol"; import { IProxy } from "interfaces/universal/IProxy.sol";
import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol"; import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
...@@ -346,7 +344,7 @@ contract Deploy is Deployer { ...@@ -346,7 +344,7 @@ contract Deploy is Deployer {
}); });
ChainAssertions.checkOPContractsManager({ ChainAssertions.checkOPContractsManager({
_contracts: contracts, _contracts: contracts,
_opcm: OPContractsManager(address(dio.opcm())), _opcm: IOPContractsManager(address(dio.opcm())),
_mips: IMIPS(address(dio.mipsSingleton())) _mips: IMIPS(address(dio.mipsSingleton()))
}); });
if (_isInterop) { if (_isInterop) {
...@@ -362,10 +360,10 @@ contract Deploy is Deployer { ...@@ -362,10 +360,10 @@ contract Deploy is Deployer {
// Ensure that the requisite contracts are deployed // Ensure that the requisite contracts are deployed
address superchainConfigProxy = artifacts.mustGetAddress("SuperchainConfigProxy"); address superchainConfigProxy = artifacts.mustGetAddress("SuperchainConfigProxy");
OPContractsManager opcm = OPContractsManager(artifacts.mustGetAddress("OPContractsManager")); IOPContractsManager opcm = IOPContractsManager(artifacts.mustGetAddress("OPContractsManager"));
OPContractsManager.DeployInput memory deployInput = getDeployInput(); IOPContractsManager.DeployInput memory deployInput = getDeployInput();
OPContractsManager.DeployOutput memory deployOutput = opcm.deploy(deployInput); IOPContractsManager.DeployOutput memory deployOutput = opcm.deploy(deployInput);
// Save all deploy outputs from the OPCM, in the order they are declared in the DeployOutput struct // Save all deploy outputs from the OPCM, in the order they are declared in the DeployOutput struct
artifacts.save("ProxyAdmin", address(deployOutput.opChainProxyAdmin)); artifacts.save("ProxyAdmin", address(deployOutput.opChainProxyAdmin));
...@@ -854,10 +852,10 @@ contract Deploy is Deployer { ...@@ -854,10 +852,10 @@ contract Deploy is Deployer {
} }
/// @notice Get the DeployInput struct to use for testing /// @notice Get the DeployInput struct to use for testing
function getDeployInput() public view returns (OPContractsManager.DeployInput memory) { function getDeployInput() public view returns (IOPContractsManager.DeployInput memory) {
string memory saltMixer = "salt mixer"; string memory saltMixer = "salt mixer";
return OPContractsManager.DeployInput({ return IOPContractsManager.DeployInput({
roles: OPContractsManager.Roles({ roles: IOPContractsManager.Roles({
opChainProxyAdminOwner: msg.sender, opChainProxyAdminOwner: msg.sender,
systemConfigOwner: cfg.finalSystemOwner(), systemConfigOwner: cfg.finalSystemOwner(),
batcher: cfg.batchSenderAddress(), batcher: cfg.batchSenderAddress(),
......
...@@ -14,15 +14,14 @@ import { IPreimageOracle } from "interfaces/cannon/IPreimageOracle.sol"; ...@@ -14,15 +14,14 @@ import { IPreimageOracle } from "interfaces/cannon/IPreimageOracle.sol";
import { IMIPS } from "interfaces/cannon/IMIPS.sol"; import { IMIPS } from "interfaces/cannon/IMIPS.sol";
import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol"; import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol";
import { IAnchorStateRegistry } from "interfaces/dispute/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "interfaces/dispute/IAnchorStateRegistry.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IOPContractsManagerInterop } from "interfaces/L1/IOPContractsManagerInterop.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol";
import { IL1ERC721Bridge } from "interfaces/L1/IL1ERC721Bridge.sol"; import { IL1ERC721Bridge } from "interfaces/L1/IL1ERC721Bridge.sol";
import { IL1StandardBridge } from "interfaces/L1/IL1StandardBridge.sol"; import { IL1StandardBridge } from "interfaces/L1/IL1StandardBridge.sol";
import { IOptimismMintableERC20Factory } from "interfaces/universal/IOptimismMintableERC20Factory.sol"; import { IOptimismMintableERC20Factory } from "interfaces/universal/IOptimismMintableERC20Factory.sol";
import { OPContractsManagerInterop } from "src/L1/OPContractsManagerInterop.sol";
import { IOptimismPortalInterop } from "interfaces/L1/IOptimismPortalInterop.sol"; import { IOptimismPortalInterop } from "interfaces/L1/IOptimismPortalInterop.sol";
import { ISystemConfigInterop } from "interfaces/L1/ISystemConfigInterop.sol"; import { ISystemConfigInterop } from "interfaces/L1/ISystemConfigInterop.sol";
...@@ -131,7 +130,7 @@ contract DeployImplementationsInput is BaseDeployIO { ...@@ -131,7 +130,7 @@ contract DeployImplementationsInput is BaseDeployIO {
} }
contract DeployImplementationsOutput is BaseDeployIO { contract DeployImplementationsOutput is BaseDeployIO {
OPContractsManager internal _opcm; IOPContractsManager internal _opcm;
IDelayedWETH internal _delayedWETHImpl; IDelayedWETH internal _delayedWETHImpl;
IOptimismPortal2 internal _optimismPortalImpl; IOptimismPortal2 internal _optimismPortalImpl;
IPreimageOracle internal _preimageOracleSingleton; IPreimageOracle internal _preimageOracleSingleton;
...@@ -148,7 +147,7 @@ contract DeployImplementationsOutput is BaseDeployIO { ...@@ -148,7 +147,7 @@ contract DeployImplementationsOutput is BaseDeployIO {
require(_addr != address(0), "DeployImplementationsOutput: cannot set zero address"); require(_addr != address(0), "DeployImplementationsOutput: cannot set zero address");
// forgefmt: disable-start // forgefmt: disable-start
if (_sel == this.opcm.selector) _opcm = OPContractsManager(_addr); if (_sel == this.opcm.selector) _opcm = IOPContractsManager(_addr);
else if (_sel == this.optimismPortalImpl.selector) _optimismPortalImpl = IOptimismPortal2(payable(_addr)); else if (_sel == this.optimismPortalImpl.selector) _optimismPortalImpl = IOptimismPortal2(payable(_addr));
else if (_sel == this.delayedWETHImpl.selector) _delayedWETHImpl = IDelayedWETH(payable(_addr)); else if (_sel == this.delayedWETHImpl.selector) _delayedWETHImpl = IDelayedWETH(payable(_addr));
else if (_sel == this.preimageOracleSingleton.selector) _preimageOracleSingleton = IPreimageOracle(_addr); else if (_sel == this.preimageOracleSingleton.selector) _preimageOracleSingleton = IPreimageOracle(_addr);
...@@ -190,7 +189,7 @@ contract DeployImplementationsOutput is BaseDeployIO { ...@@ -190,7 +189,7 @@ contract DeployImplementationsOutput is BaseDeployIO {
assertValidDeploy(_dii); assertValidDeploy(_dii);
} }
function opcm() public view returns (OPContractsManager) { function opcm() public view returns (IOPContractsManager) {
DeployUtils.assertValidContractAddress(address(_opcm)); DeployUtils.assertValidContractAddress(address(_opcm));
return _opcm; return _opcm;
} }
...@@ -267,7 +266,7 @@ contract DeployImplementationsOutput is BaseDeployIO { ...@@ -267,7 +266,7 @@ contract DeployImplementationsOutput is BaseDeployIO {
} }
function assertValidOpcm(DeployImplementationsInput _dii) internal view { function assertValidOpcm(DeployImplementationsInput _dii) internal view {
OPContractsManager impl = OPContractsManager(address(opcm())); IOPContractsManager impl = IOPContractsManager(address(opcm()));
require(address(impl.superchainConfig()) == address(_dii.superchainConfigProxy()), "OPCMI-10"); require(address(impl.superchainConfig()) == address(_dii.superchainConfigProxy()), "OPCMI-10");
require(address(impl.protocolVersions()) == address(_dii.protocolVersionsProxy()), "OPCMI-20"); require(address(impl.protocolVersions()) == address(_dii.protocolVersionsProxy()), "OPCMI-20");
} }
...@@ -436,17 +435,17 @@ contract DeployImplementations is Script { ...@@ -436,17 +435,17 @@ contract DeployImplementations is Script {
function createOPCMContract( function createOPCMContract(
DeployImplementationsInput _dii, DeployImplementationsInput _dii,
DeployImplementationsOutput _dio, DeployImplementationsOutput _dio,
OPContractsManager.Blueprints memory _blueprints, IOPContractsManager.Blueprints memory _blueprints,
string memory _l1ContractsRelease string memory _l1ContractsRelease
) )
internal internal
virtual virtual
returns (OPContractsManager opcm_) returns (IOPContractsManager opcm_)
{ {
ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy(); ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy();
IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy(); IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy();
OPContractsManager.Implementations memory implementations = OPContractsManager.Implementations({ IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()), l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()),
optimismPortalImpl: address(_dio.optimismPortalImpl()), optimismPortalImpl: address(_dio.optimismPortalImpl()),
systemConfigImpl: address(_dio.systemConfigImpl()), systemConfigImpl: address(_dio.systemConfigImpl()),
...@@ -460,11 +459,14 @@ contract DeployImplementations is Script { ...@@ -460,11 +459,14 @@ contract DeployImplementations is Script {
}); });
vm.broadcast(msg.sender); vm.broadcast(msg.sender);
opcm_ = OPContractsManager( opcm_ = IOPContractsManager(
DeployUtils.createDeterministic({ DeployUtils.createDeterministic({
_name: "OPContractsManager", _name: "OPContractsManager",
_args: abi.encode( _args: DeployUtils.encodeConstructor(
superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations abi.encodeCall(
IOPContractsManager.__constructor__,
(superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations)
)
), ),
_salt: _salt _salt: _salt
}) })
...@@ -485,7 +487,7 @@ contract DeployImplementations is Script { ...@@ -485,7 +487,7 @@ contract DeployImplementations is Script {
// First we deploy the blueprints for the singletons deployed by OPCM. // First we deploy the blueprints for the singletons deployed by OPCM.
// forgefmt: disable-start // forgefmt: disable-start
OPContractsManager.Blueprints memory blueprints; IOPContractsManager.Blueprints memory blueprints;
vm.startBroadcast(msg.sender); vm.startBroadcast(msg.sender);
address checkAddress; address checkAddress;
(blueprints.addressManager, checkAddress) = DeployUtils.createDeterministicBlueprint(vm.getCode("AddressManager"), _salt); (blueprints.addressManager, checkAddress) = DeployUtils.createDeterministicBlueprint(vm.getCode("AddressManager"), _salt);
...@@ -505,7 +507,7 @@ contract DeployImplementations is Script { ...@@ -505,7 +507,7 @@ contract DeployImplementations is Script {
// forgefmt: disable-end // forgefmt: disable-end
vm.stopBroadcast(); vm.stopBroadcast();
OPContractsManager opcm = createOPCMContract(_dii, _dio, blueprints, l1ContractsRelease); IOPContractsManager opcm = createOPCMContract(_dii, _dio, blueprints, l1ContractsRelease);
vm.label(address(opcm), "OPContractsManager"); vm.label(address(opcm), "OPContractsManager");
_dio.set(_dio.opcm.selector, address(opcm)); _dio.set(_dio.opcm.selector, address(opcm));
...@@ -778,18 +780,18 @@ contract DeployImplementationsInterop is DeployImplementations { ...@@ -778,18 +780,18 @@ contract DeployImplementationsInterop is DeployImplementations {
function createOPCMContract( function createOPCMContract(
DeployImplementationsInput _dii, DeployImplementationsInput _dii,
DeployImplementationsOutput _dio, DeployImplementationsOutput _dio,
OPContractsManager.Blueprints memory _blueprints, IOPContractsManager.Blueprints memory _blueprints,
string memory _l1ContractsRelease string memory _l1ContractsRelease
) )
internal internal
virtual virtual
override override
returns (OPContractsManager opcm_) returns (IOPContractsManager opcm_)
{ {
ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy(); ISuperchainConfig superchainConfigProxy = _dii.superchainConfigProxy();
IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy(); IProtocolVersions protocolVersionsProxy = _dii.protocolVersionsProxy();
OPContractsManager.Implementations memory implementations = OPContractsManager.Implementations({ IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()), l1ERC721BridgeImpl: address(_dio.l1ERC721BridgeImpl()),
optimismPortalImpl: address(_dio.optimismPortalImpl()), optimismPortalImpl: address(_dio.optimismPortalImpl()),
systemConfigImpl: address(_dio.systemConfigImpl()), systemConfigImpl: address(_dio.systemConfigImpl()),
...@@ -803,11 +805,14 @@ contract DeployImplementationsInterop is DeployImplementations { ...@@ -803,11 +805,14 @@ contract DeployImplementationsInterop is DeployImplementations {
}); });
vm.broadcast(msg.sender); vm.broadcast(msg.sender);
opcm_ = OPContractsManagerInterop( opcm_ = IOPContractsManager(
DeployUtils.createDeterministic({ DeployUtils.createDeterministic({
_name: "OPContractsManagerInterop", _name: "OPContractsManagerInterop",
_args: abi.encode( _args: DeployUtils.encodeConstructor(
superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations abi.encodeCall(
IOPContractsManagerInterop.__constructor__,
(superchainConfigProxy, protocolVersionsProxy, _l1ContractsRelease, _blueprints, implementations)
)
), ),
_salt: _salt _salt: _salt
}) })
......
...@@ -10,7 +10,7 @@ import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; ...@@ -10,7 +10,7 @@ import { DeployUtils } from "scripts/libraries/DeployUtils.sol";
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol"; import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol"; import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
contract DeployOPCMInput is BaseDeployIO { contract DeployOPCMInput is BaseDeployIO {
ISuperchainConfig internal _superchainConfig; ISuperchainConfig internal _superchainConfig;
...@@ -172,17 +172,17 @@ contract DeployOPCMInput is BaseDeployIO { ...@@ -172,17 +172,17 @@ contract DeployOPCMInput is BaseDeployIO {
} }
contract DeployOPCMOutput is BaseDeployIO { contract DeployOPCMOutput is BaseDeployIO {
OPContractsManager internal _opcm; IOPContractsManager internal _opcm;
// Setter for address type // Setter for address type
function set(bytes4 _sel, address _addr) public { function set(bytes4 _sel, address _addr) public {
require(_addr != address(0), "DeployOPCMOutput: cannot set zero address"); require(_addr != address(0), "DeployOPCMOutput: cannot set zero address");
if (_sel == this.opcm.selector) _opcm = OPContractsManager(_addr); if (_sel == this.opcm.selector) _opcm = IOPContractsManager(_addr);
else revert("DeployOPCMOutput: unknown selector"); else revert("DeployOPCMOutput: unknown selector");
} }
// Getter // Getter
function opcm() public view returns (OPContractsManager) { function opcm() public view returns (IOPContractsManager) {
require(address(_opcm) != address(0), "DeployOPCMOutput: not set"); require(address(_opcm) != address(0), "DeployOPCMOutput: not set");
return _opcm; return _opcm;
} }
...@@ -190,7 +190,7 @@ contract DeployOPCMOutput is BaseDeployIO { ...@@ -190,7 +190,7 @@ contract DeployOPCMOutput is BaseDeployIO {
contract DeployOPCM is Script { contract DeployOPCM is Script {
function run(DeployOPCMInput _doi, DeployOPCMOutput _doo) public { function run(DeployOPCMInput _doi, DeployOPCMOutput _doo) public {
OPContractsManager.Blueprints memory blueprints = OPContractsManager.Blueprints({ IOPContractsManager.Blueprints memory blueprints = IOPContractsManager.Blueprints({
addressManager: _doi.addressManagerBlueprint(), addressManager: _doi.addressManagerBlueprint(),
proxy: _doi.proxyBlueprint(), proxy: _doi.proxyBlueprint(),
proxyAdmin: _doi.proxyAdminBlueprint(), proxyAdmin: _doi.proxyAdminBlueprint(),
...@@ -201,7 +201,7 @@ contract DeployOPCM is Script { ...@@ -201,7 +201,7 @@ contract DeployOPCM is Script {
permissionlessDisputeGame1: address(0), permissionlessDisputeGame1: address(0),
permissionlessDisputeGame2: address(0) permissionlessDisputeGame2: address(0)
}); });
OPContractsManager.Implementations memory implementations = OPContractsManager.Implementations({ IOPContractsManager.Implementations memory implementations = IOPContractsManager.Implementations({
l1ERC721BridgeImpl: address(_doi.l1ERC721BridgeImpl()), l1ERC721BridgeImpl: address(_doi.l1ERC721BridgeImpl()),
optimismPortalImpl: address(_doi.optimismPortalImpl()), optimismPortalImpl: address(_doi.optimismPortalImpl()),
systemConfigImpl: address(_doi.systemConfigImpl()), systemConfigImpl: address(_doi.systemConfigImpl()),
...@@ -214,7 +214,7 @@ contract DeployOPCM is Script { ...@@ -214,7 +214,7 @@ contract DeployOPCM is Script {
mipsImpl: address(_doi.mipsImpl()) mipsImpl: address(_doi.mipsImpl())
}); });
OPContractsManager opcm_ = deployOPCM( IOPContractsManager opcm_ = deployOPCM(
_doi.superchainConfig(), _doi.protocolVersions(), blueprints, implementations, _doi.l1ContractsRelease() _doi.superchainConfig(), _doi.protocolVersions(), blueprints, implementations, _doi.l1ContractsRelease()
); );
_doo.set(_doo.opcm.selector, address(opcm_)); _doo.set(_doo.opcm.selector, address(opcm_));
...@@ -225,27 +225,36 @@ contract DeployOPCM is Script { ...@@ -225,27 +225,36 @@ contract DeployOPCM is Script {
function deployOPCM( function deployOPCM(
ISuperchainConfig _superchainConfig, ISuperchainConfig _superchainConfig,
IProtocolVersions _protocolVersions, IProtocolVersions _protocolVersions,
OPContractsManager.Blueprints memory _blueprints, IOPContractsManager.Blueprints memory _blueprints,
OPContractsManager.Implementations memory _implementations, IOPContractsManager.Implementations memory _implementations,
string memory _l1ContractsRelease string memory _l1ContractsRelease
) )
public public
returns (OPContractsManager opcm_) returns (IOPContractsManager opcm_)
{ {
vm.broadcast(msg.sender); vm.broadcast(msg.sender);
opcm_ = new OPContractsManager( opcm_ = IOPContractsManager(
_superchainConfig, _protocolVersions, _l1ContractsRelease, _blueprints, _implementations DeployUtils.createDeterministic({
_name: "OPContractsManager",
_args: DeployUtils.encodeConstructor(
abi.encodeCall(
IOPContractsManager.__constructor__,
(_superchainConfig, _protocolVersions, _l1ContractsRelease, _blueprints, _implementations)
)
),
_salt: DeployUtils.DEFAULT_SALT
})
); );
vm.label(address(opcm_), "OPContractsManager"); vm.label(address(opcm_), "OPContractsManager");
} }
function assertValidOpcm(DeployOPCMInput _doi, DeployOPCMOutput _doo) public view { function assertValidOpcm(DeployOPCMInput _doi, DeployOPCMOutput _doo) public view {
OPContractsManager impl = OPContractsManager(address(_doo.opcm())); IOPContractsManager impl = IOPContractsManager(address(_doo.opcm()));
require(address(impl.superchainConfig()) == address(_doi.superchainConfig()), "OPCMI-10"); require(address(impl.superchainConfig()) == address(_doi.superchainConfig()), "OPCMI-10");
require(address(impl.protocolVersions()) == address(_doi.protocolVersions()), "OPCMI-20"); require(address(impl.protocolVersions()) == address(_doi.protocolVersions()), "OPCMI-20");
require(LibString.eq(impl.l1ContractsRelease(), _doi.l1ContractsRelease()), "OPCMI-30"); require(LibString.eq(impl.l1ContractsRelease(), _doi.l1ContractsRelease()), "OPCMI-30");
OPContractsManager.Blueprints memory blueprints = impl.blueprints(); IOPContractsManager.Blueprints memory blueprints = impl.blueprints();
require(blueprints.addressManager == _doi.addressManagerBlueprint(), "OPCMI-40"); require(blueprints.addressManager == _doi.addressManagerBlueprint(), "OPCMI-40");
require(blueprints.proxy == _doi.proxyBlueprint(), "OPCMI-50"); require(blueprints.proxy == _doi.proxyBlueprint(), "OPCMI-50");
require(blueprints.proxyAdmin == _doi.proxyAdminBlueprint(), "OPCMI-60"); require(blueprints.proxyAdmin == _doi.proxyAdminBlueprint(), "OPCMI-60");
...@@ -254,7 +263,7 @@ contract DeployOPCM is Script { ...@@ -254,7 +263,7 @@ contract DeployOPCM is Script {
require(blueprints.permissionedDisputeGame1 == _doi.permissionedDisputeGame1Blueprint(), "OPCMI-100"); require(blueprints.permissionedDisputeGame1 == _doi.permissionedDisputeGame1Blueprint(), "OPCMI-100");
require(blueprints.permissionedDisputeGame2 == _doi.permissionedDisputeGame2Blueprint(), "OPCMI-110"); require(blueprints.permissionedDisputeGame2 == _doi.permissionedDisputeGame2Blueprint(), "OPCMI-110");
OPContractsManager.Implementations memory implementations = impl.implementations(); IOPContractsManager.Implementations memory implementations = impl.implementations();
require(implementations.l1ERC721BridgeImpl == _doi.l1ERC721BridgeImpl(), "OPCMI-120"); require(implementations.l1ERC721BridgeImpl == _doi.l1ERC721BridgeImpl(), "OPCMI-120");
require(implementations.optimismPortalImpl == _doi.optimismPortalImpl(), "OPCMI-130"); require(implementations.optimismPortalImpl == _doi.optimismPortalImpl(), "OPCMI-130");
require(implementations.systemConfigImpl == _doi.systemConfigImpl(), "OPCMI-140"); require(implementations.systemConfigImpl == _doi.systemConfigImpl(), "OPCMI-140");
......
...@@ -18,7 +18,7 @@ import { Constants as ScriptConstants } from "scripts/libraries/Constants.sol"; ...@@ -18,7 +18,7 @@ import { Constants as ScriptConstants } from "scripts/libraries/Constants.sol";
import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol"; import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol";
import { IProxy } from "interfaces/universal/IProxy.sol"; import { IProxy } from "interfaces/universal/IProxy.sol";
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IAddressManager } from "interfaces/legacy/IAddressManager.sol"; import { IAddressManager } from "interfaces/legacy/IAddressManager.sol";
import { IDelayedWETH } from "interfaces/dispute/IDelayedWETH.sol"; import { IDelayedWETH } from "interfaces/dispute/IDelayedWETH.sol";
import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol"; import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol";
...@@ -27,7 +27,6 @@ import { IFaultDisputeGame } from "interfaces/dispute/IFaultDisputeGame.sol"; ...@@ -27,7 +27,6 @@ import { IFaultDisputeGame } from "interfaces/dispute/IFaultDisputeGame.sol";
import { IPermissionedDisputeGame } from "interfaces/dispute/IPermissionedDisputeGame.sol"; import { IPermissionedDisputeGame } from "interfaces/dispute/IPermissionedDisputeGame.sol";
import { Claim, Duration, GameType, GameTypes, Hash } from "src/dispute/lib/Types.sol"; import { Claim, Duration, GameType, GameTypes, Hash } from "src/dispute/lib/Types.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol";
...@@ -47,7 +46,7 @@ contract DeployOPChainInput is BaseDeployIO { ...@@ -47,7 +46,7 @@ contract DeployOPChainInput is BaseDeployIO {
uint32 internal _basefeeScalar; uint32 internal _basefeeScalar;
uint32 internal _blobBaseFeeScalar; uint32 internal _blobBaseFeeScalar;
uint256 internal _l2ChainId; uint256 internal _l2ChainId;
OPContractsManager internal _opcm; IOPContractsManager internal _opcm;
string internal _saltMixer; string internal _saltMixer;
uint64 internal _gasLimit; uint64 internal _gasLimit;
...@@ -68,7 +67,7 @@ contract DeployOPChainInput is BaseDeployIO { ...@@ -68,7 +67,7 @@ contract DeployOPChainInput is BaseDeployIO {
else if (_sel == this.unsafeBlockSigner.selector) _unsafeBlockSigner = _addr; else if (_sel == this.unsafeBlockSigner.selector) _unsafeBlockSigner = _addr;
else if (_sel == this.proposer.selector) _proposer = _addr; else if (_sel == this.proposer.selector) _proposer = _addr;
else if (_sel == this.challenger.selector) _challenger = _addr; else if (_sel == this.challenger.selector) _challenger = _addr;
else if (_sel == this.opcm.selector) _opcm = OPContractsManager(_addr); else if (_sel == this.opcm.selector) _opcm = IOPContractsManager(_addr);
else revert("DeployOPChainInput: unknown selector"); else revert("DeployOPChainInput: unknown selector");
} }
...@@ -174,7 +173,7 @@ contract DeployOPChainInput is BaseDeployIO { ...@@ -174,7 +173,7 @@ contract DeployOPChainInput is BaseDeployIO {
return abi.encode(ScriptConstants.DEFAULT_OUTPUT_ROOT()); return abi.encode(ScriptConstants.DEFAULT_OUTPUT_ROOT());
} }
function opcm() public view returns (OPContractsManager) { function opcm() public view returns (IOPContractsManager) {
require(address(_opcm) != address(0), "DeployOPChainInput: not set"); require(address(_opcm) != address(0), "DeployOPChainInput: not set");
DeployUtils.assertValidContractAddress(address(_opcm)); DeployUtils.assertValidContractAddress(address(_opcm));
return _opcm; return _opcm;
...@@ -339,9 +338,9 @@ contract DeployOPChain is Script { ...@@ -339,9 +338,9 @@ contract DeployOPChain is Script {
// -------- Core Deployment Methods -------- // -------- Core Deployment Methods --------
function run(DeployOPChainInput _doi, DeployOPChainOutput _doo) public { function run(DeployOPChainInput _doi, DeployOPChainOutput _doo) public {
OPContractsManager opcm = _doi.opcm(); IOPContractsManager opcm = _doi.opcm();
OPContractsManager.Roles memory roles = OPContractsManager.Roles({ IOPContractsManager.Roles memory roles = IOPContractsManager.Roles({
opChainProxyAdminOwner: _doi.opChainProxyAdminOwner(), opChainProxyAdminOwner: _doi.opChainProxyAdminOwner(),
systemConfigOwner: _doi.systemConfigOwner(), systemConfigOwner: _doi.systemConfigOwner(),
batcher: _doi.batcher(), batcher: _doi.batcher(),
...@@ -349,7 +348,7 @@ contract DeployOPChain is Script { ...@@ -349,7 +348,7 @@ contract DeployOPChain is Script {
proposer: _doi.proposer(), proposer: _doi.proposer(),
challenger: _doi.challenger() challenger: _doi.challenger()
}); });
OPContractsManager.DeployInput memory deployInput = OPContractsManager.DeployInput({ IOPContractsManager.DeployInput memory deployInput = IOPContractsManager.DeployInput({
roles: roles, roles: roles,
basefeeScalar: _doi.basefeeScalar(), basefeeScalar: _doi.basefeeScalar(),
blobBasefeeScalar: _doi.blobBaseFeeScalar(), blobBasefeeScalar: _doi.blobBaseFeeScalar(),
...@@ -366,7 +365,7 @@ contract DeployOPChain is Script { ...@@ -366,7 +365,7 @@ contract DeployOPChain is Script {
}); });
vm.broadcast(msg.sender); vm.broadcast(msg.sender);
OPContractsManager.DeployOutput memory deployOutput = opcm.deploy(deployInput); IOPContractsManager.DeployOutput memory deployOutput = opcm.deploy(deployInput);
vm.label(address(deployOutput.opChainProxyAdmin), "opChainProxyAdmin"); vm.label(address(deployOutput.opChainProxyAdmin), "opChainProxyAdmin");
vm.label(address(deployOutput.addressManager), "addressManager"); vm.label(address(deployOutput.addressManager), "addressManager");
...@@ -468,7 +467,7 @@ contract DeployOPChain is Script { ...@@ -468,7 +467,7 @@ contract DeployOPChain is Script {
"DPG-20" "DPG-20"
); );
OPContractsManager opcm = _doi.opcm(); IOPContractsManager opcm = _doi.opcm();
address mipsImpl = opcm.implementations().mipsImpl; address mipsImpl = opcm.implementations().mipsImpl;
require(game.vm() == IBigStepper(mipsImpl), "DPG-30"); require(game.vm() == IBigStepper(mipsImpl), "DPG-30");
......
...@@ -7,21 +7,21 @@ import { Script } from "forge-std/Script.sol"; ...@@ -7,21 +7,21 @@ import { Script } from "forge-std/Script.sol";
import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; import { DeployUtils } from "scripts/libraries/DeployUtils.sol";
import { DeployOPChainOutput } from "scripts/deploy/DeployOPChain.s.sol"; import { DeployOPChainOutput } from "scripts/deploy/DeployOPChain.s.sol";
import { IMIPS } from "interfaces/cannon/IMIPS.sol"; import { IMIPS } from "interfaces/cannon/IMIPS.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IAddressManager } from "interfaces/legacy/IAddressManager.sol"; import { IAddressManager } from "interfaces/legacy/IAddressManager.sol";
import { IStaticL1ChugSplashProxy } from "interfaces/legacy/IL1ChugSplashProxy.sol"; import { IStaticL1ChugSplashProxy } from "interfaces/legacy/IL1ChugSplashProxy.sol";
contract ReadImplementationAddressesInput is DeployOPChainOutput { contract ReadImplementationAddressesInput is DeployOPChainOutput {
OPContractsManager internal _opcm; IOPContractsManager internal _opcm;
function set(bytes4 _sel, address _addr) public override { function set(bytes4 _sel, address _addr) public override {
require(_addr != address(0), "ReadImplementationAddressesInput: cannot set zero address"); require(_addr != address(0), "ReadImplementationAddressesInput: cannot set zero address");
if (_sel == this.opcm.selector) _opcm = OPContractsManager(_addr); if (_sel == this.opcm.selector) _opcm = IOPContractsManager(_addr);
else if (_sel == this.addressManager.selector) _addressManager = IAddressManager(_addr); else if (_sel == this.addressManager.selector) _addressManager = IAddressManager(_addr);
else super.set(_sel, _addr); else super.set(_sel, _addr);
} }
function opcm() public view returns (OPContractsManager) { function opcm() public view returns (IOPContractsManager) {
DeployUtils.assertValidContractAddress(address(_opcm)); DeployUtils.assertValidContractAddress(address(_opcm));
return _opcm; return _opcm;
} }
......
...@@ -12,7 +12,7 @@ import { IAnchorStateRegistry } from "interfaces/dispute/IAnchorStateRegistry.so ...@@ -12,7 +12,7 @@ import { IAnchorStateRegistry } from "interfaces/dispute/IAnchorStateRegistry.so
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol"; import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol"; import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol";
...@@ -80,7 +80,7 @@ contract DeployImplementationsOutput_Test is Test { ...@@ -80,7 +80,7 @@ contract DeployImplementationsOutput_Test is Test {
} }
function test_set_succeeds() public { function test_set_succeeds() public {
OPContractsManager opcm = OPContractsManager(address(makeAddr("opcm"))); IOPContractsManager opcm = IOPContractsManager(address(makeAddr("opcm")));
IOptimismPortal2 optimismPortalImpl = IOptimismPortal2(payable(makeAddr("optimismPortalImpl"))); IOptimismPortal2 optimismPortalImpl = IOptimismPortal2(payable(makeAddr("optimismPortalImpl")));
IDelayedWETH delayedWETHImpl = IDelayedWETH(payable(makeAddr("delayedWETHImpl"))); IDelayedWETH delayedWETHImpl = IDelayedWETH(payable(makeAddr("delayedWETHImpl")));
IPreimageOracle preimageOracleSingleton = IPreimageOracle(makeAddr("preimageOracleSingleton")); IPreimageOracle preimageOracleSingleton = IPreimageOracle(makeAddr("preimageOracleSingleton"));
......
...@@ -3,7 +3,7 @@ pragma solidity 0.8.15; ...@@ -3,7 +3,7 @@ pragma solidity 0.8.15;
import { Test } from "forge-std/Test.sol"; import { Test } from "forge-std/Test.sol";
import { DeployOPCM, DeployOPCMInput, DeployOPCMOutput } from "scripts/deploy/DeployOPCM.s.sol"; import { DeployOPCM, DeployOPCMInput, DeployOPCMOutput } from "scripts/deploy/DeployOPCM.s.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol"; import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol"; import { IProtocolVersions } from "interfaces/L1/IProtocolVersions.sol";
...@@ -181,7 +181,7 @@ contract DeployOPCMOutput_Test is Test { ...@@ -181,7 +181,7 @@ contract DeployOPCMOutput_Test is Test {
} }
function test_set_succeeds() public { function test_set_succeeds() public {
OPContractsManager opcm = OPContractsManager(makeAddr("opcm")); IOPContractsManager opcm = IOPContractsManager(makeAddr("opcm"));
vm.etch(address(opcm), hex"01"); vm.etch(address(opcm), hex"01");
doo.set(doo.opcm.selector, address(opcm)); doo.set(doo.opcm.selector, address(opcm));
......
...@@ -24,7 +24,7 @@ import { IResolvedDelegateProxy } from "interfaces/legacy/IResolvedDelegateProxy ...@@ -24,7 +24,7 @@ import { IResolvedDelegateProxy } from "interfaces/legacy/IResolvedDelegateProxy
import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol"; import { ISuperchainConfig } from "interfaces/L1/ISuperchainConfig.sol";
import { IProtocolVersions, ProtocolVersion } from "interfaces/L1/IProtocolVersions.sol"; import { IProtocolVersions, ProtocolVersion } from "interfaces/L1/IProtocolVersions.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IProxy } from "interfaces/universal/IProxy.sol"; import { IProxy } from "interfaces/universal/IProxy.sol";
import { Claim, Duration, GameType, GameTypes, Hash, OutputRoot } from "src/dispute/lib/Types.sol"; import { Claim, Duration, GameType, GameTypes, Hash, OutputRoot } from "src/dispute/lib/Types.sol";
...@@ -328,7 +328,7 @@ contract DeployOPChain_TestBase is Test { ...@@ -328,7 +328,7 @@ contract DeployOPChain_TestBase is Test {
uint32 blobBaseFeeScalar = 200; uint32 blobBaseFeeScalar = 200;
uint256 l2ChainId = 300; uint256 l2ChainId = 300;
OutputRoot startingAnchorRoot = OutputRoot({ root: Hash.wrap(keccak256("defaultOutputRoot")), l2BlockNumber: 400 }); OutputRoot startingAnchorRoot = OutputRoot({ root: Hash.wrap(keccak256("defaultOutputRoot")), l2BlockNumber: 400 });
OPContractsManager opcm = OPContractsManager(address(0)); IOPContractsManager opcm = IOPContractsManager(address(0));
string saltMixer = "defaultSaltMixer"; string saltMixer = "defaultSaltMixer";
uint64 gasLimit = 60_000_000; uint64 gasLimit = 60_000_000;
// Configurable dispute game parameters. // Configurable dispute game parameters.
......
...@@ -21,7 +21,7 @@ import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol" ...@@ -21,7 +21,7 @@ import { IDisputeGameFactory } from "interfaces/dispute/IDisputeGameFactory.sol"
import { IAddressManager } from "interfaces/legacy/IAddressManager.sol"; import { IAddressManager } from "interfaces/legacy/IAddressManager.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol"; import { IProxyAdmin } from "interfaces/universal/IProxyAdmin.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
/// @title ForkLive /// @title ForkLive
/// @notice This script is called by Setup.sol as a preparation step for the foundry test suite, and is run as an /// @notice This script is called by Setup.sol as a preparation step for the foundry test suite, and is run as an
...@@ -141,7 +141,7 @@ contract ForkLive is Deployer { ...@@ -141,7 +141,7 @@ contract ForkLive is Deployer {
/// @notice Upgrades the contracts using the OPCM. /// @notice Upgrades the contracts using the OPCM.
function _upgrade() internal { function _upgrade() internal {
OPContractsManager opcm = OPContractsManager(artifacts.mustGetAddress("OPContractsManager")); IOPContractsManager opcm = IOPContractsManager(artifacts.mustGetAddress("OPContractsManager"));
ISystemConfig systemConfig = ISystemConfig(artifacts.mustGetAddress("SystemConfigProxy")); ISystemConfig systemConfig = ISystemConfig(artifacts.mustGetAddress("SystemConfigProxy"));
IProxyAdmin proxyAdmin = IProxyAdmin(EIP1967Helper.getAdmin(address(systemConfig))); IProxyAdmin proxyAdmin = IProxyAdmin(EIP1967Helper.getAdmin(address(systemConfig)));
...@@ -149,13 +149,13 @@ contract ForkLive is Deployer { ...@@ -149,13 +149,13 @@ contract ForkLive is Deployer {
address upgrader = proxyAdmin.owner(); address upgrader = proxyAdmin.owner();
vm.label(upgrader, "ProxyAdmin Owner"); vm.label(upgrader, "ProxyAdmin Owner");
OPContractsManager.OpChain[] memory opChains = new OPContractsManager.OpChain[](1); IOPContractsManager.OpChain[] memory opChains = new IOPContractsManager.OpChain[](1);
opChains[0] = OPContractsManager.OpChain({ systemConfigProxy: systemConfig, proxyAdmin: proxyAdmin }); opChains[0] = IOPContractsManager.OpChain({ systemConfigProxy: systemConfig, proxyAdmin: proxyAdmin });
// TODO Migrate from DelegateCaller to a Safe to reduce risk of mocks not properly // TODO Migrate from DelegateCaller to a Safe to reduce risk of mocks not properly
// reflecting the production system. // reflecting the production system.
vm.etch(upgrader, vm.getDeployedCode("test/mocks/Callers.sol:DelegateCaller")); vm.etch(upgrader, vm.getDeployedCode("test/mocks/Callers.sol:DelegateCaller"));
DelegateCaller(upgrader).dcForward(address(opcm), abi.encodeCall(OPContractsManager.upgrade, (opChains))); DelegateCaller(upgrader).dcForward(address(opcm), abi.encodeCall(IOPContractsManager.upgrade, (opChains)));
} }
/// @notice Saves the proxy and implementation addresses for a contract name /// @notice Saves the proxy and implementation addresses for a contract name
......
...@@ -20,10 +20,8 @@ import { Preinstalls } from "src/libraries/Preinstalls.sol"; ...@@ -20,10 +20,8 @@ import { Preinstalls } from "src/libraries/Preinstalls.sol";
import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol";
import { Chains } from "scripts/libraries/Chains.sol"; import { Chains } from "scripts/libraries/Chains.sol";
// Contracts (TODO: move to interfaces)
import { OPContractsManager } from "src/L1/OPContractsManager.sol";
// Interfaces // Interfaces
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "interfaces/L1/IL1CrossDomainMessenger.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
...@@ -107,7 +105,7 @@ contract Setup { ...@@ -107,7 +105,7 @@ contract Setup {
IProtocolVersions protocolVersions; IProtocolVersions protocolVersions;
ISuperchainConfig superchainConfig; ISuperchainConfig superchainConfig;
IDataAvailabilityChallenge dataAvailabilityChallenge; IDataAvailabilityChallenge dataAvailabilityChallenge;
OPContractsManager opcm; IOPContractsManager opcm;
// L2 contracts // L2 contracts
IL2CrossDomainMessenger l2CrossDomainMessenger = IL2CrossDomainMessenger l2CrossDomainMessenger =
...@@ -229,7 +227,7 @@ contract Setup { ...@@ -229,7 +227,7 @@ contract Setup {
anchorStateRegistry = IAnchorStateRegistry(artifacts.mustGetAddress("AnchorStateRegistryProxy")); anchorStateRegistry = IAnchorStateRegistry(artifacts.mustGetAddress("AnchorStateRegistryProxy"));
disputeGameFactory = IDisputeGameFactory(artifacts.mustGetAddress("DisputeGameFactoryProxy")); disputeGameFactory = IDisputeGameFactory(artifacts.mustGetAddress("DisputeGameFactoryProxy"));
delayedWeth = IDelayedWETH(artifacts.mustGetAddress("DelayedWETHProxy")); delayedWeth = IDelayedWETH(artifacts.mustGetAddress("DelayedWETHProxy"));
opcm = OPContractsManager(artifacts.mustGetAddress("OPContractsManager")); opcm = IOPContractsManager(artifacts.mustGetAddress("OPContractsManager"));
if (deploy.cfg().useAltDA()) { if (deploy.cfg().useAltDA()) {
dataAvailabilityChallenge = dataAvailabilityChallenge =
......
...@@ -8,10 +8,8 @@ import { console2 as console } from "forge-std/console2.sol"; ...@@ -8,10 +8,8 @@ import { console2 as console } from "forge-std/console2.sol";
// Scripts // Scripts
import { ForgeArtifacts, Abi, AbiEntry } from "scripts/libraries/ForgeArtifacts.sol"; import { ForgeArtifacts, Abi, AbiEntry } from "scripts/libraries/ForgeArtifacts.sol";
// Contracts
import { OPContractsManager } from "src/L1/OPContractsManager.sol";
// Interfaces // Interfaces
import { IOPContractsManager } from "interfaces/L1/IOPContractsManager.sol";
import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol"; import { IOptimismPortal2 } from "interfaces/L1/IOptimismPortal2.sol";
import { IOptimismPortalInterop } from "interfaces/L1/IOptimismPortalInterop.sol"; import { IOptimismPortalInterop } from "interfaces/L1/IOptimismPortalInterop.sol";
import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol"; import { ISystemConfig } from "interfaces/L1/ISystemConfig.sol";
...@@ -781,24 +779,24 @@ contract Specification_Test is CommonTest { ...@@ -781,24 +779,24 @@ contract Specification_Test is CommonTest {
_addSpec({ _name: "OPContractsManager", _sel: _getSel("superchainConfig()") }); _addSpec({ _name: "OPContractsManager", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "OPContractsManager", _sel: _getSel("protocolVersions()") }); _addSpec({ _name: "OPContractsManager", _sel: _getSel("protocolVersions()") });
_addSpec({ _name: "OPContractsManager", _sel: _getSel("l1ContractsRelease()") }); _addSpec({ _name: "OPContractsManager", _sel: _getSel("l1ContractsRelease()") });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.deploy.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.deploy.selector });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.blueprints.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.blueprints.selector });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.chainIdToBatchInboxAddress.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.chainIdToBatchInboxAddress.selector });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.implementations.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.implementations.selector });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.upgrade.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.upgrade.selector });
_addSpec({ _name: "OPContractsManager", _sel: OPContractsManager.addGameType.selector }); _addSpec({ _name: "OPContractsManager", _sel: IOPContractsManager.addGameType.selector });
// OPContractsManagerInterop // OPContractsManagerInterop
_addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("version()") }); _addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("version()") });
_addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("superchainConfig()") }); _addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("superchainConfig()") });
_addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("protocolVersions()") }); _addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("protocolVersions()") });
_addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("l1ContractsRelease()") }); _addSpec({ _name: "OPContractsManagerInterop", _sel: _getSel("l1ContractsRelease()") });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.deploy.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.deploy.selector });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.blueprints.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.blueprints.selector });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.chainIdToBatchInboxAddress.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.chainIdToBatchInboxAddress.selector });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.implementations.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.implementations.selector });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.upgrade.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.upgrade.selector });
_addSpec({ _name: "OPContractsManagerInterop", _sel: OPContractsManager.addGameType.selector }); _addSpec({ _name: "OPContractsManagerInterop", _sel: IOPContractsManager.addGameType.selector });
// DeputyGuardianModule // DeputyGuardianModule
_addSpec({ _addSpec({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment