Skip to content

Commit 405727d

Browse files
authored
add new assumePayable cheat (#270)
* add new assumePayable cheat * also exclude precompile addresses in assumePayable * simplify assumePayable and add test * add more tests for assertions * use low level call instead of try catch for panic assertion
1 parent aea0b26 commit 405727d

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/StdCheats.sol

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,13 @@ abstract contract StdCheatsSafe {
463463
vm.resumeGasMetering();
464464
}
465465
}
466+
467+
// a cheat for fuzzing addresses that are payable only
468+
// see https://github.com/foundry-rs/foundry/issues/3631
469+
function assumePayable(address addr) internal virtual {
470+
(bool success,) = payable(addr).call{value: 0}("");
471+
vm.assume(success);
472+
}
466473
}
467474

468475
// Wrappers around cheatcodes to avoid footguns

test/StdCheats.t.sol

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,30 @@ contract StdCheatsTest is Test {
269269
|| addr > address(0x4200000000000000000000000000000000000800)
270270
);
271271
}
272+
273+
function testAssumePayable() external {
274+
// all should revert since these addresses are not payable
275+
276+
// VM address
277+
vm.expectRevert();
278+
assumePayable(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);
279+
280+
// Console address
281+
vm.expectRevert();
282+
assumePayable(0x000000000000000000636F6e736F6c652e6c6f67);
283+
284+
// Create2Deployer
285+
vm.expectRevert();
286+
assumePayable(0x4e59b44847b379578588920cA78FbF26c0B4956C);
287+
}
288+
289+
function testAssumePayable(address addr) external {
290+
assumePayable(addr);
291+
assertTrue(
292+
addr != 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D && addr != 0x000000000000000000636F6e736F6c652e6c6f67
293+
&& addr != 0x4e59b44847b379578588920cA78FbF26c0B4956C
294+
);
295+
}
272296
}
273297

274298
contract Bar {

0 commit comments

Comments
 (0)