Commit ecdb788a authored by smartcontracts's avatar smartcontracts Committed by GitHub

maint: clean up some usage of vm.assume (#13216)

Cleans up some usage of vm.assume. Will be a series of commits
that do mostly the same thing.
parent c3e535c9
...@@ -201,20 +201,21 @@ contract ResourceMetering_Test is Test { ...@@ -201,20 +201,21 @@ contract ResourceMetering_Test is Test {
function testFuzz_meter_largeBlockDiff_succeeds(uint64 _amount, uint256 _blockDiff) external { function testFuzz_meter_largeBlockDiff_succeeds(uint64 _amount, uint256 _blockDiff) external {
// This test fails if the following line is commented out. // This test fails if the following line is commented out.
// At 12 seconds per block, this number is effectively unreachable. // At 12 seconds per block, this number is effectively unreachable.
vm.assume(_blockDiff < 433576281058164217753225238677900874458691); _blockDiff = uint256(bound(_blockDiff, 0, 433576281058164217753225238677900874458690));
ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig(); ResourceMetering.ResourceConfig memory rcfg = meter.resourceConfig();
uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier); uint64 target = uint64(rcfg.maxResourceLimit) / uint64(rcfg.elasticityMultiplier);
uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier); uint64 elasticityMultiplier = uint64(rcfg.elasticityMultiplier);
vm.assume(_amount < target * elasticityMultiplier); _amount = uint64(bound(_amount, 0, target * elasticityMultiplier));
vm.roll(initialBlockNum + _blockDiff); vm.roll(initialBlockNum + _blockDiff);
meter.use(_amount); meter.use(_amount);
} }
function testFuzz_meter_useGas_succeeds(uint64 _amount) external { function testFuzz_meter_useGas_succeeds(uint64 _amount) external {
(, uint64 prevBoughtGas,) = meter.params(); (, uint64 prevBoughtGas,) = meter.params();
vm.assume(prevBoughtGas + _amount <= meter.resourceConfig().maxResourceLimit); _amount = uint64(bound(_amount, 0, meter.resourceConfig().maxResourceLimit - prevBoughtGas));
meter.use(_amount); meter.use(_amount);
......
...@@ -385,12 +385,21 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init { ...@@ -385,12 +385,21 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init {
// don't use multicall3's address // don't use multicall3's address
vm.assume(_token != MULTICALL3_ADDRESS); vm.assume(_token != MULTICALL3_ADDRESS);
vm.assume(bytes(_name).length <= 32); // Using vm.assume() would cause too many test rejections.
vm.assume(bytes(_symbol).length <= 32); string memory name = _name;
if (bytes(_name).length > 32) {
name = _name[:32];
}
// Using vm.assume() would cause too many test rejections.
string memory symbol = _symbol;
if (bytes(_symbol).length > 32) {
symbol = _symbol[:32];
}
vm.mockCall(_token, abi.encodeCall(token.decimals, ()), abi.encode(18)); vm.mockCall(_token, abi.encodeCall(token.decimals, ()), abi.encode(18));
vm.mockCall(_token, abi.encodeCall(token.name, ()), abi.encode(_name)); vm.mockCall(_token, abi.encodeCall(token.name, ()), abi.encode(name));
vm.mockCall(_token, abi.encodeCall(token.symbol, ()), abi.encode(_symbol)); vm.mockCall(_token, abi.encodeCall(token.symbol, ()), abi.encode(symbol));
cleanStorageAndInit(_token); cleanStorageAndInit(_token);
...@@ -403,8 +412,8 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init { ...@@ -403,8 +412,8 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init {
assertEq(systemConfig.gasPayingTokenSymbol(), "ETH"); assertEq(systemConfig.gasPayingTokenSymbol(), "ETH");
} else { } else {
assertEq(addr, _token); assertEq(addr, _token);
assertEq(systemConfig.gasPayingTokenName(), _name); assertEq(systemConfig.gasPayingTokenName(), name);
assertEq(systemConfig.gasPayingTokenSymbol(), _symbol); assertEq(systemConfig.gasPayingTokenSymbol(), symbol);
} }
} }
...@@ -555,7 +564,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init { ...@@ -555,7 +564,7 @@ contract SystemConfig_Setters_TestFail is SystemConfig_Init {
/// @dev Tests that `setEIP1559Params` reverts if the elasticity is zero. /// @dev Tests that `setEIP1559Params` reverts if the elasticity is zero.
function test_setEIP1559Params_zeroElasticity_reverts(uint32 _denominator) external { function test_setEIP1559Params_zeroElasticity_reverts(uint32 _denominator) external {
vm.assume(_denominator >= 1); _denominator = uint32(bound(_denominator, 1, type(uint32).max));
vm.prank(systemConfig.owner()); vm.prank(systemConfig.owner());
vm.expectRevert("SystemConfig: elasticity must be >= 1"); vm.expectRevert("SystemConfig: elasticity must be >= 1");
systemConfig.setEIP1559Params({ _denominator: _denominator, _elasticity: 0 }); systemConfig.setEIP1559Params({ _denominator: _denominator, _elasticity: 0 });
......
...@@ -51,12 +51,21 @@ contract SystemConfigInterop_Test is CommonTest { ...@@ -51,12 +51,21 @@ contract SystemConfigInterop_Test is CommonTest {
vm.assume(_token != address(0)); vm.assume(_token != address(0));
vm.assume(_token != Constants.ETHER); vm.assume(_token != Constants.ETHER);
vm.assume(bytes(_name).length <= 32); // Using vm.assume() would cause too many test rejections.
vm.assume(bytes(_symbol).length <= 32); string memory name = _name;
if (bytes(_name).length > 32) {
name = _name[:32];
}
// Using vm.assume() would cause too many test rejections.
string memory symbol = _symbol;
if (bytes(_symbol).length > 32) {
symbol = _symbol[:32];
}
vm.mockCall(_token, abi.encodeCall(ERC20.decimals, ()), abi.encode(18)); vm.mockCall(_token, abi.encodeCall(ERC20.decimals, ()), abi.encode(18));
vm.mockCall(_token, abi.encodeCall(ERC20.name, ()), abi.encode(_name)); vm.mockCall(_token, abi.encodeCall(ERC20.name, ()), abi.encode(name));
vm.mockCall(_token, abi.encodeCall(ERC20.symbol, ()), abi.encode(_symbol)); vm.mockCall(_token, abi.encodeCall(ERC20.symbol, ()), abi.encode(symbol));
vm.expectCall( vm.expectCall(
address(optimismPortal), address(optimismPortal),
...@@ -67,8 +76,8 @@ contract SystemConfigInterop_Test is CommonTest { ...@@ -67,8 +76,8 @@ contract SystemConfigInterop_Test is CommonTest {
StaticConfig.encodeSetGasPayingToken({ StaticConfig.encodeSetGasPayingToken({
_token: _token, _token: _token,
_decimals: 18, _decimals: 18,
_name: GasPayingToken.sanitize(_name), _name: GasPayingToken.sanitize(name),
_symbol: GasPayingToken.sanitize(_symbol) _symbol: GasPayingToken.sanitize(symbol)
}) })
) )
) )
......
...@@ -169,31 +169,40 @@ contract L1BlockCustomGasToken_Test is L1BlockTest { ...@@ -169,31 +169,40 @@ contract L1BlockCustomGasToken_Test is L1BlockTest {
function testFuzz_setGasPayingToken_succeeds( function testFuzz_setGasPayingToken_succeeds(
address _token, address _token,
uint8 _decimals, uint8 _decimals,
string memory _name, string calldata _name,
string memory _symbol string calldata _symbol
) )
external external
{ {
vm.assume(_token != address(0)); vm.assume(_token != address(0));
vm.assume(_token != Constants.ETHER); vm.assume(_token != Constants.ETHER);
vm.assume(bytes(_name).length <= 32);
vm.assume(bytes(_symbol).length <= 32);
bytes32 name = bytes32(abi.encodePacked(_name)); // Using vm.assume() would cause too many test rejections.
bytes32 symbol = bytes32(abi.encodePacked(_symbol)); string memory name = _name;
if (bytes(_name).length > 32) {
name = _name[:32];
}
bytes32 b32name = bytes32(abi.encodePacked(name));
// Using vm.assume() would cause too many test rejections.
string memory symbol = _symbol;
if (bytes(_symbol).length > 32) {
symbol = _symbol[:32];
}
bytes32 b32symbol = bytes32(abi.encodePacked(symbol));
vm.expectEmit(address(l1Block)); vm.expectEmit(address(l1Block));
emit GasPayingTokenSet({ token: _token, decimals: _decimals, name: name, symbol: symbol }); emit GasPayingTokenSet({ token: _token, decimals: _decimals, name: b32name, symbol: b32symbol });
vm.prank(depositor); vm.prank(depositor);
l1Block.setGasPayingToken({ _token: _token, _decimals: _decimals, _name: name, _symbol: symbol }); l1Block.setGasPayingToken({ _token: _token, _decimals: _decimals, _name: b32name, _symbol: b32symbol });
(address token, uint8 decimals) = l1Block.gasPayingToken(); (address token, uint8 decimals) = l1Block.gasPayingToken();
assertEq(token, _token); assertEq(token, _token);
assertEq(decimals, _decimals); assertEq(decimals, _decimals);
assertEq(_name, l1Block.gasPayingTokenName()); assertEq(name, l1Block.gasPayingTokenName());
assertEq(_symbol, l1Block.gasPayingTokenSymbol()); assertEq(symbol, l1Block.gasPayingTokenSymbol());
assertTrue(l1Block.isCustomGasToken()); assertTrue(l1Block.isCustomGasToken());
} }
......
...@@ -53,7 +53,7 @@ contract SafeCall_Test is Test { ...@@ -53,7 +53,7 @@ contract SafeCall_Test is Test {
/// @dev Tests that the `send` function with value succeeds. /// @dev Tests that the `send` function with value succeeds.
function testFuzz_sendWithGas_succeeds(address _from, address _to, uint64 _gas, uint256 _value) external { function testFuzz_sendWithGas_succeeds(address _from, address _to, uint64 _gas, uint256 _value) external {
vm.assume(_gas != 0); _gas = uint64(bound(_gas, 1, type(uint64).max));
sendTest({ _from: _from, _to: _to, _gas: _gas, _value: _value }); sendTest({ _from: _from, _to: _to, _gas: _gas, _value: _value });
} }
......
...@@ -257,7 +257,13 @@ contract DeputyGuardianModule_setRespectedGameType_Test is DeputyGuardianModule_ ...@@ -257,7 +257,13 @@ contract DeputyGuardianModule_setRespectedGameType_Test is DeputyGuardianModule_
contract DeputyGuardianModule_setRespectedGameType_TestFail is DeputyGuardianModule_TestInit { contract DeputyGuardianModule_setRespectedGameType_TestFail is DeputyGuardianModule_TestInit {
/// @dev Tests that `setRespectedGameType` when called by a non deputy guardian. /// @dev Tests that `setRespectedGameType` when called by a non deputy guardian.
function testFuzz_setRespectedGameType_notDeputyGuardian_reverts(GameType _gameType) external { function testFuzz_setRespectedGameType_notDeputyGuardian_reverts(GameType _gameType) external {
vm.assume(GameType.unwrap(optimismPortal2.respectedGameType()) != GameType.unwrap(_gameType)); // Change the game type if it's the same to avoid test rejections.
if (GameType.unwrap(optimismPortal2.respectedGameType()) == GameType.unwrap(_gameType)) {
unchecked {
_gameType = GameType.wrap(GameType.unwrap(_gameType) + 1);
}
}
vm.expectRevert(abi.encodeWithSelector(Unauthorized.selector)); vm.expectRevert(abi.encodeWithSelector(Unauthorized.selector));
deputyGuardianModule.setRespectedGameType(optimismPortal2, _gameType); deputyGuardianModule.setRespectedGameType(optimismPortal2, _gameType);
assertNotEq(GameType.unwrap(optimismPortal2.respectedGameType()), GameType.unwrap(_gameType)); assertNotEq(GameType.unwrap(optimismPortal2.respectedGameType()), GameType.unwrap(_gameType));
......
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