Commit 16e6c26c authored by Maurelian's avatar Maurelian

feat(ctb): Update tests

feat(Update Multichain.s.sol
Update tests

Update L2OutputOracle tests
parent 09b2bd17
......@@ -139,7 +139,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
/// For now, it is critical that the first proposed output root of an OP stack
/// chain is done so by an honest party.
function test_initialize_firstOutput_reverts() public {
uint256 submissionInterval = l2OutputOracle.submissionInterval();
uint256 submissionInterval = l2OutputOracle.SUBMISSION_INTERVAL();
vm.expectRevert(abi.encodeWithSignature("Panic(uint256)", 0x11));
factory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(submissionInterval, block.number - 1));
}
......
......@@ -15,16 +15,10 @@ import { OptimismPortal } from "src/L1/OptimismPortal.sol";
contract Initializer_Test is Bridge_Initializer {
function test_cannotReinitializeL1_succeeds() public {
vm.expectRevert("Initializable: contract is already initialized");
l1CrossDomainMessenger.initialize(OptimismPortal(payable(address(0))));
l2OutputOracle.initialize(0, 0);
vm.expectRevert("Initializable: contract is already initialized");
l1StandardBridge.initialize(CrossDomainMessenger(address(0)));
vm.expectRevert("Initializable: contract is already initialized");
l2OutputOracle.initialize(0, 0, address(0), address(0));
vm.expectRevert("Initializable: contract is already initialized");
optimismPortal.initialize(L2OutputOracle(address(0)), address(0), SystemConfig(address(0)), false);
optimismPortal.initialize(false);
vm.expectRevert("Initializable: contract is already initialized");
systemConfig.initialize({
......@@ -41,20 +35,7 @@ contract Initializer_Test is Bridge_Initializer {
minimumBaseFee: 0,
systemTxMaxGas: 0,
maximumBaseFee: 0
}),
_startBlock: type(uint256).max,
_batchInbox: address(0),
_addresses: SystemConfig.Addresses({
l1CrossDomainMessenger: address(0),
l1ERC721Bridge: address(0),
l1StandardBridge: address(0),
l2OutputOracle: address(0),
optimismPortal: address(0),
optimismMintableERC20Factory: address(0)
})
});
vm.expectRevert("Initializable: contract is already initialized");
l1ERC721Bridge.initialize(CrossDomainMessenger(address(0)));
}
}
......@@ -35,8 +35,6 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer {
assertEq(address(l1StandardBridge.messenger()), address(l1CrossDomainMessenger));
assertEq(address(l1StandardBridge.OTHER_BRIDGE()), Predeploys.L2_STANDARD_BRIDGE);
assertEq(address(l2StandardBridge), Predeploys.L2_STANDARD_BRIDGE);
bytes32 slot0 = vm.load(address(l1StandardBridge), bytes32(uint256(0)));
assertEq(slot0, bytes32(uint256(Constants.INITIALIZER)));
}
}
......
......@@ -29,27 +29,29 @@ contract L2OutputOracle_constructor_Test is CommonTest {
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.proposer(), proposer);
assertEq(l2OutputOracle.CHALLENGER(), challenger);
assertEq(l2OutputOracle.challenger(), challenger);
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.submissionInterval(), submissionInterval);
assertEq(l2OutputOracle.latestBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.l2BlockTime(), l2BlockTime);
assertEq(l2OutputOracle.finalizationPeriodSeconds(), finalizationPeriodSeconds);
assertEq(l2OutputOracle.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
}
/// @dev Tests that the constructor reverts if the l2BlockTime is invalid.
function test_constructor_l2BlockTimeZero_reverts() external {
address proposer = cfg.l2OutputOracleProposer();
address challenger = cfg.l2OutputOracleChallenger();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
vm.expectRevert("L2OutputOracle: L2 block time must be greater than 0");
new L2OutputOracle({
_submissionInterval: submissionInterval,
_l2BlockTime: 0,
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: block.timestamp,
_proposer: proposer,
_challenger: challenger,
_finalizationPeriodSeconds: 7 days
});
}
......@@ -57,10 +59,17 @@ contract L2OutputOracle_constructor_Test is CommonTest {
/// @dev Tests that the constructor reverts if the submissionInterval is zero.
function test_constructor_submissionInterval_reverts() external {
uint256 l2BlockTime = cfg.l2BlockTime();
address proposer = cfg.l2OutputOracleProposer();
address challenger = cfg.l2OutputOracleChallenger();
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
vm.expectRevert("L2OutputOracle: submission interval must be greater than 0");
new L2OutputOracle({
_submissionInterval: 0,
_l2BlockTime: l2BlockTime,
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: block.timestamp,
_proposer: proposer,
_challenger: challenger,
_finalizationPeriodSeconds: 7 days
});
}
......@@ -71,12 +80,7 @@ contract L2OutputOracle_constructor_Test is CommonTest {
// so that initialize can be called again.
vm.store(address(l2OutputOracle), bytes32(uint256(0)), bytes32(uint256(0)));
vm.expectRevert("L2OutputOracle: starting L2 timestamp must be less than current time");
l2OutputOracle.initialize({
_startingBlockNumber: 0,
_startingTimestamp: block.timestamp + 1,
_proposer: address(0),
_challenger: address(0)
});
l2OutputOracle.initialize({ _startingBlockNumber: 0, _startingTimestamp: block.timestamp + 1 });
}
}
......@@ -318,7 +322,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 1);
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
vm.expectEmit(true, true, false, false);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex);
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
......@@ -346,7 +350,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 3);
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
vm.expectEmit(true, true, false, false);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex - 2);
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
......@@ -377,7 +381,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestBlockNumber = l2OutputOracle.latestBlockNumber();
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
vm.expectRevert("L2OutputOracle: cannot delete outputs after the latest output index");
l2OutputOracle.deleteL2Outputs(latestBlockNumber + 1);
}
......@@ -391,11 +395,11 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
// Delete the latest two outputs
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
// Now try to delete the same output again
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
vm.expectRevert("L2OutputOracle: cannot delete outputs after the latest output index");
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
}
......@@ -410,7 +414,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
// Try to delete a finalized output
vm.prank(l2OutputOracle.challenger());
vm.prank(l2OutputOracle.CHALLENGER());
vm.expectRevert("L2OutputOracle: cannot delete outputs that have already been finalized");
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
}
......@@ -428,35 +432,35 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.submissionInterval(), submissionInterval);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.l2BlockTime(), l2BlockTime);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.finalizationPeriodSeconds(), finalizationPeriodSeconds);
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.proposer(), proposer);
assertEq(l2OutputOracle.CHALLENGER(), challenger);
assertEq(l2OutputOracle.challenger(), challenger);
assertEq(l2OutputOracle.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
}
/// @dev Tests that the impl is created with the correct values.
function test_initValuesOnImpl_succeeds() external {
L2OutputOracle oracleImpl = L2OutputOracle(mustGetAddress("L2OutputOracle"));
address proposer = cfg.l2OutputOracleProposer();
address challenger = cfg.l2OutputOracleChallenger();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
assertEq(submissionInterval, oracleImpl.SUBMISSION_INTERVAL());
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
uint256 l2BlockTime = cfg.l2BlockTime();
assertEq(l2BlockTime, oracleImpl.L2_BLOCK_TIME());
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
// The values that are set in the initialize function should be all
// zero values in the implementation contract.
assertEq(oracleImpl.startingBlockNumber(), 0);
assertEq(oracleImpl.startingTimestamp(), 0);
assertEq(oracleImpl.PROPOSER(), address(0));
assertEq(oracleImpl.proposer(), address(0));
assertEq(oracleImpl.CHALLENGER(), address(0));
assertEq(oracleImpl.challenger(), address(0));
assertEq(oracleImpl.startingBlockNumber(), startingBlockNumber);
assertEq(oracleImpl.startingTimestamp(), startingTimestamp);
assertEq(oracleImpl.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(oracleImpl.L2_BLOCK_TIME(), l2BlockTime);
assertEq(oracleImpl.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
assertEq(oracleImpl.PROPOSER(), proposer);
assertEq(oracleImpl.CHALLENGER(), challenger);
}
/// @dev Tests that the proxy cannot be initialized twice.
......@@ -464,12 +468,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
vm.expectRevert("Initializable: contract is already initialized");
l2OutputOracle.initialize({
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: startingTimestamp,
_proposer: address(1),
_challenger: address(2)
});
l2OutputOracle.initialize({ _startingBlockNumber: startingBlockNumber, _startingTimestamp: startingTimestamp });
}
/// @dev Tests that the implementation contract cannot be initialized twice.
......@@ -478,12 +477,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
vm.expectRevert("Initializable: contract is already initialized");
oracleImpl.initialize({
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: startingTimestamp,
_proposer: address(1),
_challenger: address(2)
});
oracleImpl.initialize({ _startingBlockNumber: startingBlockNumber, _startingTimestamp: startingTimestamp });
}
/// @dev Tests that the proxy can be successfully upgraded.
......
......@@ -36,9 +36,7 @@ contract OptimismPortal_Test is CommonTest {
function test_constructor_succeeds() external {
address guardian = cfg.portalGuardian();
assertEq(address(optimismPortal.L2_ORACLE()), address(l2OutputOracle));
assertEq(address(optimismPortal.l2Oracle()), address(l2OutputOracle));
assertEq(optimismPortal.GUARDIAN(), guardian);
assertEq(optimismPortal.guardian(), guardian);
assertEq(optimismPortal.l2Sender(), 0x000000000000000000000000000000000000dEaD);
assertEq(optimismPortal.paused(), false);
}
......@@ -900,24 +898,14 @@ contract OptimismPortalUpgradeable_Test is CommonTest {
/// @dev Tests that the proxy cannot be initialized twice.
function test_initialize_cannotInitProxy_reverts() external {
vm.expectRevert("Initializable: contract is already initialized");
optimismPortal.initialize({
_l2Oracle: L2OutputOracle(address(0)),
_systemConfig: SystemConfig(address(0)),
_guardian: address(0),
_paused: false
});
optimismPortal.initialize({ _paused: false });
}
/// @dev Tests that the implementation cannot be initialized twice.
function test_initialize_cannotInitImpl_reverts() external {
address opImpl = mustGetAddress("OptimismPortal");
vm.expectRevert("Initializable: contract is already initialized");
OptimismPortal(payable(opImpl)).initialize({
_l2Oracle: L2OutputOracle(address(0)),
_systemConfig: SystemConfig(address(0)),
_guardian: address(0),
_paused: false
});
OptimismPortal(payable(opImpl)).initialize({ _paused: false });
}
/// @dev Tests that the proxy can be upgraded.
......
......@@ -10,12 +10,7 @@ import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/// @notice Simple wrapper around the StandardBridge contract that exposes
/// internal functions so they can be more easily tested directly.
contract StandardBridgeTester is StandardBridge {
constructor(
address payable _messenger,
address payable _otherBridge
)
StandardBridge(StandardBridge(_otherBridge))
{ }
constructor(address payable _messenger, address payable _otherBridge) StandardBridge(_messenger, _otherBridge) { }
function isOptimismMintableERC20(address _token) external view returns (bool) {
return _isOptimismMintableERC20(_token);
......
......@@ -45,21 +45,12 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
/// @dev Tests that initailization sets the correct values.
function test_initialize_values_succeeds() external {
assertEq(systemConfig.l1CrossDomainMessenger(), address(l1CrossDomainMessenger));
assertEq(systemConfig.l1ERC721Bridge(), address(l1ERC721Bridge));
assertEq(systemConfig.l1StandardBridge(), address(l1StandardBridge));
assertEq(systemConfig.l2OutputOracle(), address(l2OutputOracle));
assertEq(systemConfig.optimismPortal(), address(optimismPortal));
assertEq(systemConfig.optimismMintableERC20Factory(), optimismMintableERC20Factory);
assertEq(systemConfig.batchInbox(), batchInbox);
assertEq(systemConfig.owner(), owner);
assertEq(systemConfig.overhead(), overhead);
assertEq(systemConfig.scalar(), scalar);
assertEq(systemConfig.batcherHash(), batcherHash);
assertEq(systemConfig.gasLimit(), gasLimit);
assertEq(systemConfig.unsafeBlockSigner(), unsafeBlockSigner);
// Depends on start block being set to 0 in `initialize`
assertEq(systemConfig.startBlock(), block.number);
// Depends on `initialize` being called with defaults
ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG();
ResourceMetering.ResourceConfig memory actual = systemConfig.resourceConfig();
......@@ -70,139 +61,6 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
assertEq(actual.systemTxMaxGas, rcfg.systemTxMaxGas);
assertEq(actual.maximumBaseFee, rcfg.maximumBaseFee);
}
/// @dev Ensures that the start block override can be used to set the start block.
function test_initialize_startBlockOverride_succeeds() external {
uint256 startBlock = 100;
// Wipe out the initialized slot so the proxy can be initialized again
vm.store(address(systemConfig), bytes32(0), bytes32(0));
assertEq(systemConfig.startBlock(), block.number);
// the startBlock slot is 106, wipe it out
vm.store(address(systemConfig), bytes32(uint256(106)), bytes32(0));
assertEq(systemConfig.startBlock(), 0);
address admin = address(uint160(uint256(vm.load(address(systemConfig), Constants.PROXY_OWNER_ADDRESS))));
vm.prank(admin);
Proxy(payable(address(systemConfig))).upgradeToAndCall(
address(systemConfigImpl),
abi.encodeCall(
SystemConfig.initialize,
(
alice, // _owner,
overhead, // _overhead,
scalar, // _scalar,
batcherHash, // _batcherHash
gasLimit, // _gasLimit,
unsafeBlockSigner, // _unsafeBlockSigner,
Constants.DEFAULT_RESOURCE_CONFIG(), // _config,
startBlock, // _startBlock
batchInbox, // _batchInbox
SystemConfig.Addresses({ // _addresses
l1CrossDomainMessenger: address(l1CrossDomainMessenger),
l1ERC721Bridge: address(l1ERC721Bridge),
l1StandardBridge: address(l1StandardBridge),
l2OutputOracle: address(l2OutputOracle),
optimismPortal: address(optimismPortal),
optimismMintableERC20Factory: optimismMintableERC20Factory
})
)
)
);
assertEq(systemConfig.startBlock(), startBlock);
}
/// @dev Tests that initialization with start block already set is a noop.
function test_initialize_startBlockNoop_reverts() external {
// wipe out initialized slot so we can initialize again
vm.store(address(systemConfig), bytes32(0), bytes32(0));
// the startBlock slot is 106, set it to something non zero
vm.store(address(systemConfig), bytes32(uint256(106)), bytes32(uint256(0xff)));
// Initialize with a non zero start block, should see a revert
vm.prank(EIP1967Helper.getAdmin(address(systemConfig)));
// The call to initialize reverts due to: "SystemConfig: cannot override an already set start block"
// but the proxy revert message bubbles up.
Proxy(payable(address(systemConfig))).upgradeToAndCall(
address(systemConfigImpl),
abi.encodeCall(
SystemConfig.initialize,
(
alice, // _owner,
overhead, // _overhead,
scalar, // _scalar,
batcherHash, // _batcherHash
gasLimit, // _gasLimit,
unsafeBlockSigner, // _unsafeBlockSigner,
Constants.DEFAULT_RESOURCE_CONFIG(), // _config,
1, // _startBlock
batchInbox, // _batchInbox
SystemConfig.Addresses({ // _addresses
l1CrossDomainMessenger: address(l1CrossDomainMessenger),
l1ERC721Bridge: address(l1ERC721Bridge),
l1StandardBridge: address(l1StandardBridge),
l2OutputOracle: address(l2OutputOracle),
optimismPortal: address(optimismPortal),
optimismMintableERC20Factory: optimismMintableERC20Factory
})
)
)
);
// It was initialized with 1 but it was already set so the override
// should be ignored.
uint256 startBlock = systemConfig.startBlock();
assertEq(startBlock, 0xff);
}
/// @dev Ensures that the events are emitted during initialization.
function test_initialize_events_succeeds() external {
// Wipe out the initialized slot so the proxy can be initialized again
vm.store(address(systemConfig), bytes32(0), bytes32(0));
vm.store(address(systemConfig), bytes32(uint256(106)), bytes32(0));
assertEq(systemConfig.startBlock(), 0);
// The order depends here
vm.expectEmit(true, true, true, true, address(systemConfig));
emit ConfigUpdate(0, SystemConfig.UpdateType.BATCHER, abi.encode(batcherHash));
vm.expectEmit(true, true, true, true, address(systemConfig));
emit ConfigUpdate(0, SystemConfig.UpdateType.GAS_CONFIG, abi.encode(overhead, scalar));
vm.expectEmit(true, true, true, true, address(systemConfig));
emit ConfigUpdate(0, SystemConfig.UpdateType.GAS_LIMIT, abi.encode(gasLimit));
vm.expectEmit(true, true, true, true, address(systemConfig));
emit ConfigUpdate(0, SystemConfig.UpdateType.UNSAFE_BLOCK_SIGNER, abi.encode(unsafeBlockSigner));
address admin = address(uint160(uint256(vm.load(address(systemConfig), Constants.PROXY_OWNER_ADDRESS))));
vm.prank(admin);
Proxy(payable(address(systemConfig))).upgradeToAndCall(
address(systemConfigImpl),
abi.encodeCall(
SystemConfig.initialize,
(
alice, // _owner,
overhead, // _overhead,
scalar, // _scalar,
batcherHash, // _batcherHash
gasLimit, // _gasLimit,
unsafeBlockSigner, // _unsafeBlockSigner,
Constants.DEFAULT_RESOURCE_CONFIG(), // _config,
0, // _startBlock
batchInbox, // _batchInbox
SystemConfig.Addresses({ // _addresses
l1CrossDomainMessenger: address(l1CrossDomainMessenger),
l1ERC721Bridge: address(l1ERC721Bridge),
l1StandardBridge: address(l1StandardBridge),
l2OutputOracle: address(l2OutputOracle),
optimismPortal: address(optimismPortal),
optimismMintableERC20Factory: optimismMintableERC20Factory
})
)
)
);
}
}
contract SystemConfig_Initialize_TestFail is SystemConfig_Init {
......@@ -231,17 +89,7 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init {
bytes32(hex"abcd"), // _batcherHash,
minimumGasLimit - 1, // _gasLimit,
address(1), // _unsafeBlockSigner,
Constants.DEFAULT_RESOURCE_CONFIG(), // _config,
0, // _startBlock
address(0), // _batchInbox
SystemConfig.Addresses({ // _addresses
l1CrossDomainMessenger: address(0),
l1ERC721Bridge: address(0),
l1StandardBridge: address(0),
l2OutputOracle: address(0),
optimismPortal: address(0),
optimismMintableERC20Factory: address(0)
})
Constants.DEFAULT_RESOURCE_CONFIG() // _config
)
)
);
......
......@@ -12,7 +12,15 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
function setUp() external {
Proxy proxy = new Proxy(msg.sender);
SystemConfig configImpl = new SystemConfig();
SystemConfig configImpl = new SystemConfig({
_owner: address(0xbeef), // owner
_overhead: 2100, // overhead
_scalar: 1000000, // scalar
_batcherHash: bytes32(hex"abcd"), // batcher hash
_gasLimit: 30_000_000, // gas limit
_unsafeBlockSigner: address(1), // unsafe block signer
_config: Constants.DEFAULT_RESOURCE_CONFIG()
});
vm.prank(msg.sender);
proxy.upgradeToAndCall(
......@@ -26,17 +34,7 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
bytes32(hex"abcd"), // batcher hash
30_000_000, // gas limit
address(1), // unsafe block signer
Constants.DEFAULT_RESOURCE_CONFIG(), // resource config
0, //_startBlock
address(0), // _batchInbox
SystemConfig.Addresses({ // _addrs
l1CrossDomainMessenger: address(0),
l1ERC721Bridge: address(0),
l1StandardBridge: address(0),
l2OutputOracle: address(0),
optimismPortal: address(0),
optimismMintableERC20Factory: address(0)
})
Constants.DEFAULT_RESOURCE_CONFIG()
)
)
);
......
......@@ -116,18 +116,17 @@ contract Setup is Deploy {
vm.etch(address(l2ToL1MessagePasser), address(new L2ToL1MessagePasser()).code);
vm.etch(
address(l2StandardBridge), address(new L2StandardBridge(StandardBridge(payable(l1StandardBridge)))).code
);
l2StandardBridge.initialize();
vm.etch(address(l2StandardBridge), address(new L2StandardBridge(payable(l1StandardBridge))).code);
vm.etch(address(l2OptimismMintableERC20Factory), address(new OptimismMintableERC20Factory()).code);
l2OptimismMintableERC20Factory.initialize(address(l2StandardBridge));
vm.etch(address(legacyERC20ETH), address(new LegacyERC20ETH()).code);
vm.etch(address(l2ERC721Bridge), address(new L2ERC721Bridge(address(l1ERC721Bridge))).code);
l2ERC721Bridge.initialize();
vm.etch(
address(l2ERC721Bridge),
address(new L2ERC721Bridge(address(l2CrossDomainMessenger), address(l1ERC721Bridge))).code
);
vm.etch(
address(sequencerFeeVault),
......
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