Commit e65a7bb0 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #4658 from ethereum-optimism/jm/ctb-test-large-gaps

test(ctb): Add a fuzz test for large deposit gaps
parents 423375d7 4964be48
---
'@eth-optimism/contracts-bedrock': patch
---
Added a test for large deposit gaps
......@@ -368,14 +368,14 @@ RLPWriter_Test:test_writeUint_smallint3_succeeds() (gas: 7311)
RLPWriter_Test:test_writeUint_smallint4_succeeds() (gas: 7312)
RLPWriter_Test:test_writeUint_smallint_succeeds() (gas: 7290)
RLPWriter_Test:test_writeUint_zero_succeeds() (gas: 7802)
ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 8965)
ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2008101)
ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18152)
ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 13911)
ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 20900)
ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 20923)
ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 8017204)
ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 16023)
ResourceMetering_Test:test_meter_initialResourceParams_succeeds() (gas: 8983)
ResourceMetering_Test:test_meter_updateNoGasDelta_succeeds() (gas: 2008119)
ResourceMetering_Test:test_meter_updateOneEmptyBlock_succeeds() (gas: 18148)
ResourceMetering_Test:test_meter_updateParamsNoChange_succeeds() (gas: 13859)
ResourceMetering_Test:test_meter_updateTenEmptyBlocks_succeeds() (gas: 20918)
ResourceMetering_Test:test_meter_updateTwoEmptyBlocks_succeeds() (gas: 20941)
ResourceMetering_Test:test_meter_useMax_succeeds() (gas: 8017151)
ResourceMetering_Test:test_meter_useMoreThanMax_reverts() (gas: 16045)
Semver_Test:test_behindProxy_succeeds() (gas: 506725)
Semver_Test:test_version_succeeds() (gas: 9396)
SequencerFeeVault_Test:test_constructor_succeeds() (gas: 5504)
......
......@@ -108,4 +108,18 @@ contract ResourceMetering_Test is CommonTest {
vm.expectRevert("ResourceMetering: cannot buy more gas than available gas limit");
meter.use(target * elasticity + 1);
}
// Demonstrates that the resource metering arithmetic can tolerate very large gaps between
// deposits.
function testFuzz_meter_largeBlockDiff_succeeds(uint64 _amount, uint256 _blockDiff) external {
// This test fails if the following line is commented out.
// At 12 seconds per block, this number is effectively unreachable.
vm.assume(_blockDiff < 433576281058164217753225238677900874458691);
uint64 target = uint64(uint256(meter.TARGET_RESOURCE_LIMIT()));
uint64 elasticity = uint64(uint256(meter.ELASTICITY_MULTIPLIER()));
vm.assume(_amount < target * elasticity);
vm.roll(initialBlockNum + _blockDiff);
meter.use(_amount);
}
}
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