-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Expand file tree
/
Copy pathabi_encode_call_declaration_v2.sol
More file actions
52 lines (43 loc) · 1.48 KB
/
abi_encode_call_declaration_v2.sol
File metadata and controls
52 lines (43 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
pragma abicoder v2;
contract X {
// no "returns" on purpose
function a(uint) public pure {}
function b(uint) external pure {}
}
contract Base {
function a(uint x) external pure returns (uint) { return x + 1; }
}
contract C is Base {
function test() public view returns (uint r) {
bool success;
bytes memory result;
(success, result) = address(this).staticcall(abi.encodeCall(X.a, 1));
require(success && result.length == 32);
r += abi.decode(result, (uint));
require(r == 2);
(success, result) = address(this).staticcall(abi.encodeCall(X.b, 10));
require(success && result.length == 32);
r += abi.decode(result, (uint));
require(r == 13);
(success, result) = address(this).staticcall(abi.encodeCall(Base.a, 100));
require(success && result.length == 32);
r += abi.decode(result, (uint));
require(r == 114);
(success, result) = address(this).staticcall(abi.encodeCall(this.a, 1000));
require(success && result.length == 32);
r += abi.decode(result, (uint));
require(r == 1115);
(success, result) = address(this).staticcall(abi.encodeCall(C.b, 10000));
require(success && result.length == 32);
r += abi.decode(result, (uint));
require(r == 11116);
return r;
}
function b(uint x) external view returns (uint) {
return this.a(x);
}
}
// ====
// EVMVersion: >=byzantium
// ----
// test() -> 11116