ethereum: add arrayElementLocation() test helper

Review feedback from @kcsongor in #3363
This commit is contained in:
Jeff Schroeder 2023-09-11 17:29:41 +00:00
parent d9aacf1485
commit a9437e8dc2
2 changed files with 8 additions and 2 deletions

View File

@ -517,7 +517,7 @@ contract TestGovernance is TestUtils {
for(uint8 i = 0; i < newGuardianSet.length; i++) {
vm.assume(newGuardianSet[i] != address(0));
// New GuardianSet key array elements should be initialized from zero to non-zero
vm.assume(storageSlot != bytes32(uint256(keccak256(abi.encodePacked(hashedLocationOffset(1, GUARDIANSETS_SLOT, 0)))) + i));
vm.assume(storageSlot != arrayElementLocation(hashedLocationOffset(1, GUARDIANSETS_SLOT, 0), i));
}
vm.chainId(EVMCHAINID);
@ -769,7 +769,7 @@ contract TestGovernance is TestUtils {
for(uint8 i = 0; i < newGuardianSet.length; i++) {
vm.assume(newGuardianSet[i] != address(0));
// New GuardianSet key array elements should be initialized from zero to non-zero
vm.assume(storageSlot != bytes32(uint256(keccak256(abi.encodePacked(hashedLocationOffset(1, GUARDIANSETS_SLOT, 0)))) + i));
vm.assume(storageSlot != arrayElementLocation(hashedLocationOffset(1, GUARDIANSETS_SLOT, 0), i));
}
vm.chainId(EVMCHAINID);

View File

@ -184,4 +184,10 @@ contract TestUtils is Test, KEVMCheats {
signature = abi.encodePacked(r, s,(v - 27));
}
// @dev compute the storage slot of an array based on its key and offset
// @dev `keyHash` is generally from `hashedLocationOffset()`
function arrayElementLocation(bytes32 keyHash, uint8 arrayOffset) public pure returns (bytes32) {
return bytes32(uint256(keccak256(abi.encodePacked(keyHash))) + arrayOffset);
}
}