From 283823ead207ca4604a1930225b9203b15a6bfe2 Mon Sep 17 00:00:00 2001 From: "A.L." Date: Mon, 9 Dec 2024 10:29:05 +0800 Subject: [PATCH 1/5] feat: intoduce new cheatcode assumeEmptyAddress --- src/StdCheats.sol | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/StdCheats.sol b/src/StdCheats.sol index 95850d118..81e3313d3 100644 --- a/src/StdCheats.sol +++ b/src/StdCheats.sol @@ -349,6 +349,13 @@ abstract contract StdCheatsSafe { ); } + function assumeEmptyAddress(address addr) internal pure virtual { + vm.assume(addr.code.length == 0); + assumeNotPrecompile(addr); + assumeNotZeroAddress(addr); + assumeNotForgeAddress(addr); + } + function readEIP1559ScriptArtifact(string memory path) internal view From 70dddbae4b37674f0376455455ed5e4dc862aea7 Mon Sep 17 00:00:00 2001 From: "A.L." Date: Mon, 9 Dec 2024 10:49:44 +0800 Subject: [PATCH 2/5] fix: use `view` modifier --- src/StdCheats.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdCheats.sol b/src/StdCheats.sol index 81e3313d3..662721a52 100644 --- a/src/StdCheats.sol +++ b/src/StdCheats.sol @@ -349,7 +349,7 @@ abstract contract StdCheatsSafe { ); } - function assumeEmptyAddress(address addr) internal pure virtual { + function assumeEmptyAddress(address addr) internal view virtual { vm.assume(addr.code.length == 0); assumeNotPrecompile(addr); assumeNotZeroAddress(addr); From 5235ab17874fbba94a626b3474dd66ecbbbebd3b Mon Sep 17 00:00:00 2001 From: "A.L." Date: Wed, 11 Dec 2024 08:14:59 +0800 Subject: [PATCH 3/5] fix: use `extcodesize` instead of `addr.code.length` --- src/StdCheats.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/StdCheats.sol b/src/StdCheats.sol index 662721a52..84ad8c68e 100644 --- a/src/StdCheats.sol +++ b/src/StdCheats.sol @@ -350,7 +350,12 @@ abstract contract StdCheatsSafe { } function assumeEmptyAddress(address addr) internal view virtual { - vm.assume(addr.code.length == 0); + uint256 size; + assembly ("memory-safe") { + size := extcodesize(addr) + } + vm.assume(size == 0); + assumeNotPrecompile(addr); assumeNotZeroAddress(addr); assumeNotForgeAddress(addr); From 82c5f1b64c27e4959bcdd04b65d4789324efa35c Mon Sep 17 00:00:00 2001 From: "A.L." Date: Wed, 11 Dec 2024 08:18:17 +0800 Subject: [PATCH 4/5] fix: rm memory safe marker --- src/StdCheats.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdCheats.sol b/src/StdCheats.sol index 84ad8c68e..b73ce1a89 100644 --- a/src/StdCheats.sol +++ b/src/StdCheats.sol @@ -351,7 +351,7 @@ abstract contract StdCheatsSafe { function assumeEmptyAddress(address addr) internal view virtual { uint256 size; - assembly ("memory-safe") { + assembly { size := extcodesize(addr) } vm.assume(size == 0); From e804ae2f3ea42dc3555c24095d4f90a72d9e6816 Mon Sep 17 00:00:00 2001 From: "A.L." Date: Wed, 11 Dec 2024 08:28:01 +0800 Subject: [PATCH 5/5] fix: rename function --- src/StdCheats.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdCheats.sol b/src/StdCheats.sol index b73ce1a89..026eb4ced 100644 --- a/src/StdCheats.sol +++ b/src/StdCheats.sol @@ -349,7 +349,7 @@ abstract contract StdCheatsSafe { ); } - function assumeEmptyAddress(address addr) internal view virtual { + function assumeUnusedAddress(address addr) internal view virtual { uint256 size; assembly { size := extcodesize(addr)