Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
16e6c26c
Unverified
Commit
16e6c26c
authored
Nov 07, 2023
by
Maurelian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(ctb): Update tests
feat(Update Multichain.s.sol Update tests Update L2OutputOracle tests
parent
09b2bd17
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
58 additions
and
257 deletions
+58
-257
FaultDisputeGame.t.sol
packages/contracts-bedrock/test/FaultDisputeGame.t.sol
+1
-1
Initializable.t.sol
packages/contracts-bedrock/test/Initializable.t.sol
+2
-21
L1StandardBridge.t.sol
packages/contracts-bedrock/test/L1StandardBridge.t.sol
+0
-2
L2OutputOracle.t.sol
packages/contracts-bedrock/test/L2OutputOracle.t.sol
+36
-42
OptimismPortal.t.sol
packages/contracts-bedrock/test/OptimismPortal.t.sol
+2
-14
StandardBridge.t.sol
packages/contracts-bedrock/test/StandardBridge.t.sol
+1
-6
SystemConfig.t.sol
packages/contracts-bedrock/test/SystemConfig.t.sol
+1
-153
SystemConfig.t.sol
...ages/contracts-bedrock/test/invariants/SystemConfig.t.sol
+10
-12
Setup.sol
packages/contracts-bedrock/test/setup/Setup.sol
+5
-6
No files found.
packages/contracts-bedrock/test/FaultDisputeGame.t.sol
View file @
16e6c26c
...
@@ -139,7 +139,7 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init {
...
@@ -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
/// For now, it is critical that the first proposed output root of an OP stack
/// chain is done so by an honest party.
/// chain is done so by an honest party.
function test_initialize_firstOutput_reverts() public {
function test_initialize_firstOutput_reverts() public {
uint256 submissionInterval = l2OutputOracle.
submissionInterval
();
uint256 submissionInterval = l2OutputOracle.
SUBMISSION_INTERVAL
();
vm.expectRevert(abi.encodeWithSignature("Panic(uint256)", 0x11));
vm.expectRevert(abi.encodeWithSignature("Panic(uint256)", 0x11));
factory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(submissionInterval, block.number - 1));
factory.create(GAME_TYPE, ROOT_CLAIM, abi.encode(submissionInterval, block.number - 1));
}
}
...
...
packages/contracts-bedrock/test/Initializable.t.sol
View file @
16e6c26c
...
@@ -15,16 +15,10 @@ import { OptimismPortal } from "src/L1/OptimismPortal.sol";
...
@@ -15,16 +15,10 @@ import { OptimismPortal } from "src/L1/OptimismPortal.sol";
contract Initializer_Test is Bridge_Initializer {
contract Initializer_Test is Bridge_Initializer {
function test_cannotReinitializeL1_succeeds() public {
function test_cannotReinitializeL1_succeeds() public {
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
l
1CrossDomainMessenger.initialize(OptimismPortal(payable(address(0)))
);
l
2OutputOracle.initialize(0, 0
);
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
l1StandardBridge.initialize(CrossDomainMessenger(address(0)));
optimismPortal.initialize(false);
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);
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
systemConfig.initialize({
systemConfig.initialize({
...
@@ -41,20 +35,7 @@ contract Initializer_Test is Bridge_Initializer {
...
@@ -41,20 +35,7 @@ contract Initializer_Test is Bridge_Initializer {
minimumBaseFee: 0,
minimumBaseFee: 0,
systemTxMaxGas: 0,
systemTxMaxGas: 0,
maximumBaseFee: 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)));
}
}
}
}
packages/contracts-bedrock/test/L1StandardBridge.t.sol
View file @
16e6c26c
...
@@ -35,8 +35,6 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer {
...
@@ -35,8 +35,6 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer {
assertEq(address(l1StandardBridge.messenger()), address(l1CrossDomainMessenger));
assertEq(address(l1StandardBridge.messenger()), address(l1CrossDomainMessenger));
assertEq(address(l1StandardBridge.OTHER_BRIDGE()), Predeploys.L2_STANDARD_BRIDGE);
assertEq(address(l1StandardBridge.OTHER_BRIDGE()), Predeploys.L2_STANDARD_BRIDGE);
assertEq(address(l2StandardBridge), 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)));
}
}
}
}
...
...
packages/contracts-bedrock/test/L2OutputOracle.t.sol
View file @
16e6c26c
...
@@ -29,27 +29,29 @@ contract L2OutputOracle_constructor_Test is CommonTest {
...
@@ -29,27 +29,29 @@ contract L2OutputOracle_constructor_Test is CommonTest {
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.proposer(), proposer);
assertEq(l2OutputOracle.CHALLENGER(), challenger);
assertEq(l2OutputOracle.CHALLENGER(), challenger);
assertEq(l2OutputOracle.challenger(), challenger);
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.submissionInterval(), submissionInterval);
assertEq(l2OutputOracle.latestBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.latestBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.l2BlockTime(), l2BlockTime);
assertEq(l2OutputOracle.finalizationPeriodSeconds(), finalizationPeriodSeconds);
assertEq(l2OutputOracle.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
assertEq(l2OutputOracle.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
}
}
/// @dev Tests that the constructor reverts if the l2BlockTime is invalid.
/// @dev Tests that the constructor reverts if the l2BlockTime is invalid.
function test_constructor_l2BlockTimeZero_reverts() external {
function test_constructor_l2BlockTimeZero_reverts() external {
address proposer = cfg.l2OutputOracleProposer();
address challenger = cfg.l2OutputOracleChallenger();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
vm.expectRevert("L2OutputOracle: L2 block time must be greater than 0");
vm.expectRevert("L2OutputOracle: L2 block time must be greater than 0");
new L2OutputOracle({
new L2OutputOracle({
_submissionInterval: submissionInterval,
_submissionInterval: submissionInterval,
_l2BlockTime: 0,
_l2BlockTime: 0,
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: block.timestamp,
_proposer: proposer,
_challenger: challenger,
_finalizationPeriodSeconds: 7 days
_finalizationPeriodSeconds: 7 days
});
});
}
}
...
@@ -57,10 +59,17 @@ contract L2OutputOracle_constructor_Test is CommonTest {
...
@@ -57,10 +59,17 @@ contract L2OutputOracle_constructor_Test is CommonTest {
/// @dev Tests that the constructor reverts if the submissionInterval is zero.
/// @dev Tests that the constructor reverts if the submissionInterval is zero.
function test_constructor_submissionInterval_reverts() external {
function test_constructor_submissionInterval_reverts() external {
uint256 l2BlockTime = cfg.l2BlockTime();
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");
vm.expectRevert("L2OutputOracle: submission interval must be greater than 0");
new L2OutputOracle({
new L2OutputOracle({
_submissionInterval: 0,
_submissionInterval: 0,
_l2BlockTime: l2BlockTime,
_l2BlockTime: l2BlockTime,
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: block.timestamp,
_proposer: proposer,
_challenger: challenger,
_finalizationPeriodSeconds: 7 days
_finalizationPeriodSeconds: 7 days
});
});
}
}
...
@@ -71,12 +80,7 @@ contract L2OutputOracle_constructor_Test is CommonTest {
...
@@ -71,12 +80,7 @@ contract L2OutputOracle_constructor_Test is CommonTest {
// so that initialize can be called again.
// so that initialize can be called again.
vm.store(address(l2OutputOracle), bytes32(uint256(0)), bytes32(uint256(0)));
vm.store(address(l2OutputOracle), bytes32(uint256(0)), bytes32(uint256(0)));
vm.expectRevert("L2OutputOracle: starting L2 timestamp must be less than current time");
vm.expectRevert("L2OutputOracle: starting L2 timestamp must be less than current time");
l2OutputOracle.initialize({
l2OutputOracle.initialize({ _startingBlockNumber: 0, _startingTimestamp: block.timestamp + 1 });
_startingBlockNumber: 0,
_startingTimestamp: block.timestamp + 1,
_proposer: address(0),
_challenger: address(0)
});
}
}
}
}
...
@@ -318,7 +322,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
...
@@ -318,7 +322,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 1);
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 1);
vm.prank(l2OutputOracle.
challenger
());
vm.prank(l2OutputOracle.
CHALLENGER
());
vm.expectEmit(true, true, false, false);
vm.expectEmit(true, true, false, false);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex);
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
...
@@ -346,7 +350,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
...
@@ -346,7 +350,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 3);
Types.OutputProposal memory newLatestOutput = l2OutputOracle.getL2Output(latestOutputIndex - 3);
vm.prank(l2OutputOracle.
challenger
());
vm.prank(l2OutputOracle.
CHALLENGER
());
vm.expectEmit(true, true, false, false);
vm.expectEmit(true, true, false, false);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex - 2);
emit OutputsDeleted(latestOutputIndex + 1, latestOutputIndex - 2);
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
...
@@ -377,7 +381,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
...
@@ -377,7 +381,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestBlockNumber = l2OutputOracle.latestBlockNumber();
uint256 latestBlockNumber = l2OutputOracle.latestBlockNumber();
vm.prank(l2OutputOracle.
challenger
());
vm.prank(l2OutputOracle.
CHALLENGER
());
vm.expectRevert("L2OutputOracle: cannot delete outputs after the latest output index");
vm.expectRevert("L2OutputOracle: cannot delete outputs after the latest output index");
l2OutputOracle.deleteL2Outputs(latestBlockNumber + 1);
l2OutputOracle.deleteL2Outputs(latestBlockNumber + 1);
}
}
...
@@ -391,11 +395,11 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
...
@@ -391,11 +395,11 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
// Delete the latest two outputs
// Delete the latest two outputs
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
vm.prank(l2OutputOracle.
challenger
());
vm.prank(l2OutputOracle.
CHALLENGER
());
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
// Now try to delete the same output again
// 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");
vm.expectRevert("L2OutputOracle: cannot delete outputs after the latest output index");
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
l2OutputOracle.deleteL2Outputs(latestOutputIndex - 2);
}
}
...
@@ -410,7 +414,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
...
@@ -410,7 +414,7 @@ contract L2OutputOracle_deleteOutputs_Test is CommonTest {
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
uint256 latestOutputIndex = l2OutputOracle.latestOutputIndex();
// Try to delete a finalized output
// 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");
vm.expectRevert("L2OutputOracle: cannot delete outputs that have already been finalized");
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
l2OutputOracle.deleteL2Outputs(latestOutputIndex);
}
}
...
@@ -428,35 +432,35 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
...
@@ -428,35 +432,35 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
uint256 finalizationPeriodSeconds = cfg.finalizationPeriodSeconds();
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(l2OutputOracle.submissionInterval(), submissionInterval);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.L2_BLOCK_TIME(), l2BlockTime);
assertEq(l2OutputOracle.l2BlockTime(), l2BlockTime);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingBlockNumber(), startingBlockNumber);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.startingTimestamp(), startingTimestamp);
assertEq(l2OutputOracle.finalizationPeriodSeconds(), finalizationPeriodSeconds);
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.PROPOSER(), proposer);
assertEq(l2OutputOracle.proposer(), proposer);
assertEq(l2OutputOracle.CHALLENGER(), challenger);
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.
/// @dev Tests that the impl is created with the correct values.
function test_initValuesOnImpl_succeeds() external {
function test_initValuesOnImpl_succeeds() external {
L2OutputOracle oracleImpl = L2OutputOracle(mustGetAddress("L2OutputOracle"));
L2OutputOracle oracleImpl = L2OutputOracle(mustGetAddress("L2OutputOracle"));
address proposer = cfg.l2OutputOracleProposer();
address challenger = cfg.l2OutputOracleChallenger();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
uint256 submissionInterval = cfg.l2OutputOracleSubmissionInterval();
assertEq(submissionInterval, oracleImpl.SUBMISSION_INTERVAL());
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
uint256 l2BlockTime = cfg.l2BlockTime();
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
// The values that are set in the initialize function should be all
// zero values in the implementation contract.
// zero values in the implementation contract.
assertEq(oracleImpl.startingBlockNumber(), 0);
assertEq(oracleImpl.startingBlockNumber(), startingBlockNumber);
assertEq(oracleImpl.startingTimestamp(), 0);
assertEq(oracleImpl.startingTimestamp(), startingTimestamp);
assertEq(oracleImpl.PROPOSER(), address(0));
assertEq(oracleImpl.SUBMISSION_INTERVAL(), submissionInterval);
assertEq(oracleImpl.proposer(), address(0));
assertEq(oracleImpl.L2_BLOCK_TIME(), l2BlockTime);
assertEq(oracleImpl.CHALLENGER(), address(0));
assertEq(oracleImpl.FINALIZATION_PERIOD_SECONDS(), finalizationPeriodSeconds);
assertEq(oracleImpl.challenger(), address(0));
assertEq(oracleImpl.PROPOSER(), proposer);
assertEq(oracleImpl.CHALLENGER(), challenger);
}
}
/// @dev Tests that the proxy cannot be initialized twice.
/// @dev Tests that the proxy cannot be initialized twice.
...
@@ -464,12 +468,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
...
@@ -464,12 +468,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
l2OutputOracle.initialize({
l2OutputOracle.initialize({ _startingBlockNumber: startingBlockNumber, _startingTimestamp: startingTimestamp });
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: startingTimestamp,
_proposer: address(1),
_challenger: address(2)
});
}
}
/// @dev Tests that the implementation contract cannot be initialized twice.
/// @dev Tests that the implementation contract cannot be initialized twice.
...
@@ -478,12 +477,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
...
@@ -478,12 +477,7 @@ contract L2OutputOracleUpgradeable_Test is CommonTest {
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingBlockNumber = cfg.l2OutputOracleStartingBlockNumber();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
uint256 startingTimestamp = cfg.l2OutputOracleStartingTimestamp();
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
oracleImpl.initialize({
oracleImpl.initialize({ _startingBlockNumber: startingBlockNumber, _startingTimestamp: startingTimestamp });
_startingBlockNumber: startingBlockNumber,
_startingTimestamp: startingTimestamp,
_proposer: address(1),
_challenger: address(2)
});
}
}
/// @dev Tests that the proxy can be successfully upgraded.
/// @dev Tests that the proxy can be successfully upgraded.
...
...
packages/contracts-bedrock/test/OptimismPortal.t.sol
View file @
16e6c26c
...
@@ -36,9 +36,7 @@ contract OptimismPortal_Test is CommonTest {
...
@@ -36,9 +36,7 @@ contract OptimismPortal_Test is CommonTest {
function test_constructor_succeeds() external {
function test_constructor_succeeds() external {
address guardian = cfg.portalGuardian();
address guardian = cfg.portalGuardian();
assertEq(address(optimismPortal.L2_ORACLE()), address(l2OutputOracle));
assertEq(address(optimismPortal.L2_ORACLE()), address(l2OutputOracle));
assertEq(address(optimismPortal.l2Oracle()), address(l2OutputOracle));
assertEq(optimismPortal.GUARDIAN(), guardian);
assertEq(optimismPortal.GUARDIAN(), guardian);
assertEq(optimismPortal.guardian(), guardian);
assertEq(optimismPortal.l2Sender(), 0x000000000000000000000000000000000000dEaD);
assertEq(optimismPortal.l2Sender(), 0x000000000000000000000000000000000000dEaD);
assertEq(optimismPortal.paused(), false);
assertEq(optimismPortal.paused(), false);
}
}
...
@@ -900,24 +898,14 @@ contract OptimismPortalUpgradeable_Test is CommonTest {
...
@@ -900,24 +898,14 @@ contract OptimismPortalUpgradeable_Test is CommonTest {
/// @dev Tests that the proxy cannot be initialized twice.
/// @dev Tests that the proxy cannot be initialized twice.
function test_initialize_cannotInitProxy_reverts() external {
function test_initialize_cannotInitProxy_reverts() external {
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
optimismPortal.initialize({
optimismPortal.initialize({ _paused: false });
_l2Oracle: L2OutputOracle(address(0)),
_systemConfig: SystemConfig(address(0)),
_guardian: address(0),
_paused: false
});
}
}
/// @dev Tests that the implementation cannot be initialized twice.
/// @dev Tests that the implementation cannot be initialized twice.
function test_initialize_cannotInitImpl_reverts() external {
function test_initialize_cannotInitImpl_reverts() external {
address opImpl = mustGetAddress("OptimismPortal");
address opImpl = mustGetAddress("OptimismPortal");
vm.expectRevert("Initializable: contract is already initialized");
vm.expectRevert("Initializable: contract is already initialized");
OptimismPortal(payable(opImpl)).initialize({
OptimismPortal(payable(opImpl)).initialize({ _paused: false });
_l2Oracle: L2OutputOracle(address(0)),
_systemConfig: SystemConfig(address(0)),
_guardian: address(0),
_paused: false
});
}
}
/// @dev Tests that the proxy can be upgraded.
/// @dev Tests that the proxy can be upgraded.
...
...
packages/contracts-bedrock/test/StandardBridge.t.sol
View file @
16e6c26c
...
@@ -10,12 +10,7 @@ import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
...
@@ -10,12 +10,7 @@ import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/// @notice Simple wrapper around the StandardBridge contract that exposes
/// @notice Simple wrapper around the StandardBridge contract that exposes
/// internal functions so they can be more easily tested directly.
/// internal functions so they can be more easily tested directly.
contract StandardBridgeTester is StandardBridge {
contract StandardBridgeTester is StandardBridge {
constructor(
constructor(address payable _messenger, address payable _otherBridge) StandardBridge(_messenger, _otherBridge) { }
address payable _messenger,
address payable _otherBridge
)
StandardBridge(StandardBridge(_otherBridge))
{ }
function isOptimismMintableERC20(address _token) external view returns (bool) {
function isOptimismMintableERC20(address _token) external view returns (bool) {
return _isOptimismMintableERC20(_token);
return _isOptimismMintableERC20(_token);
...
...
packages/contracts-bedrock/test/SystemConfig.t.sol
View file @
16e6c26c
...
@@ -45,21 +45,12 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
...
@@ -45,21 +45,12 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
/// @dev Tests that initailization sets the correct values.
/// @dev Tests that initailization sets the correct values.
function test_initialize_values_succeeds() external {
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.owner(), owner);
assertEq(systemConfig.overhead(), overhead);
assertEq(systemConfig.overhead(), overhead);
assertEq(systemConfig.scalar(), scalar);
assertEq(systemConfig.scalar(), scalar);
assertEq(systemConfig.batcherHash(), batcherHash);
assertEq(systemConfig.batcherHash(), batcherHash);
assertEq(systemConfig.gasLimit(), gasLimit);
assertEq(systemConfig.gasLimit(), gasLimit);
assertEq(systemConfig.unsafeBlockSigner(), unsafeBlockSigner);
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
// Depends on `initialize` being called with defaults
ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG();
ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG();
ResourceMetering.ResourceConfig memory actual = systemConfig.resourceConfig();
ResourceMetering.ResourceConfig memory actual = systemConfig.resourceConfig();
...
@@ -70,139 +61,6 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
...
@@ -70,139 +61,6 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init {
assertEq(actual.systemTxMaxGas, rcfg.systemTxMaxGas);
assertEq(actual.systemTxMaxGas, rcfg.systemTxMaxGas);
assertEq(actual.maximumBaseFee, rcfg.maximumBaseFee);
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 {
contract SystemConfig_Initialize_TestFail is SystemConfig_Init {
...
@@ -231,17 +89,7 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init {
...
@@ -231,17 +89,7 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Init {
bytes32(hex"abcd"), // _batcherHash,
bytes32(hex"abcd"), // _batcherHash,
minimumGasLimit - 1, // _gasLimit,
minimumGasLimit - 1, // _gasLimit,
address(1), // _unsafeBlockSigner,
address(1), // _unsafeBlockSigner,
Constants.DEFAULT_RESOURCE_CONFIG(), // _config,
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)
})
)
)
)
)
);
);
...
...
packages/contracts-bedrock/test/invariants/SystemConfig.t.sol
View file @
16e6c26c
...
@@ -12,7 +12,15 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
...
@@ -12,7 +12,15 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
function setUp() external {
function setUp() external {
Proxy proxy = new Proxy(msg.sender);
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);
vm.prank(msg.sender);
proxy.upgradeToAndCall(
proxy.upgradeToAndCall(
...
@@ -26,17 +34,7 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
...
@@ -26,17 +34,7 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test {
bytes32(hex"abcd"), // batcher hash
bytes32(hex"abcd"), // batcher hash
30_000_000, // gas limit
30_000_000, // gas limit
address(1), // unsafe block signer
address(1), // unsafe block signer
Constants.DEFAULT_RESOURCE_CONFIG(), // resource config
Constants.DEFAULT_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)
})
)
)
)
)
);
);
...
...
packages/contracts-bedrock/test/setup/Setup.sol
View file @
16e6c26c
...
@@ -116,18 +116,17 @@ contract Setup is Deploy {
...
@@ -116,18 +116,17 @@ contract Setup is Deploy {
vm.etch(address(l2ToL1MessagePasser), address(new L2ToL1MessagePasser()).code);
vm.etch(address(l2ToL1MessagePasser), address(new L2ToL1MessagePasser()).code);
vm.etch(
vm.etch(address(l2StandardBridge), address(new L2StandardBridge(payable(l1StandardBridge))).code);
address(l2StandardBridge), address(new L2StandardBridge(StandardBridge(payable(l1StandardBridge)))).code
);
l2StandardBridge.initialize();
vm.etch(address(l2OptimismMintableERC20Factory), address(new OptimismMintableERC20Factory()).code);
vm.etch(address(l2OptimismMintableERC20Factory), address(new OptimismMintableERC20Factory()).code);
l2OptimismMintableERC20Factory.initialize(address(l2StandardBridge));
l2OptimismMintableERC20Factory.initialize(address(l2StandardBridge));
vm.etch(address(legacyERC20ETH), address(new LegacyERC20ETH()).code);
vm.etch(address(legacyERC20ETH), address(new LegacyERC20ETH()).code);
vm.etch(address(l2ERC721Bridge), address(new L2ERC721Bridge(address(l1ERC721Bridge))).code);
vm.etch(
l2ERC721Bridge.initialize();
address(l2ERC721Bridge),
address(new L2ERC721Bridge(address(l2CrossDomainMessenger), address(l1ERC721Bridge))).code
);
vm.etch(
vm.etch(
address(sequencerFeeVault),
address(sequencerFeeVault),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment