testcases.md

September 1, 2020 ยท View on GitHub

Case 1

This checks EXT(codehash,codesize,balance) of precompiles, which should be 100, and later checks the same operations twice against some non-precompiles. Those are cheaper second time they are accessed. Lastly, it checks the BALANCE of origin and this.

Bytecode:

0x60013f5060023b506003315060f13f5060f23b5060f3315060f23f5060f33b5060f1315032315030315000

Operations:

PUSH1 0x01, EXTCODEHASH, POP, PUSH1 0x02, EXTCODESIZE, POP, PUSH1 0x03, BALANCE, POP, PUSH1 0xf1, EXTCODEHASH, POP, PUSH1 0xf2, EXTCODESIZE, POP, PUSH1 0xf3, BALANCE, POP, PUSH1 0xf2, EXTCODEHASH, POP, PUSH1 0xf3, EXTCODESIZE, POP, PUSH1 0xf1, BALANCE, POP, ORIGIN, BALANCE, POP, ADDRESS, BALANCE, POP, STOP

From: 0x0000000000000000000000000000000000000000 To: 0x000000000000000000000000636F6E7472616374 Data: 0x Gas: 18446744073709551615 Value 0 wei

PcOpCostStackRStackRefund
0PUSH13[][]0
2EXTCODEHASH100[0x1][]0
3POP2[0x0][]0
4PUSH13[][]0
6EXTCODESIZE100[0x2][]0
7POP2[0x0][]0
8PUSH13[][]0
10BALANCE100[0x3][]0
11POP2[0x0][]0
12PUSH13[][]0
14EXTCODEHASH2600[0xf1][]0
15POP2[0x0][]0
16PUSH13[][]0
18EXTCODESIZE2600[0xf2][]0
19POP2[0x0][]0
20PUSH13[][]0
22BALANCE2600[0xf3][]0
23POP2[0x0][]0
24PUSH13[][]0
26EXTCODEHASH100[0xf2][]0
27POP2[0x0][]0
28PUSH13[][]0
30EXTCODESIZE100[0xf3][]0
31POP2[0x0][]0
32PUSH13[][]0
34BALANCE100[0xf1][]0
35POP2[0x0][]0
36ORIGIN2[][]0
37BALANCE100[0x0][]0
38POP2[0x0][]0
39ADDRESS2[][]0
40BALANCE100[0x636f6e7472616374][]0
41POP2[0x0][]0
42STOP0[][]0

Output: 0x Consumed gas: 8653 Error: <nil>

Case 2

This checks extcodecopy( 0xff,0,0,0,0) twice, (should be expensive first time), and then does extcodecopy( this,0,0,0,0).

Bytecode:

0x60006000600060ff3c60006000600060ff3c600060006000303c00

Operations:

PUSH1 0x00, PUSH1 0x00, PUSH1 0x00, PUSH1 0xff, EXTCODECOPY, PUSH1 0x00, PUSH1 0x00, PUSH1 0x00, PUSH1 0xff, EXTCODECOPY, PUSH1 0x00, PUSH1 0x00, PUSH1 0x00, ADDRESS, EXTCODECOPY, STOP

From: 0x0000000000000000000000000000000000000000 To: 0x000000000000000000000000636F6E7472616374 Data: 0x Gas: 18446744073709551615 Value 0 wei

PcOpCostStackRStackRefund
0PUSH13[][]0
2PUSH13[0x0][]0
4PUSH13[0x0,0x0][]0
6PUSH13[0x0,0x0,0x0][]0
8EXTCODECOPY2600[0x0,0x0,0x0,0xff][]0
9PUSH13[][]0
11PUSH13[0x0][]0
13PUSH13[0x0,0x0][]0
15PUSH13[0x0,0x0,0x0][]0
17EXTCODECOPY100[0x0,0x0,0x0,0xff][]0
18PUSH13[][]0
20PUSH13[0x0][]0
22PUSH13[0x0,0x0][]0
24ADDRESS2[0x0,0x0,0x0][]0
25EXTCODECOPY100[0x0,0x0,0x0,0x636f6e7472616374][]0
26STOP0[][]0

