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