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

use interfaces in opcm contracts (#12217)

* use interfaces in opcm contracts

* fix change

* fix encodeConstructor omission

* fix wrong interface usage

* fix change

* fix change

* remove commented fn

* fix semver conflict issue
parent d8cde654
...@@ -73,6 +73,7 @@ EXCLUDE_CONTRACTS=( ...@@ -73,6 +73,7 @@ EXCLUDE_CONTRACTS=(
"IDelayedWETH" "IDelayedWETH"
"IL2ToL2CrossDomainMessenger" "IL2ToL2CrossDomainMessenger"
"ICrossL2Inbox" "ICrossL2Inbox"
"ISystemConfigInterop"
# Solidity complains about receive but contract doens't have it. # Solidity complains about receive but contract doens't have it.
"IResolvedDelegateProxy" "IResolvedDelegateProxy"
......
...@@ -15,7 +15,6 @@ import { Chains } from "scripts/libraries/Chains.sol"; ...@@ -15,7 +15,6 @@ import { Chains } from "scripts/libraries/Chains.sol";
import { Config } from "scripts/libraries/Config.sol"; import { Config } from "scripts/libraries/Config.sol";
import { LibStateDiff } from "scripts/libraries/LibStateDiff.sol"; import { LibStateDiff } from "scripts/libraries/LibStateDiff.sol";
import { Process } from "scripts/libraries/Process.sol"; import { Process } from "scripts/libraries/Process.sol";
import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol";
import { ChainAssertions } from "scripts/deploy/ChainAssertions.sol"; import { ChainAssertions } from "scripts/deploy/ChainAssertions.sol";
import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; import { DeployUtils } from "scripts/libraries/DeployUtils.sol";
...@@ -25,9 +24,8 @@ import { StorageSetter } from "src/universal/StorageSetter.sol"; ...@@ -25,9 +24,8 @@ import { StorageSetter } from "src/universal/StorageSetter.sol";
// Libraries // Libraries
import { Constants } from "src/libraries/Constants.sol"; import { Constants } from "src/libraries/Constants.sol";
import { Predeploys } from "src/libraries/Predeploys.sol";
import { Types } from "scripts/libraries/Types.sol"; import { Types } from "scripts/libraries/Types.sol";
import { LibClaim, Duration } from "src/dispute/lib/LibUDT.sol"; import { Duration } from "src/dispute/lib/LibUDT.sol";
import "src/dispute/lib/Types.sol"; import "src/dispute/lib/Types.sol";
// Interfaces // Interfaces
...@@ -53,7 +51,6 @@ import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol" ...@@ -53,7 +51,6 @@ import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol"
import { IPermissionedDisputeGame } from "src/dispute/interfaces/IPermissionedDisputeGame.sol"; import { IPermissionedDisputeGame } from "src/dispute/interfaces/IPermissionedDisputeGame.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { IMIPS } from "src/cannon/interfaces/IMIPS.sol";
import { IMIPS2 } from "src/cannon/interfaces/IMIPS2.sol"; import { IMIPS2 } from "src/cannon/interfaces/IMIPS2.sol";
import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol"; import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol";
import { IOptimismMintableERC20Factory } from "src/universal/interfaces/IOptimismMintableERC20Factory.sol"; import { IOptimismMintableERC20Factory } from "src/universal/interfaces/IOptimismMintableERC20Factory.sol";
......
...@@ -10,7 +10,7 @@ import "src/dispute/lib/Types.sol"; ...@@ -10,7 +10,7 @@ import "src/dispute/lib/Types.sol";
// Interfaces // Interfaces
import { IProxy } from "src/universal/interfaces/IProxy.sol"; import { IProxy } from "src/universal/interfaces/IProxy.sol";
import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol"; import { IMIPS } from "src/cannon/interfaces/IMIPS.sol";
import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol"; import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
......
...@@ -10,7 +10,7 @@ import "src/dispute/lib/Types.sol"; ...@@ -10,7 +10,7 @@ import "src/dispute/lib/Types.sol";
// Interfaces // Interfaces
import { IProxy } from "src/universal/interfaces/IProxy.sol"; import { IProxy } from "src/universal/interfaces/IProxy.sol";
import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol"; import { IMIPS } from "src/cannon/interfaces/IMIPS.sol";
import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol"; import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
......
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
"sourceCodeHash": "0xde4df0f9633dc0cdb1c9f634003ea5b0f7c5c1aebc407bc1b2f44c0ecf938649" "sourceCodeHash": "0xde4df0f9633dc0cdb1c9f634003ea5b0f7c5c1aebc407bc1b2f44c0ecf938649"
}, },
"src/L1/OPContractsManager.sol": { "src/L1/OPContractsManager.sol": {
"initCodeHash": "0xfaab186a660764265a837fac689a6d8602454c6ca9f39b5244282768b8d86b3a", "initCodeHash": "0x44fa611dcacad2f61c8ca7ef970e580800b5070d10f9a2a4c04459d6cf4cd180",
"sourceCodeHash": "0x831b7268e1beb93050dbaae1e83e17635385bd101779146a95150084f69d2835" "sourceCodeHash": "0xe66886dd90cef90525f5ba2310c9e9d2d910c81c283f9b7cbfcd57c5091473c6"
}, },
"src/L1/OptimismPortal.sol": { "src/L1/OptimismPortal.sol": {
"initCodeHash": "0xbe2c0c81b3459014f287d8c89cdc0d27dde5d1f44e5d024fa1e4773ddc47c190", "initCodeHash": "0xbe2c0c81b3459014f287d8c89cdc0d27dde5d1f44e5d024fa1e4773ddc47c190",
......
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
{ {
"components": [ "components": [
{ {
"internalType": "contract ProxyAdmin", "internalType": "contract IProxyAdmin",
"name": "opChainProxyAdmin", "name": "opChainProxyAdmin",
"type": "address" "type": "address"
}, },
...@@ -204,7 +204,7 @@ ...@@ -204,7 +204,7 @@
"type": "address" "type": "address"
}, },
{ {
"internalType": "contract OptimismMintableERC20Factory", "internalType": "contract IOptimismMintableERC20Factory",
"name": "optimismMintableERC20FactoryProxy", "name": "optimismMintableERC20FactoryProxy",
"type": "address" "type": "address"
}, },
......
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
{ {
"components": [ "components": [
{ {
"internalType": "contract ProxyAdmin", "internalType": "contract IProxyAdmin",
"name": "opChainProxyAdmin", "name": "opChainProxyAdmin",
"type": "address" "type": "address"
}, },
...@@ -204,7 +204,7 @@ ...@@ -204,7 +204,7 @@
"type": "address" "type": "address"
}, },
{ {
"internalType": "contract OptimismMintableERC20Factory", "internalType": "contract IOptimismMintableERC20Factory",
"name": "optimismMintableERC20FactoryProxy", "name": "optimismMintableERC20FactoryProxy",
"type": "address" "type": "address"
}, },
......
...@@ -15,10 +15,7 @@ import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol"; ...@@ -15,10 +15,7 @@ import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol";
import { ISystemConfigV160 } from "src/L1/interfaces/ISystemConfigV160.sol"; import { ISystemConfigV160 } from "src/L1/interfaces/ISystemConfigV160.sol";
import { IAddressManager } from "src/legacy/interfaces/IAddressManager.sol"; import { IAddressManager } from "src/legacy/interfaces/IAddressManager.sol";
import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { IProxyAdmin } from "src/universal/interfaces/IProxyAdmin.sol";
import { L1ChugSplashProxy } from "src/legacy/L1ChugSplashProxy.sol";
import { ResolvedDelegateProxy } from "src/legacy/ResolvedDelegateProxy.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol"; import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol";
...@@ -35,7 +32,7 @@ import { ISystemConfigV160 } from "src/L1/interfaces/ISystemConfigV160.sol"; ...@@ -35,7 +32,7 @@ import { ISystemConfigV160 } from "src/L1/interfaces/ISystemConfigV160.sol";
import { IL1CrossDomainMessenger } from "src/L1/interfaces/IL1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "src/L1/interfaces/IL1CrossDomainMessenger.sol";
import { IL1ERC721Bridge } from "src/L1/interfaces/IL1ERC721Bridge.sol"; import { IL1ERC721Bridge } from "src/L1/interfaces/IL1ERC721Bridge.sol";
import { IL1StandardBridge } from "src/L1/interfaces/IL1StandardBridge.sol"; import { IL1StandardBridge } from "src/L1/interfaces/IL1StandardBridge.sol";
import { OptimismMintableERC20Factory } from "src/universal/OptimismMintableERC20Factory.sol"; import { IOptimismMintableERC20Factory } from "src/universal/interfaces/IOptimismMintableERC20Factory.sol";
/// @custom:proxied true /// @custom:proxied true
contract OPContractsManager is ISemver, Initializable { contract OPContractsManager is ISemver, Initializable {
...@@ -67,11 +64,11 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -67,11 +64,11 @@ contract OPContractsManager is ISemver, Initializable {
/// @notice The full set of outputs from deploying a new OP Stack chain. /// @notice The full set of outputs from deploying a new OP Stack chain.
struct DeployOutput { struct DeployOutput {
ProxyAdmin opChainProxyAdmin; IProxyAdmin opChainProxyAdmin;
IAddressManager addressManager; IAddressManager addressManager;
IL1ERC721Bridge l1ERC721BridgeProxy; IL1ERC721Bridge l1ERC721BridgeProxy;
ISystemConfig systemConfigProxy; ISystemConfig systemConfigProxy;
OptimismMintableERC20Factory optimismMintableERC20FactoryProxy; IOptimismMintableERC20Factory optimismMintableERC20FactoryProxy;
IL1StandardBridge l1StandardBridgeProxy; IL1StandardBridge l1StandardBridgeProxy;
IL1CrossDomainMessenger l1CrossDomainMessengerProxy; IL1CrossDomainMessenger l1CrossDomainMessengerProxy;
// Fault proof contracts below. // Fault proof contracts below.
...@@ -125,8 +122,8 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -125,8 +122,8 @@ contract OPContractsManager is ISemver, Initializable {
// -------- Constants and Variables -------- // -------- Constants and Variables --------
/// @custom:semver 1.0.0-beta.18 /// @custom:semver 1.0.0-beta.19
string public constant version = "1.0.0-beta.18"; string public constant version = "1.0.0-beta.19";
/// @notice Represents the interface version so consumers know how to decode the DeployOutput struct /// @notice Represents the interface version so consumers know how to decode the DeployOutput struct
/// that's emitted in the `Deployed` event. Whenever that struct changes, a new version should be used. /// that's emitted in the `Deployed` event. Whenever that struct changes, a new version should be used.
...@@ -237,7 +234,7 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -237,7 +234,7 @@ contract OPContractsManager is ISemver, Initializable {
// due to it's usage of the legacy ResolvedDelegateProxy. // due to it's usage of the legacy ResolvedDelegateProxy.
output.addressManager = IAddressManager(Blueprint.deployFrom(blueprint.addressManager, salt)); output.addressManager = IAddressManager(Blueprint.deployFrom(blueprint.addressManager, salt));
output.opChainProxyAdmin = output.opChainProxyAdmin =
ProxyAdmin(Blueprint.deployFrom(blueprint.proxyAdmin, salt, abi.encode(address(this)))); IProxyAdmin(Blueprint.deployFrom(blueprint.proxyAdmin, salt, abi.encode(address(this))));
output.opChainProxyAdmin.setAddressManager(output.addressManager); output.opChainProxyAdmin.setAddressManager(output.addressManager);
// -------- Deploy Proxy Contracts -------- // -------- Deploy Proxy Contracts --------
...@@ -249,7 +246,7 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -249,7 +246,7 @@ contract OPContractsManager is ISemver, Initializable {
IOptimismPortal2(payable(deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "OptimismPortal"))); IOptimismPortal2(payable(deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "OptimismPortal")));
output.systemConfigProxy = output.systemConfigProxy =
ISystemConfig(deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "SystemConfig")); ISystemConfig(deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "SystemConfig"));
output.optimismMintableERC20FactoryProxy = OptimismMintableERC20Factory( output.optimismMintableERC20FactoryProxy = IOptimismMintableERC20Factory(
deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "OptimismMintableERC20Factory") deployProxy(l2ChainId, output.opChainProxyAdmin, saltMixer, "OptimismMintableERC20Factory")
); );
output.disputeGameFactoryProxy = output.disputeGameFactoryProxy =
...@@ -261,14 +258,14 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -261,14 +258,14 @@ contract OPContractsManager is ISemver, Initializable {
output.l1StandardBridgeProxy = IL1StandardBridge( output.l1StandardBridgeProxy = IL1StandardBridge(
payable(Blueprint.deployFrom(blueprint.l1ChugSplashProxy, salt, abi.encode(output.opChainProxyAdmin))) payable(Blueprint.deployFrom(blueprint.l1ChugSplashProxy, salt, abi.encode(output.opChainProxyAdmin)))
); );
output.opChainProxyAdmin.setProxyType(address(output.l1StandardBridgeProxy), ProxyAdmin.ProxyType.CHUGSPLASH); output.opChainProxyAdmin.setProxyType(address(output.l1StandardBridgeProxy), IProxyAdmin.ProxyType.CHUGSPLASH);
string memory contractName = "OVM_L1CrossDomainMessenger"; string memory contractName = "OVM_L1CrossDomainMessenger";
output.l1CrossDomainMessengerProxy = IL1CrossDomainMessenger( output.l1CrossDomainMessengerProxy = IL1CrossDomainMessenger(
Blueprint.deployFrom(blueprint.resolvedDelegateProxy, salt, abi.encode(output.addressManager, contractName)) Blueprint.deployFrom(blueprint.resolvedDelegateProxy, salt, abi.encode(output.addressManager, contractName))
); );
output.opChainProxyAdmin.setProxyType( output.opChainProxyAdmin.setProxyType(
address(output.l1CrossDomainMessengerProxy), ProxyAdmin.ProxyType.RESOLVED address(output.l1CrossDomainMessengerProxy), IProxyAdmin.ProxyType.RESOLVED
); );
output.opChainProxyAdmin.setImplementationName(address(output.l1CrossDomainMessengerProxy), contractName); output.opChainProxyAdmin.setImplementationName(address(output.l1CrossDomainMessengerProxy), contractName);
...@@ -387,7 +384,7 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -387,7 +384,7 @@ contract OPContractsManager is ISemver, Initializable {
/// This is required because we deploy many identical proxies, so they each require a unique salt for determinism. /// This is required because we deploy many identical proxies, so they each require a unique salt for determinism.
function deployProxy( function deployProxy(
uint256 _l2ChainId, uint256 _l2ChainId,
ProxyAdmin _proxyAdmin, IProxyAdmin _proxyAdmin,
string memory _saltMixer, string memory _saltMixer,
string memory _contractName string memory _contractName
) )
...@@ -683,7 +680,7 @@ contract OPContractsManager is ISemver, Initializable { ...@@ -683,7 +680,7 @@ contract OPContractsManager is ISemver, Initializable {
/// @notice Makes an external call to the target to initialize the proxy with the specified data. /// @notice Makes an external call to the target to initialize the proxy with the specified data.
/// First performs safety checks to ensure the target, implementation, and proxy admin are valid. /// First performs safety checks to ensure the target, implementation, and proxy admin are valid.
function upgradeAndCall( function upgradeAndCall(
ProxyAdmin _proxyAdmin, IProxyAdmin _proxyAdmin,
address _target, address _target,
address _implementation, address _implementation,
bytes memory _data bytes memory _data
......
...@@ -6,7 +6,6 @@ import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol"; ...@@ -6,7 +6,6 @@ import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol";
import { IProtocolVersions } from "src/L1/interfaces/IProtocolVersions.sol"; import { IProtocolVersions } from "src/L1/interfaces/IProtocolVersions.sol";
import { IResourceMetering } from "src/L1/interfaces/IResourceMetering.sol"; import { IResourceMetering } from "src/L1/interfaces/IResourceMetering.sol";
import { ISystemConfig } from "src/L1/interfaces/ISystemConfig.sol"; import { ISystemConfig } from "src/L1/interfaces/ISystemConfig.sol";
import { ISystemConfigInterop } from "src/L1/interfaces/ISystemConfigInterop.sol";
/// @custom:proxied true /// @custom:proxied true
contract OPContractsManagerInterop is OPContractsManager { contract OPContractsManagerInterop is OPContractsManager {
......
...@@ -28,18 +28,6 @@ interface ISystemConfigInterop { ...@@ -28,18 +28,6 @@ interface ISystemConfigInterop {
function gasPayingToken() external view returns (address addr_, uint8 decimals_); function gasPayingToken() external view returns (address addr_, uint8 decimals_);
function gasPayingTokenName() external view returns (string memory name_); function gasPayingTokenName() external view returns (string memory name_);
function gasPayingTokenSymbol() external view returns (string memory symbol_); function gasPayingTokenSymbol() external view returns (string memory symbol_);
function initialize(
address _owner,
uint32 _basefeeScalar,
uint32 _blobbasefeeScalar,
bytes32 _batcherHash,
uint64 _gasLimit,
address _unsafeBlockSigner,
IResourceMetering.ResourceConfig memory _config,
address _batchInbox,
ISystemConfig.Addresses memory _addresses
)
external;
function isCustomGasToken() external view returns (bool); function isCustomGasToken() external view returns (bool);
function l1CrossDomainMessenger() external view returns (address addr_); function l1CrossDomainMessenger() external view returns (address addr_);
function l1ERC721Bridge() external view returns (address addr_); function l1ERC721Bridge() external view returns (address addr_);
......
...@@ -7,11 +7,8 @@ import { DeployOPChainInput } from "scripts/DeployOPChain.s.sol"; ...@@ -7,11 +7,8 @@ import { DeployOPChainInput } from "scripts/DeployOPChain.s.sol";
import { DeployOPChain_TestBase } from "test/opcm/DeployOPChain.t.sol"; import { DeployOPChain_TestBase } from "test/opcm/DeployOPChain.t.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { OPContractsManager } from "src/L1/OPContractsManager.sol";
import { SuperchainConfig } from "src/L1/SuperchainConfig.sol";
import { ProtocolVersions } from "src/L1/ProtocolVersions.sol";
import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol"; import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol";
import { IProtocolVersions } from "src/L1/interfaces/IProtocolVersions.sol"; import { IProtocolVersions } from "src/L1/interfaces/IProtocolVersions.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol";
// Exposes internal functions for testing. // Exposes internal functions for testing.
contract OPContractsManager_Harness is OPContractsManager { contract OPContractsManager_Harness is OPContractsManager {
......
...@@ -2,23 +2,24 @@ ...@@ -2,23 +2,24 @@
pragma solidity 0.8.15; pragma solidity 0.8.15;
import { Test, stdStorage, StdStorage } from "forge-std/Test.sol"; import { Test, stdStorage, StdStorage } from "forge-std/Test.sol";
import { DeployUtils } from "scripts/libraries/DeployUtils.sol";
import { DelayedWETH } from "src/dispute/DelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { PreimageOracle } from "src/cannon/PreimageOracle.sol"; import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol";
import { MIPS } from "src/cannon/MIPS.sol"; import { IMIPS } from "src/cannon/interfaces/IMIPS.sol";
import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol"; import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol";
import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol";
import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { IProtocolVersions } from "src/L1/interfaces/IProtocolVersions.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { OPContractsManager } from "src/L1/OPContractsManager.sol";
import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol"; import { IOptimismPortal2 } from "src/L1/interfaces/IOptimismPortal2.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol"; import { ISystemConfig } from "src/L1/interfaces/ISystemConfig.sol";
import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "src/L1/interfaces/IL1CrossDomainMessenger.sol";
import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { IL1ERC721Bridge } from "src/L1/interfaces/IL1ERC721Bridge.sol";
import { L1StandardBridge } from "src/L1/L1StandardBridge.sol"; import { IL1StandardBridge } from "src/L1/interfaces/IL1StandardBridge.sol";
import { OptimismMintableERC20Factory } from "src/universal/OptimismMintableERC20Factory.sol"; import { IOptimismMintableERC20Factory } from "src/universal/interfaces/IOptimismMintableERC20Factory.sol";
import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { IProxyAdmin } from "src/universal/interfaces/IProxyAdmin.sol";
import { Proxy } from "src/universal/Proxy.sol"; import { IProxy } from "src/universal/interfaces/IProxy.sol";
import { import {
DeployImplementationsInput, DeployImplementationsInput,
...@@ -36,8 +37,8 @@ contract DeployImplementationsInput_Test is Test { ...@@ -36,8 +37,8 @@ contract DeployImplementationsInput_Test is Test {
uint256 proofMaturityDelaySeconds = 400; uint256 proofMaturityDelaySeconds = 400;
uint256 disputeGameFinalityDelaySeconds = 500; uint256 disputeGameFinalityDelaySeconds = 500;
string release = "dev-release"; // this means implementation contracts will be deployed string release = "dev-release"; // this means implementation contracts will be deployed
SuperchainConfig superchainConfigProxy = SuperchainConfig(makeAddr("superchainConfigProxy")); ISuperchainConfig superchainConfigProxy = ISuperchainConfig(makeAddr("superchainConfigProxy"));
ProtocolVersions protocolVersionsProxy = ProtocolVersions(makeAddr("protocolVersionsProxy")); IProtocolVersions protocolVersionsProxy = IProtocolVersions(makeAddr("protocolVersionsProxy"));
function setUp() public { function setUp() public {
dii = new DeployImplementationsInput(); dii = new DeployImplementationsInput();
...@@ -95,24 +96,29 @@ contract DeployImplementationsOutput_Test is Test { ...@@ -95,24 +96,29 @@ contract DeployImplementationsOutput_Test is Test {
} }
function test_set_succeeds() public { function test_set_succeeds() public {
Proxy proxy = new Proxy(address(0)); IProxy proxy = IProxy(
DeployUtils.create1({
_name: "Proxy",
_args: DeployUtils.encodeConstructor(abi.encodeCall(IProxy.__constructor__, (address(0))))
})
);
address opcmImpl = address(makeAddr("opcmImpl")); address opcmImpl = address(makeAddr("opcmImpl"));
vm.prank(address(0)); vm.prank(address(0));
proxy.upgradeTo(opcmImpl); proxy.upgradeTo(opcmImpl);
OPContractsManager opcmProxy = OPContractsManager(address(proxy)); OPContractsManager opcmProxy = OPContractsManager(address(proxy));
OptimismPortal2 optimismPortalImpl = OptimismPortal2(payable(makeAddr("optimismPortalImpl"))); IOptimismPortal2 optimismPortalImpl = IOptimismPortal2(payable(makeAddr("optimismPortalImpl")));
DelayedWETH delayedWETHImpl = DelayedWETH(payable(makeAddr("delayedWETHImpl"))); IDelayedWETH delayedWETHImpl = IDelayedWETH(payable(makeAddr("delayedWETHImpl")));
PreimageOracle preimageOracleSingleton = PreimageOracle(makeAddr("preimageOracleSingleton")); IPreimageOracle preimageOracleSingleton = IPreimageOracle(makeAddr("preimageOracleSingleton"));
MIPS mipsSingleton = MIPS(makeAddr("mipsSingleton")); IMIPS mipsSingleton = IMIPS(makeAddr("mipsSingleton"));
SystemConfig systemConfigImpl = SystemConfig(makeAddr("systemConfigImpl")); ISystemConfig systemConfigImpl = ISystemConfig(makeAddr("systemConfigImpl"));
L1CrossDomainMessenger l1CrossDomainMessengerImpl = IL1CrossDomainMessenger l1CrossDomainMessengerImpl =
L1CrossDomainMessenger(makeAddr("l1CrossDomainMessengerImpl")); IL1CrossDomainMessenger(makeAddr("l1CrossDomainMessengerImpl"));
L1ERC721Bridge l1ERC721BridgeImpl = L1ERC721Bridge(makeAddr("l1ERC721BridgeImpl")); IL1ERC721Bridge l1ERC721BridgeImpl = IL1ERC721Bridge(makeAddr("l1ERC721BridgeImpl"));
L1StandardBridge l1StandardBridgeImpl = L1StandardBridge(payable(makeAddr("l1StandardBridgeImpl"))); IL1StandardBridge l1StandardBridgeImpl = IL1StandardBridge(payable(makeAddr("l1StandardBridgeImpl")));
OptimismMintableERC20Factory optimismMintableERC20FactoryImpl = IOptimismMintableERC20Factory optimismMintableERC20FactoryImpl =
OptimismMintableERC20Factory(makeAddr("optimismMintableERC20FactoryImpl")); IOptimismMintableERC20Factory(makeAddr("optimismMintableERC20FactoryImpl"));
DisputeGameFactory disputeGameFactoryImpl = DisputeGameFactory(makeAddr("disputeGameFactoryImpl")); IDisputeGameFactory disputeGameFactoryImpl = IDisputeGameFactory(makeAddr("disputeGameFactoryImpl"));
vm.etch(address(opcmProxy), address(opcmProxy).code); vm.etch(address(opcmProxy), address(opcmProxy).code);
vm.etch(address(opcmImpl), hex"01"); vm.etch(address(opcmImpl), hex"01");
...@@ -240,8 +246,8 @@ contract DeployImplementations_Test is Test { ...@@ -240,8 +246,8 @@ contract DeployImplementations_Test is Test {
uint256 challengePeriodSeconds = 300; uint256 challengePeriodSeconds = 300;
uint256 proofMaturityDelaySeconds = 400; uint256 proofMaturityDelaySeconds = 400;
uint256 disputeGameFinalityDelaySeconds = 500; uint256 disputeGameFinalityDelaySeconds = 500;
SuperchainConfig superchainConfigProxy = SuperchainConfig(makeAddr("superchainConfigProxy")); ISuperchainConfig superchainConfigProxy = ISuperchainConfig(makeAddr("superchainConfigProxy"));
ProtocolVersions protocolVersionsProxy = ProtocolVersions(makeAddr("protocolVersionsProxy")); IProtocolVersions protocolVersionsProxy = IProtocolVersions(makeAddr("protocolVersionsProxy"));
function setUp() public virtual { function setUp() public virtual {
deployImplementations = new DeployImplementations(); deployImplementations = new DeployImplementations();
...@@ -401,15 +407,27 @@ contract DeployImplementations_Test is Test { ...@@ -401,15 +407,27 @@ contract DeployImplementations_Test is Test {
proofMaturityDelaySeconds = uint256(hash(_seed, 3)); proofMaturityDelaySeconds = uint256(hash(_seed, 3));
disputeGameFinalityDelaySeconds = uint256(hash(_seed, 4)); disputeGameFinalityDelaySeconds = uint256(hash(_seed, 4));
string memory release = string(bytes.concat(hash(_seed, 5))); string memory release = string(bytes.concat(hash(_seed, 5)));
protocolVersionsProxy = ProtocolVersions(address(uint160(uint256(hash(_seed, 7))))); protocolVersionsProxy = IProtocolVersions(address(uint160(uint256(hash(_seed, 7)))));
// Must configure the ProxyAdmin contract which is used to upgrade the OPCM's proxy contract. // Must configure the ProxyAdmin contract which is used to upgrade the OPCM's proxy contract.
ProxyAdmin superchainProxyAdmin = new ProxyAdmin(msg.sender); IProxyAdmin superchainProxyAdmin = IProxyAdmin(
superchainConfigProxy = SuperchainConfig(address(new Proxy(payable(address(superchainProxyAdmin))))); DeployUtils.create1({
_name: "ProxyAdmin",
SuperchainConfig superchainConfigImpl = SuperchainConfig(address(uint160(uint256(hash(_seed, 6))))); _args: DeployUtils.encodeConstructor(abi.encodeCall(IProxyAdmin.__constructor__, (msg.sender)))
})
);
superchainConfigProxy = ISuperchainConfig(
DeployUtils.create1({
_name: "Proxy",
_args: DeployUtils.encodeConstructor(
abi.encodeCall(IProxy.__constructor__, (address(superchainProxyAdmin)))
)
})
);
ISuperchainConfig superchainConfigImpl = ISuperchainConfig(address(uint160(uint256(hash(_seed, 6)))));
vm.prank(address(superchainProxyAdmin)); vm.prank(address(superchainProxyAdmin));
Proxy(payable(address(superchainConfigProxy))).upgradeTo(address(superchainConfigImpl)); IProxy(payable(address(superchainConfigProxy))).upgradeTo(address(superchainConfigImpl));
vm.etch(address(superchainProxyAdmin), address(superchainProxyAdmin).code); vm.etch(address(superchainProxyAdmin), address(superchainProxyAdmin).code);
vm.etch(address(superchainConfigProxy), address(superchainConfigProxy).code); vm.etch(address(superchainConfigProxy), address(superchainConfigProxy).code);
......
...@@ -11,26 +11,27 @@ import { ...@@ -11,26 +11,27 @@ import {
DeployImplementationsOutput DeployImplementationsOutput
} from "scripts/DeployImplementations.s.sol"; } from "scripts/DeployImplementations.s.sol";
import { DeployOPChainInput, DeployOPChain, DeployOPChainOutput } from "scripts/DeployOPChain.s.sol"; import { DeployOPChainInput, DeployOPChain, DeployOPChainOutput } from "scripts/DeployOPChain.s.sol";
import { DeployUtils } from "scripts/libraries/DeployUtils.sol";
import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { IProxyAdmin } from "src/universal/interfaces/IProxyAdmin.sol";
import { AddressManager } from "src/legacy/AddressManager.sol"; import { IAddressManager } from "src/legacy/interfaces/IAddressManager.sol";
import { DelayedWETH } from "src/dispute/DelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol"; import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol";
import { AnchorStateRegistry } from "src/dispute/AnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { FaultDisputeGame } from "src/dispute/FaultDisputeGame.sol"; import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
import { PermissionedDisputeGame } from "src/dispute/PermissionedDisputeGame.sol"; import { IPermissionedDisputeGame } from "src/dispute/interfaces/IPermissionedDisputeGame.sol";
import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol";
import { ProtocolVersions, ProtocolVersion } from "src/L1/ProtocolVersions.sol"; import { IProtocolVersions, ProtocolVersion } from "src/L1/interfaces/IProtocolVersions.sol";
import { OPContractsManager } from "src/L1/OPContractsManager.sol"; import { OPContractsManager } from "src/L1/OPContractsManager.sol";
import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol"; import { IOptimismPortal2 } from "src/L1/interfaces/IOptimismPortal2.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol"; import { ISystemConfig } from "src/L1/interfaces/ISystemConfig.sol";
import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { IL1CrossDomainMessenger } from "src/L1/interfaces/IL1CrossDomainMessenger.sol";
import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { IL1ERC721Bridge } from "src/L1/interfaces/IL1ERC721Bridge.sol";
import { L1StandardBridge } from "src/L1/L1StandardBridge.sol"; import { IL1StandardBridge } from "src/L1/interfaces/IL1StandardBridge.sol";
import { OptimismMintableERC20Factory } from "src/universal/OptimismMintableERC20Factory.sol"; import { IOptimismMintableERC20Factory } from "src/universal/interfaces/IOptimismMintableERC20Factory.sol";
import { Proxy } from "src/universal/Proxy.sol"; import { IProxy } from "src/universal/interfaces/IProxy.sol";
import { GameType, GameTypes, Hash, OutputRoot } from "src/dispute/lib/Types.sol"; import { GameType, GameTypes, Hash, OutputRoot } from "src/dispute/lib/Types.sol";
...@@ -54,8 +55,13 @@ contract DeployOPChainInput_Test is Test { ...@@ -54,8 +55,13 @@ contract DeployOPChainInput_Test is Test {
doi = new DeployOPChainInput(); doi = new DeployOPChainInput();
} }
function buildOpcmProxy() public returns (Proxy opcmProxy) { function buildOpcmProxy() public returns (IProxy opcmProxy) {
opcmProxy = new Proxy(address(0)); opcmProxy = IProxy(
DeployUtils.create1({
_name: "Proxy",
_args: DeployUtils.encodeConstructor(abi.encodeCall(IProxy.__constructor__, (address(0))))
})
);
OPContractsManager opcmImpl = OPContractsManager(address(makeAddr("opcmImpl"))); OPContractsManager opcmImpl = OPContractsManager(address(makeAddr("opcmImpl")));
vm.prank(address(0)); vm.prank(address(0));
opcmProxy.upgradeTo(address(opcmImpl)); opcmProxy.upgradeTo(address(opcmImpl));
...@@ -74,7 +80,7 @@ contract DeployOPChainInput_Test is Test { ...@@ -74,7 +80,7 @@ contract DeployOPChainInput_Test is Test {
doi.set(doi.blobBaseFeeScalar.selector, blobBaseFeeScalar); doi.set(doi.blobBaseFeeScalar.selector, blobBaseFeeScalar);
doi.set(doi.l2ChainId.selector, l2ChainId); doi.set(doi.l2ChainId.selector, l2ChainId);
(Proxy opcmProxy) = buildOpcmProxy(); (IProxy opcmProxy) = buildOpcmProxy();
doi.set(doi.opcmProxy.selector, address(opcmProxy)); doi.set(doi.opcmProxy.selector, address(opcmProxy));
// Compare the default inputs to the getter methods. // Compare the default inputs to the getter methods.
...@@ -127,21 +133,22 @@ contract DeployOPChainOutput_Test is Test { ...@@ -127,21 +133,22 @@ contract DeployOPChainOutput_Test is Test {
// Define default outputs to set. // Define default outputs to set.
// We set these in storage because doing it locally in test_set_succeeds results in stack too deep. // We set these in storage because doing it locally in test_set_succeeds results in stack too deep.
ProxyAdmin opChainProxyAdmin = ProxyAdmin(makeAddr("optimismPortal2Impl")); IProxyAdmin opChainProxyAdmin = IProxyAdmin(makeAddr("optimismPortal2Impl"));
AddressManager addressManager = AddressManager(makeAddr("delayedWETHImpl")); IAddressManager addressManager = IAddressManager(makeAddr("delayedWETHImpl"));
L1ERC721Bridge l1ERC721BridgeProxy = L1ERC721Bridge(makeAddr("l1ERC721BridgeProxy")); IL1ERC721Bridge l1ERC721BridgeProxy = IL1ERC721Bridge(makeAddr("l1ERC721BridgeProxy"));
SystemConfig systemConfigProxy = SystemConfig(makeAddr("systemConfigProxy")); ISystemConfig systemConfigProxy = ISystemConfig(makeAddr("systemConfigProxy"));
OptimismMintableERC20Factory optimismMintableERC20FactoryProxy = IOptimismMintableERC20Factory optimismMintableERC20FactoryProxy =
OptimismMintableERC20Factory(makeAddr("optimismMintableERC20FactoryProxy")); IOptimismMintableERC20Factory(makeAddr("optimismMintableERC20FactoryProxy"));
L1StandardBridge l1StandardBridgeProxy = L1StandardBridge(payable(makeAddr("l1StandardBridgeProxy"))); IL1StandardBridge l1StandardBridgeProxy = IL1StandardBridge(payable(makeAddr("l1StandardBridgeProxy")));
L1CrossDomainMessenger l1CrossDomainMessengerProxy = L1CrossDomainMessenger(makeAddr("l1CrossDomainMessengerProxy")); IL1CrossDomainMessenger l1CrossDomainMessengerProxy =
OptimismPortal2 optimismPortalProxy = OptimismPortal2(payable(makeAddr("optimismPortalProxy"))); IL1CrossDomainMessenger(makeAddr("l1CrossDomainMessengerProxy"));
DisputeGameFactory disputeGameFactoryProxy = DisputeGameFactory(makeAddr("disputeGameFactoryProxy")); IOptimismPortal2 optimismPortalProxy = IOptimismPortal2(payable(makeAddr("optimismPortalProxy")));
AnchorStateRegistry anchorStateRegistryProxy = AnchorStateRegistry(makeAddr("anchorStateRegistryProxy")); IDisputeGameFactory disputeGameFactoryProxy = IDisputeGameFactory(makeAddr("disputeGameFactoryProxy"));
AnchorStateRegistry anchorStateRegistryImpl = AnchorStateRegistry(makeAddr("anchorStateRegistryImpl")); IAnchorStateRegistry anchorStateRegistryProxy = IAnchorStateRegistry(makeAddr("anchorStateRegistryProxy"));
FaultDisputeGame faultDisputeGame = FaultDisputeGame(makeAddr("faultDisputeGame")); IAnchorStateRegistry anchorStateRegistryImpl = IAnchorStateRegistry(makeAddr("anchorStateRegistryImpl"));
PermissionedDisputeGame permissionedDisputeGame = PermissionedDisputeGame(makeAddr("permissionedDisputeGame")); IFaultDisputeGame faultDisputeGame = IFaultDisputeGame(makeAddr("faultDisputeGame"));
DelayedWETH delayedWETHPermissionedGameProxy = DelayedWETH(payable(makeAddr("delayedWETHPermissionedGameProxy"))); IPermissionedDisputeGame permissionedDisputeGame = IPermissionedDisputeGame(makeAddr("permissionedDisputeGame"));
IDelayedWETH delayedWETHPermissionedGameProxy = IDelayedWETH(payable(makeAddr("delayedWETHPermissionedGameProxy")));
// TODO: Eventually switch from Permissioned to Permissionless. // TODO: Eventually switch from Permissioned to Permissionless.
// DelayedWETH delayedWETHPermissionlessGameProxy = // DelayedWETH delayedWETHPermissionlessGameProxy =
// DelayedWETH(payable(makeAddr("delayedWETHPermissionlessGameProxy"))); // DelayedWETH(payable(makeAddr("delayedWETHPermissionlessGameProxy")));
...@@ -345,8 +352,8 @@ contract DeployOPChain_TestBase is Test { ...@@ -345,8 +352,8 @@ contract DeployOPChain_TestBase is Test {
uint256 proofMaturityDelaySeconds = 400; uint256 proofMaturityDelaySeconds = 400;
uint256 disputeGameFinalityDelaySeconds = 500; uint256 disputeGameFinalityDelaySeconds = 500;
string release = "dev-release"; // this means implementation contracts will be deployed string release = "dev-release"; // this means implementation contracts will be deployed
SuperchainConfig superchainConfigProxy; ISuperchainConfig superchainConfigProxy;
ProtocolVersions protocolVersionsProxy; IProtocolVersions protocolVersionsProxy;
// Define default inputs for DeployOPChain. // Define default inputs for DeployOPChain.
// `opcm` is set during `setUp` since it is an output of the previous step. // `opcm` is set during `setUp` since it is an output of the previous step.
...@@ -359,7 +366,7 @@ contract DeployOPChain_TestBase is Test { ...@@ -359,7 +366,7 @@ contract DeployOPChain_TestBase is Test {
uint32 basefeeScalar = 100; uint32 basefeeScalar = 100;
uint32 blobBaseFeeScalar = 200; uint32 blobBaseFeeScalar = 200;
uint256 l2ChainId = 300; uint256 l2ChainId = 300;
AnchorStateRegistry.StartingAnchorRoot[] startingAnchorRoots; IAnchorStateRegistry.StartingAnchorRoot[] startingAnchorRoots;
OPContractsManager opcm = OPContractsManager(address(0)); OPContractsManager opcm = OPContractsManager(address(0));
string saltMixer = "defaultSaltMixer"; string saltMixer = "defaultSaltMixer";
uint64 gasLimit = 30_000_000; uint64 gasLimit = 30_000_000;
...@@ -369,13 +376,13 @@ contract DeployOPChain_TestBase is Test { ...@@ -369,13 +376,13 @@ contract DeployOPChain_TestBase is Test {
uint256 cannonBlock = 400; uint256 cannonBlock = 400;
uint256 permissionedBlock = 500; uint256 permissionedBlock = 500;
startingAnchorRoots.push( startingAnchorRoots.push(
AnchorStateRegistry.StartingAnchorRoot({ IAnchorStateRegistry.StartingAnchorRoot({
gameType: GameTypes.CANNON, gameType: GameTypes.CANNON,
outputRoot: OutputRoot({ root: Hash.wrap(keccak256("defaultOutputRootCannon")), l2BlockNumber: cannonBlock }) outputRoot: OutputRoot({ root: Hash.wrap(keccak256("defaultOutputRootCannon")), l2BlockNumber: cannonBlock })
}) })
); );
startingAnchorRoots.push( startingAnchorRoots.push(
AnchorStateRegistry.StartingAnchorRoot({ IAnchorStateRegistry.StartingAnchorRoot({
gameType: GameTypes.PERMISSIONED_CANNON, gameType: GameTypes.PERMISSIONED_CANNON,
outputRoot: OutputRoot({ outputRoot: OutputRoot({
root: Hash.wrap(keccak256("defaultOutputRootPermissioned")), root: Hash.wrap(keccak256("defaultOutputRootPermissioned")),
...@@ -456,13 +463,13 @@ contract DeployOPChain_Test is DeployOPChain_TestBase { ...@@ -456,13 +463,13 @@ contract DeployOPChain_Test is DeployOPChain_TestBase {
uint256 cannonBlock = uint256(hash(_seed, 9)); uint256 cannonBlock = uint256(hash(_seed, 9));
uint256 permissionedBlock = uint256(hash(_seed, 10)); uint256 permissionedBlock = uint256(hash(_seed, 10));
startingAnchorRoots.push( startingAnchorRoots.push(
AnchorStateRegistry.StartingAnchorRoot({ IAnchorStateRegistry.StartingAnchorRoot({
gameType: GameTypes.CANNON, gameType: GameTypes.CANNON,
outputRoot: OutputRoot({ root: Hash.wrap(keccak256(abi.encode(_seed, 11))), l2BlockNumber: cannonBlock }) outputRoot: OutputRoot({ root: Hash.wrap(keccak256(abi.encode(_seed, 11))), l2BlockNumber: cannonBlock })
}) })
); );
startingAnchorRoots.push( startingAnchorRoots.push(
AnchorStateRegistry.StartingAnchorRoot({ IAnchorStateRegistry.StartingAnchorRoot({
gameType: GameTypes.PERMISSIONED_CANNON, gameType: GameTypes.PERMISSIONED_CANNON,
outputRoot: OutputRoot({ outputRoot: OutputRoot({
root: Hash.wrap(keccak256(abi.encode(_seed, 12))), root: Hash.wrap(keccak256(abi.encode(_seed, 12))),
......
...@@ -7,7 +7,7 @@ import { stdToml } from "forge-std/StdToml.sol"; ...@@ -7,7 +7,7 @@ import { stdToml } from "forge-std/StdToml.sol";
import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { ProxyAdmin } from "src/universal/ProxyAdmin.sol";
import { Proxy } from "src/universal/Proxy.sol"; import { Proxy } from "src/universal/Proxy.sol";
import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol";
import { ProtocolVersions, ProtocolVersion } from "src/L1/ProtocolVersions.sol"; import { IProtocolVersions, ProtocolVersion } from "src/L1/interfaces/IProtocolVersions.sol";
import { DeploySuperchainInput, DeploySuperchain, DeploySuperchainOutput } from "scripts/DeploySuperchain.s.sol"; import { DeploySuperchainInput, DeploySuperchain, DeploySuperchainOutput } from "scripts/DeploySuperchain.s.sol";
contract DeploySuperchainInput_Test is Test { contract DeploySuperchainInput_Test is Test {
...@@ -58,8 +58,8 @@ contract DeploySuperchainOutput_Test is Test { ...@@ -58,8 +58,8 @@ contract DeploySuperchainOutput_Test is Test {
ProxyAdmin superchainProxyAdmin = ProxyAdmin(makeAddr("superchainProxyAdmin")); ProxyAdmin superchainProxyAdmin = ProxyAdmin(makeAddr("superchainProxyAdmin"));
SuperchainConfig superchainConfigImpl = SuperchainConfig(makeAddr("superchainConfigImpl")); SuperchainConfig superchainConfigImpl = SuperchainConfig(makeAddr("superchainConfigImpl"));
SuperchainConfig superchainConfigProxy = SuperchainConfig(makeAddr("superchainConfigProxy")); SuperchainConfig superchainConfigProxy = SuperchainConfig(makeAddr("superchainConfigProxy"));
ProtocolVersions protocolVersionsImpl = ProtocolVersions(makeAddr("protocolVersionsImpl")); IProtocolVersions protocolVersionsImpl = IProtocolVersions(makeAddr("protocolVersionsImpl"));
ProtocolVersions protocolVersionsProxy = ProtocolVersions(makeAddr("protocolVersionsProxy")); IProtocolVersions protocolVersionsProxy = IProtocolVersions(makeAddr("protocolVersionsProxy"));
// Ensure each address has code, since these are expected to be contracts. // Ensure each address has code, since these are expected to be contracts.
vm.etch(address(superchainProxyAdmin), hex"01"); vm.etch(address(superchainProxyAdmin), hex"01");
......
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