Output: 0x Consumed gas: 2835 Error: <nil>

Case 3

This checks sload( 0x1) followed by sstore(loc: 0x01, val:0x11), then 'naked' sstore:sstore(loc: 0x02, val:0x11) twice, and sload(0x2), sload(0x1).

Bytecode:

0x60015450601160015560116002556011600255600254600154

Operations:

PUSH1 0x01, SLOAD, POP, PUSH1 0x11, PUSH1 0x01, SSTORE, PUSH1 0x11, PUSH1 0x02, SSTORE, PUSH1 0x11, PUSH1 0x02, SSTORE, PUSH1 0x02, SLOAD, PUSH1 0x01, SLOAD

From: 0x0000000000000000000000000000000000000000 To: 0x000000000000000000000000636F6E7472616374 Data: 0x Gas: 18446744073709551615 Value 0 wei

PcOpCostStackRStackRefund
0PUSH13[][]0
2SLOAD2100[0x1][]0
3POP2[0x0][]0
4PUSH13[][]0
6PUSH13[0x11][]0
8SSTORE20000[0x11,0x1][]0
9PUSH13[][]0
11PUSH13[0x11][]0
13SSTORE22100[0x11,0x2][]0
14PUSH13[][]0
16PUSH13[0x11][]0
18SSTORE100[0x11,0x2][]0
19PUSH13[][]0
21SLOAD100[0x2][]0
22PUSH13[0x11][]0
24SLOAD100[0x11,0x1][]0
25STOP0[0x11,0x11][]0

Output: 0x Consumed gas: 44529 Error: <nil>

Case 4

This calls the identity-precompile (cheap), then calls an account (expensive) and staticcalls the sameaccount (cheap)

Bytecode:

0x60008080808060046000f15060008080808060ff6000f15060008080808060ff6000fa50

Operations:

PUSH1 0x00, DUP1, DUP1, DUP1, DUP1, PUSH1 0x04, PUSH1 0x00, CALL, POP, PUSH1 0x00, DUP1, DUP1, DUP1, DUP1, PUSH1 0xff, PUSH1 0x00, CALL, POP, PUSH1 0x00, DUP1, DUP1, DUP1, DUP1, PUSH1 0xff, PUSH1 0x00, STATICCALL, POP

From: 0x0000000000000000000000000000000000000000 To: 0x000000000000000000000000636F6E7472616374 Data: 0x Gas: 18446744073709551615 Value 0 wei

PcOpCostStackRStackRefund
0PUSH13[][]0
2DUP13[0x0][]0
3DUP13[0x0,0x0][]0
4DUP13[0x0,0x0,0x0][]0
5DUP13[0x0,0x0,0x0,0x0][]0
6PUSH13[0x0,0x0,0x0,0x0,0x0][]0
8PUSH13[0x0,0x0,0x0,0x0,0x0,0x4][]0
10CALL100[0x0,0x0,0x0,0x0,0x0,0x4,0x0][]0
11POP2[0x0][]0
12PUSH13[][]0
14DUP13[0x0][]0
15DUP13[0x0,0x0][]0
16DUP13[0x0,0x0,0x0][]0
17DUP13[0x0,0x0,0x0,0x0][]0
18PUSH13[0x0,0x0,0x0,0x0,0x0][]0
20PUSH13[0x0,0x0,0x0,0x0,0x0,0xff][]0
22CALL2600[0x0,0x0,0x0,0x0,0x0,0xff,0x0][]0
23POP2[0x1][]0
24PUSH13[][]0
26DUP13[0x0][]0
27DUP13[0x0,0x0][]0
28DUP13[0x0,0x0,0x0][]0
29DUP13[0x0,0x0,0x0,0x0][]0
30PUSH13[0x0,0x0,0x0,0x0,0x0][]0
32PUSH13[0x0,0x0,0x0,0x0,0x0,0xff][]0
34STATICCALL100[0x0,0x0,0x0,0x0,0x0,0xff,0x0][]0
35POP2[0x0,0x1][]0
36STOP0[0x0][]0

Output: 0x Consumed gas: 2869 Error: <nil>