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
f63d3f37
Commit
f63d3f37
authored
Jan 03, 2023
by
clabby
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bump `forge-std` / update to `InvariantTest`
gas snapshot
parent
14c535cc
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
70 additions
and
103 deletions
+70
-103
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+20
-20
L2OutputOracle.t.sol
...ts-bedrock/contracts/test/invariants/L2OutputOracle.t.sol
+28
-77
SystemConfig.t.sol
...acts-bedrock/contracts/test/invariants/SystemConfig.t.sol
+21
-5
package.json
packages/contracts-bedrock/package.json
+1
-1
No files found.
packages/contracts-bedrock/.gas-snapshot
View file @
f63d3f37
...
@@ -92,10 +92,10 @@ L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (
...
@@ -92,10 +92,10 @@ L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16093)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16093)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17593)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17593)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 323814)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 323814)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 5759
62
)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 5759
59
)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 573786)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 573786)
L1StandardBridge_DepositERC20_TestFail:test_depositERC20_notEoa_reverts() (gas: 22320)
L1StandardBridge_DepositERC20_TestFail:test_depositERC20_notEoa_reverts() (gas: 22320)
L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 3247
24
)
L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 3247
12
)
L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 367539)
L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 367539)
L1StandardBridge_DepositETH_TestFail:test_depositETH_notEoa_reverts() (gas: 40780)
L1StandardBridge_DepositETH_TestFail:test_depositETH_notEoa_reverts() (gas: 40780)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34207)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34207)
...
@@ -159,7 +159,7 @@ L2OutputOracleTest:test_proposeL2Output_unexpectedBlockNumber_reverts() (gas: 28
...
@@ -159,7 +159,7 @@ L2OutputOracleTest:test_proposeL2Output_unexpectedBlockNumber_reverts() (gas: 28
L2OutputOracleTest:test_proposeL2Output_unmatchedBlockhash_reverts() (gas: 29446)
L2OutputOracleTest:test_proposeL2Output_unmatchedBlockhash_reverts() (gas: 29446)
L2OutputOracleTest:test_proposeL2Output_wrongFork_reverts() (gas: 29005)
L2OutputOracleTest:test_proposeL2Output_wrongFork_reverts() (gas: 29005)
L2OutputOracleTest:test_proposeWithBlockhashAndHeight_succeeds() (gas: 95296)
L2OutputOracleTest:test_proposeWithBlockhashAndHeight_succeeds() (gas: 95296)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 2609
6
)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 2609
3
)
L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15149)
L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15149)
L2OutputOracleUpgradeable_Test:test_initializeProxy_alreadyInitialized_reverts() (gas: 20131)
L2OutputOracleUpgradeable_Test:test_initializeProxy_alreadyInitialized_reverts() (gas: 20131)
L2OutputOracleUpgradeable_Test:test_upgrading_succeeds() (gas: 180413)
L2OutputOracleUpgradeable_Test:test_upgrading_succeeds() (gas: 180413)
...
@@ -169,7 +169,7 @@ L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23838)
...
@@ -169,7 +169,7 @@ L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23838)
L2StandardBridge_Test:test_finalizeDeposit_succeeds() (gas: 89396)
L2StandardBridge_Test:test_finalizeDeposit_succeeds() (gas: 89396)
L2StandardBridge_Test:test_initialize_succeeds() (gas: 10537)
L2StandardBridge_Test:test_initialize_succeeds() (gas: 10537)
L2StandardBridge_Test:test_receive_succeeds() (gas: 131905)
L2StandardBridge_Test:test_receive_succeeds() (gas: 131905)
L2StandardBridge_Test:test_withdrawTo_succeeds() (gas: 3446
7
0)
L2StandardBridge_Test:test_withdrawTo_succeeds() (gas: 3446
6
0)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19630)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19630)
L2StandardBridge_Test:test_withdraw_notEOA_reverts() (gas: 251798)
L2StandardBridge_Test:test_withdraw_notEOA_reverts() (gas: 251798)
L2StandardBridge_Test:test_withdraw_succeeds() (gas: 343975)
L2StandardBridge_Test:test_withdraw_succeeds() (gas: 343975)
...
@@ -183,7 +183,7 @@ LegacyERC20ETH_Test:test_decreaseAllowance_doesNotExist_reverts() (gas: 10679)
...
@@ -183,7 +183,7 @@ LegacyERC20ETH_Test:test_decreaseAllowance_doesNotExist_reverts() (gas: 10679)
LegacyERC20ETH_Test:test_increaseAllowance_doesNotExist_reverts() (gas: 10689)
LegacyERC20ETH_Test:test_increaseAllowance_doesNotExist_reverts() (gas: 10689)
LegacyERC20ETH_Test:test_metadata_succeeds() (gas: 15414)
LegacyERC20ETH_Test:test_metadata_succeeds() (gas: 15414)
LegacyERC20ETH_Test:test_mint_doesNotExist_reverts() (gas: 10649)
LegacyERC20ETH_Test:test_mint_doesNotExist_reverts() (gas: 10649)
LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 128
87
)
LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 128
90
)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10733)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10733)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34518)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34518)
MerkleTrie_Test:test_get_corruptedProof_reverts() (gas: 5713)
MerkleTrie_Test:test_get_corruptedProof_reverts() (gas: 5713)
...
@@ -244,32 +244,32 @@ OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteT
...
@@ -244,32 +244,32 @@ OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteT
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16011)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16011)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 1804
57
)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 1804
81
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 1987
64
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 1987
58
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 2010
83
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 2010
77
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 3965
6
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 3965
0
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 19612
8
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 19612
2
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 196954)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 196954)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 176842)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 176842)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235400)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235400)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 236906)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 236906)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 22858
7
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 22858
1
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 8797746687696163638)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 8797746687696163638)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 1928
52
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 1928
46
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83498)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83498)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 13522
4
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 13522
3
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 507
3
2)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 507
5
2)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 275173)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 275173)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 188130)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 188130)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 178317)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 178317)
OptimismPortal_Test:test_constructor_succeeds() (gas: 17277)
OptimismPortal_Test:test_constructor_succeeds() (gas: 17277)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 142
67
)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 142
73
)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76662)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76662)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77029)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77029)
OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76681)
OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76681)
OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77198)
OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77198)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_succeeds() (gas: 83664)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_succeeds() (gas: 83664)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 758
62
)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 758
71
)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83389)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83389)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84133)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84133)
OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 119474)
OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 119474)
...
@@ -282,9 +282,9 @@ Proxy_Test:test_implementation_zeroAddressCaller_succeeds() (gas: 14707)
...
@@ -282,9 +282,9 @@ Proxy_Test:test_implementation_zeroAddressCaller_succeeds() (gas: 14707)
Proxy_Test:test_ownerKey_succeeds() (gas: 19081)
Proxy_Test:test_ownerKey_succeeds() (gas: 19081)
Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 34637)
Proxy_Test:test_ownerProxyCall_notAdmin_succeeds() (gas: 34637)
Proxy_Test:test_proxyCallToImp_notAdmin_succeeds() (gas: 29985)
Proxy_Test:test_proxyCallToImp_notAdmin_succeeds() (gas: 29985)
Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 1045
17
)
Proxy_Test:test_upgradeToAndCall_functionDoesNotExist_reverts() (gas: 1045
20
)
Proxy_Test:test_upgradeToAndCall_isPayable_succeeds() (gas: 537
07
)
Proxy_Test:test_upgradeToAndCall_isPayable_succeeds() (gas: 537
19
)
Proxy_Test:test_upgradeToAndCall_succeeds() (gas: 1251
55
)
Proxy_Test:test_upgradeToAndCall_succeeds() (gas: 1251
67
)
Proxy_Test:test_upgradeTo_clashingFunctionSignatures_succeeds() (gas: 101359)
Proxy_Test:test_upgradeTo_clashingFunctionSignatures_succeeds() (gas: 101359)
ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 35586)
ProxyAdmin_Test:test_chugsplashChangeProxyAdmin_succeeds() (gas: 35586)
ProxyAdmin_Test:test_chugsplashGetProxyAdmin_succeeds() (gas: 15675)
ProxyAdmin_Test:test_chugsplashGetProxyAdmin_succeeds() (gas: 15675)
...
@@ -302,7 +302,7 @@ ProxyAdmin_Test:test_erc1967GetProxyImplementation_succeeds() (gas: 52049)
...
@@ -302,7 +302,7 @@ ProxyAdmin_Test:test_erc1967GetProxyImplementation_succeeds() (gas: 52049)
ProxyAdmin_Test:test_erc1967UpgradeAndCall_succeeds() (gas: 78940)
ProxyAdmin_Test:test_erc1967UpgradeAndCall_succeeds() (gas: 78940)
ProxyAdmin_Test:test_erc1967Upgrade_succeeds() (gas: 50034)
ProxyAdmin_Test:test_erc1967Upgrade_succeeds() (gas: 50034)
ProxyAdmin_Test:test_isUpgrading_succeeds() (gas: 19431)
ProxyAdmin_Test:test_isUpgrading_succeeds() (gas: 19431)
ProxyAdmin_Test:test_onlyOwner_notOwner_reverts() (gas: 227
60
)
ProxyAdmin_Test:test_onlyOwner_notOwner_reverts() (gas: 227
45
)
ProxyAdmin_Test:test_owner_succeeds() (gas: 9738)
ProxyAdmin_Test:test_owner_succeeds() (gas: 9738)
ProxyAdmin_Test:test_proxyType_succeeds() (gas: 20511)
ProxyAdmin_Test:test_proxyType_succeeds() (gas: 20511)
ProxyAdmin_Test:test_setAddressManager_notOwner_reverts() (gas: 10600)
ProxyAdmin_Test:test_setAddressManager_notOwner_reverts() (gas: 10600)
...
...
packages/contracts-bedrock/contracts/test/invariants/L2OutputOracle.t.sol
View file @
f63d3f37
pragma solidity 0.8.15;
pragma solidity 0.8.15;
import { L2OutputOracle } from "../../L1/L2OutputOracle.sol";
import { InvariantTest } from "forge-std/InvariantTest.sol";
import { L2ToL1MessagePasser } from "../../L2/L2ToL1MessagePasser.sol";
import { L2OutputOracle_Initializer } from "../CommonTest.t.sol";
import { Predeploys } from "../../libraries/Predeploys.sol";
import { Test } from "forge-std/Test.sol";
contract L2OutputOracle_MonotonicBlockNumIncrease_Invariant is
InvariantTest,
contract L2OutputOracle_Invariants is Test {
L2OutputOracle_Initializer
// Global
{
address multisig = address(512);
function setUp() public override {
super.setUp();
// Test target
L2OutputOracle oracle;
// Set the target contract to the oracle proxy
targetContract(address(oracle));
L2ToL1MessagePasser messagePasser =
// Set the target sender to the proposer
L2ToL1MessagePasser(payable(Predeploys.L2_TO_L1_MESSAGE_PASSER));
targetSender(address(proposer));
// Set the target selector for `proposeL2Output`
// Constructor arguments
// `proposeL2Output` is the only function we care about, as it is the only function
address internal proposer = 0x000000000000000000000000000000000000AbBa;
// that can modify the `l2Outputs` array in the oracle.
address internal owner = 0x000000000000000000000000000000000000ACDC;
bytes4[] memory selectors = new bytes4[](1);
uint256 internal submissionInterval = 1800;
selectors[0] = oracle.proposeL2Output.selector;
uint256 internal l2BlockTime = 2;
FuzzSelector memory selector = FuzzSelector({
uint256 internal startingBlockNumber = 200;
addr: address(oracle),
uint256 internal startingTimestamp = 1000;
selectors: selectors
});
// Test data
targetSelector(selector);
uint256 initL1Time;
// Advance the evm's time to meet the L2OutputOracle's requirements for proposeL2Output
function warpToProposeTime(uint256 _nextBlockNumber) public {
vm.warp(oracle.computeL2Timestamp(_nextBlockNumber) + 1);
}
function setUp() public virtual {
// By default the first block has timestamp and number zero, which will cause underflows
// in the tests, so we'll move forward to these block values.
initL1Time = startingTimestamp + 1;
vm.warp(initL1Time);
vm.roll(startingBlockNumber);
// Deploy the L2OutputOracle and transfer owernship to the proposer
oracle = new L2OutputOracle(
submissionInterval,
l2BlockTime,
startingBlockNumber,
startingTimestamp,
proposer,
owner
);
}
}
/**
/**
* INVARIANT: The block number of the output root proposals should monotonically increase.
* @custom:invariant The block number of the output root proposals should monotonically
* increase.
*
*
* When a new output is submitted, it should never be allowed to correspond to a block
number
* When a new output is submitted, it should never be allowed to correspond to a block
* that is less than the current output.
*
number
that is less than the current output.
*/
*/
function invariant_monotonicBlockNumIncrease() external {
function invariant_monotonicBlockNumIncrease() external {
// Current state of the L2OutputOracle
uint256 nextNumber = oracle.nextBlockNumber();
uint256 previousNumber = oracle.latestBlockNumber();
// Warp to the time that we can propose the next L2 output
warpToProposeTime(nextNumber);
// Propose a mock output
vm.prank(proposer);
oracle.proposeL2Output(bytes32(uint256(1)), nextNumber, 0, 0);
// Ensure that the output was proposed with the correct block number
assertEq(oracle.latestBlockNumber(), nextNumber);
// Ensure that the latest block number always monotonically increases
assertTrue(nextNumber >= previousNumber);
}
/**
* INVARIANT: The block number of the output root proposals should monotonically increase.
*
* When a new output is submitted, it should never be allowed to correspond to a block number
* that is less than the current output.
*
* This is a stripped version of `invariant_monotonicBlockNumIncrease` that gives foundry's
* invariant fuzzer less context.
*/
function invariant_monotonicBlockNumIncrease_stripped() external {
// Assert that the block number of proposals must monotonically increase.
// Assert that the block number of proposals must monotonically increase.
assertTrue(oracle.nextBlockNumber() >= oracle.latestBlockNumber());
assertTrue(oracle.nextBlockNumber() >= oracle.latestBlockNumber());
}
}
...
...
packages/contracts-bedrock/contracts/test/invariants/SystemConfig.t.sol
View file @
f63d3f37
pragma solidity 0.8.15;
pragma solidity 0.8.15;
import { Test } from "forge-std/Test.sol";
import { InvariantTest } from "forge-std/InvariantTest.sol";
import { StdAssertions } from "forge-std/StdAssertions.sol";
import { SystemConfig } from "../../L1/SystemConfig.sol";
import { SystemConfig } from "../../L1/SystemConfig.sol";
contract SystemConfig_
Invariant is Test
{
contract SystemConfig_
GasLimitLowerBound_Invariant is InvariantTest, StdAssertions
{
SystemConfig config;
SystemConfig
public
config;
function setUp() public {
function setUp() public {
config = new SystemConfig({
config = new SystemConfig({
_owner: address(
this
),
_owner: address(
0xbeef
),
_overhead: 2100,
_overhead: 2100,
_scalar: 1000000,
_scalar: 1000000,
_batcherHash: bytes32(hex"abcd"),
_batcherHash: bytes32(hex"abcd"),
_gasLimit: 8_000_000,
_gasLimit: 8_000_000,
_unsafeBlockSigner: address(1)
_unsafeBlockSigner: address(1)
});
});
// Set the target contract to the `config`
targetContract(address(config));
// Set the target sender to the `config`'s owner (0xbeef)
targetSender(address(0xbeef));
// Set the target selector for `setGasLimit`
// `setGasLimit` is the only function we care about, as it is the only function
// that can modify the gas limit within the SystemConfig.
bytes4[] memory selectors = new bytes4[](1);
selectors[0] = config.setGasLimit.selector;
FuzzSelector memory selector = FuzzSelector({
addr: address(config),
selectors: selectors
});
targetSelector(selector);
}
}
/**
/**
*
INVARIANT:
The gas limit of the `SystemConfig` contract can never be lower
*
@custom:invariant
The gas limit of the `SystemConfig` contract can never be lower
* than the hard-coded lower bound.
* than the hard-coded lower bound.
*/
*/
function invariant_gasLimitLowerBound() external {
function invariant_gasLimitLowerBound() external {
...
...
packages/contracts-bedrock/package.json
View file @
f63d3f37
...
@@ -77,7 +77,7 @@
...
@@ -77,7 +77,7 @@
"dotenv"
:
"^16.0.0"
,
"dotenv"
:
"^16.0.0"
,
"ds-test"
:
"https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5"
,
"ds-test"
:
"https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5"
,
"ethereum-waffle"
:
"^3.0.0"
,
"ethereum-waffle"
:
"^3.0.0"
,
"forge-std"
:
"https://github.com/foundry-rs/forge-std.git#5
bafa16b4a6aa67c503d96294be846a22a6f6efb
"
,
"forge-std"
:
"https://github.com/foundry-rs/forge-std.git#5
3331f4cb2e313466f72440f3e73af048c454d02
"
,
"glob"
:
"^7.1.6"
,
"glob"
:
"^7.1.6"
,
"hardhat-deploy"
:
"^0.11.4"
,
"hardhat-deploy"
:
"^0.11.4"
,
"solhint"
:
"^3.3.7"
,
"solhint"
:
"^3.3.7"
,
...
...
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