Semantic test for high level call to precompiles.

Because of the extcodesize check, the high level call will fail. Even though the low level call can
succeed and return data.
This commit is contained in:
hrkrshnn 2021-11-01 10:24:08 +01:00
parent 408bd5fa62
commit 7683442ce2

View File

@ -0,0 +1,25 @@
interface Identity {
function selectorAndAppendValue(uint value) external pure returns (uint);
}
contract C {
Identity constant i = Identity(address(0x0004));
function testHighLevel() external pure returns (bool) {
// Should fail because `extcodesize(4) = 0`
i.selectorAndAppendValue(5);
return true;
}
function testLowLevel() external view returns (uint value) {
(bool success, bytes memory ret) =
address(4).staticcall(
abi.encodeWithSelector(Identity.selectorAndAppendValue.selector, uint(5))
);
value = abi.decode(ret, (uint));
}
}
// ====
// compileViaYul: also
// EVMVersion: >=constantinople
// ----
// testHighLevel() -> FAILURE
// testLowLevel() -> 0xc76596d400000000000000000000000000000000000000000000000000000000