Skip to content

Commit 07dcc20

Browse files
charles-cooperfselmo
authored andcommitted
optimize opcode:
- Optimize ``as_opcode()`` - Remove unnecessary copy methods from OpcodeAPI - fix lint - run / trigger CI
1 parent 33619b3 commit 07dcc20

File tree

9 files changed

+267
-173
lines changed

9 files changed

+267
-173
lines changed

eth/_utils/numeric.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import decimal
2-
import functools
32
import itertools
43
from typing import (
54
Union,
@@ -31,10 +30,11 @@ def int_to_bytes32(value: Union[int, bool]) -> Hash32:
3130

3231

3332
# hotspot, optimized
34-
def ceil32(x):
33+
def ceil32(x: int) -> int:
3534
return (x + 31) & ~31
3635

37-
def ceil8(x):
36+
37+
def ceil8(x: int) -> int:
3838
return (x + 7) & ~7
3939

4040

eth/abc.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,26 +1507,12 @@ def as_opcode(
15071507
logic_fn: Callable[["ComputationAPI"], None],
15081508
mnemonic: str,
15091509
gas_cost: int,
1510-
) -> T:
1510+
) -> "OpcodeAPI":
15111511
"""
15121512
Class factory method for turning vanilla functions into Opcodes.
15131513
"""
15141514
...
15151515

1516-
@abstractmethod
1517-
def __copy__(self) -> "OpcodeAPI":
1518-
"""
1519-
Return a copy of the opcode.
1520-
"""
1521-
...
1522-
1523-
@abstractmethod
1524-
def __deepcopy__(self, memo: Any) -> "OpcodeAPI":
1525-
"""
1526-
Return a deep copy of the opcode.
1527-
"""
1528-
...
1529-
15301516

15311517
class ChainContextAPI(ABC):
15321518
"""

eth/vm/forks/berlin/opcodes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
from eth import (
1111
constants,
1212
)
13+
from eth.abc import (
14+
OpcodeAPI,
15+
)
1316
from eth.vm import (
1417
mnemonics,
1518
opcode_values,
@@ -24,15 +27,14 @@
2427
GAS_SELFDESTRUCT_EIP150,
2528
)
2629
from eth.vm.opcode import (
27-
Opcode,
2830
as_opcode,
2931
)
3032

3133
from . import (
3234
logic,
3335
)
3436

35-
UPDATED_OPCODES: Dict[int, Opcode] = {
37+
UPDATED_OPCODES: Dict[int, OpcodeAPI] = {
3638
opcode_values.BALANCE: as_opcode(
3739
gas_cost=constants.GAS_NULL,
3840
logic_fn=logic.balance_eip2929,

eth/vm/forks/london/opcodes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
from eth import (
1111
constants,
1212
)
13+
from eth.abc import (
14+
OpcodeAPI,
15+
)
1316
from eth.vm import (
1417
mnemonics,
1518
opcode_values,
@@ -24,15 +27,14 @@
2427
block,
2528
)
2629
from eth.vm.opcode import (
27-
Opcode,
2830
as_opcode,
2931
)
3032

3133
from . import (
3234
storage,
3335
)
3436

35-
UPDATED_OPCODES: Dict[int, Opcode] = {
37+
UPDATED_OPCODES: Dict[int, OpcodeAPI] = {
3638
opcode_values.BASEFEE: as_opcode(
3739
gas_cost=constants.GAS_BASE,
3840
logic_fn=block.basefee,

eth/vm/logic/duplication.py

Lines changed: 62 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,67 @@
1-
import functools
2-
31
from eth.abc import (
42
ComputationAPI,
53
)
64

75

8-
def dup_XX(computation: ComputationAPI, position: int) -> None:
9-
"""
10-
Stack item duplication.
11-
"""
12-
computation.stack_dup(position)
13-
14-
def dup1(computation):
15-
dup_XX(computation, 1)
16-
def dup2(computation):
17-
dup_XX(computation, 2)
18-
def dup3(computation):
19-
dup_XX(computation, 3)
20-
def dup4(computation):
21-
dup_XX(computation, 4)
22-
def dup5(computation):
23-
dup_XX(computation, 5)
24-
def dup6(computation):
25-
dup_XX(computation, 6)
26-
def dup7(computation):
27-
dup_XX(computation, 7)
28-
def dup8(computation):
29-
dup_XX(computation, 8)
30-
def dup9(computation):
31-
dup_XX(computation, 9)
32-
def dup10(computation):
33-
dup_XX(computation, 10)
34-
def dup11(computation):
35-
dup_XX(computation, 11)
36-
def dup12(computation):
37-
dup_XX(computation, 12)
38-
def dup13(computation):
39-
dup_XX(computation, 13)
40-
def dup14(computation):
41-
dup_XX(computation, 14)
42-
def dup15(computation):
43-
dup_XX(computation, 15)
44-
def dup16(computation):
45-
dup_XX(computation, 16)
6+
def dup1(computation: ComputationAPI) -> None:
7+
computation.stack_dup(1)
8+
9+
10+
def dup2(computation: ComputationAPI) -> None:
11+
computation.stack_dup(2)
12+
13+
14+
def dup3(computation: ComputationAPI) -> None:
15+
computation.stack_dup(3)
16+
17+
18+
def dup4(computation: ComputationAPI) -> None:
19+
computation.stack_dup(4)
20+
21+
22+
def dup5(computation: ComputationAPI) -> None:
23+
computation.stack_dup(5)
24+
25+
26+
def dup6(computation: ComputationAPI) -> None:
27+
computation.stack_dup(6)
28+
29+
30+
def dup7(computation: ComputationAPI) -> None:
31+
computation.stack_dup(7)
32+
33+
34+
def dup8(computation: ComputationAPI) -> None:
35+
computation.stack_dup(8)
36+
37+
38+
def dup9(computation: ComputationAPI) -> None:
39+
computation.stack_dup(9)
40+
41+
42+
def dup10(computation: ComputationAPI) -> None:
43+
computation.stack_dup(10)
44+
45+
46+
def dup11(computation: ComputationAPI) -> None:
47+
computation.stack_dup(11)
48+
49+
50+
def dup12(computation: ComputationAPI) -> None:
51+
computation.stack_dup(12)
52+
53+
54+
def dup13(computation: ComputationAPI) -> None:
55+
computation.stack_dup(13)
56+
57+
58+
def dup14(computation: ComputationAPI) -> None:
59+
computation.stack_dup(14)
60+
61+
62+
def dup15(computation: ComputationAPI) -> None:
63+
computation.stack_dup(15)
64+
65+
66+
def dup16(computation: ComputationAPI) -> None:
67+
computation.stack_dup(16)

eth/vm/logic/stack.py

Lines changed: 98 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import functools
2-
31
from eth.abc import (
42
ComputationAPI,
53
)
@@ -24,67 +22,133 @@ def push_XX(computation: ComputationAPI, size: int) -> None:
2422
computation.stack_push_bytes(padded_value)
2523

2624

27-
def push1(computation):
25+
def push0(computation: ComputationAPI) -> None:
26+
return push_XX(computation, 0)
27+
28+
29+
def push1(computation: ComputationAPI) -> None:
2830
return push_XX(computation, 1)
29-
def push2(computation):
31+
32+
33+
def push2(computation: ComputationAPI) -> None:
3034
return push_XX(computation, 2)
31-
def push3(computation):
35+
36+
37+
def push3(computation: ComputationAPI) -> None:
3238
return push_XX(computation, 3)
33-
def push4(computation):
39+
40+
41+
def push4(computation: ComputationAPI) -> None:
3442
return push_XX(computation, 4)
35-
def push5(computation):
43+
44+
45+
def push5(computation: ComputationAPI) -> None:
3646
return push_XX(computation, 5)
37-
def push6(computation):
47+
48+
49+
def push6(computation: ComputationAPI) -> None:
3850
return push_XX(computation, 6)
39-
def push7(computation):
51+
52+
53+
def push7(computation: ComputationAPI) -> None:
4054
return push_XX(computation, 7)
41-
def push8(computation):
55+
56+
57+
def push8(computation: ComputationAPI) -> None:
4258
return push_XX(computation, 8)
43-
def push9(computation):
59+
60+
61+
def push9(computation: ComputationAPI) -> None:
4462
return push_XX(computation, 9)
45-
def push10(computation):
63+
64+
65+
def push10(computation: ComputationAPI) -> None:
4666
return push_XX(computation, 10)
47-
def push11(computation):
67+
68+
69+
def push11(computation: ComputationAPI) -> None:
4870
return push_XX(computation, 11)
49-
def push12(computation):
71+
72+
73+
def push12(computation: ComputationAPI) -> None:
5074
return push_XX(computation, 12)
51-
def push13(computation):
75+
76+
77+
def push13(computation: ComputationAPI) -> None:
5278
return push_XX(computation, 13)
53-
def push14(computation):
79+
80+
81+
def push14(computation: ComputationAPI) -> None:
5482
return push_XX(computation, 14)
55-
def push15(computation):
83+
84+
85+
def push15(computation: ComputationAPI) -> None:
5686
return push_XX(computation, 15)
57-
def push16(computation):
87+
88+
89+
def push16(computation: ComputationAPI) -> None:
5890
return push_XX(computation, 16)
59-
def push17(computation):
91+
92+
93+
def push17(computation: ComputationAPI) -> None:
6094
return push_XX(computation, 17)
61-
def push18(computation):
95+
96+
97+
def push18(computation: ComputationAPI) -> None:
6298
return push_XX(computation, 18)
63-
def push19(computation):
99+
100+
101+
def push19(computation: ComputationAPI) -> None:
64102
return push_XX(computation, 19)
65-
def push20(computation):
103+
104+
105+
def push20(computation: ComputationAPI) -> None:
66106
return push_XX(computation, 20)
67-
def push21(computation):
107+
108+
109+
def push21(computation: ComputationAPI) -> None:
68110
return push_XX(computation, 21)
69-
def push22(computation):
111+
112+
113+
def push22(computation: ComputationAPI) -> None:
70114
return push_XX(computation, 22)
71-
def push23(computation):
115+
116+
117+
def push23(computation: ComputationAPI) -> None:
72118
return push_XX(computation, 23)
73-
def push24(computation):
119+
120+
121+
def push24(computation: ComputationAPI) -> None:
74122
return push_XX(computation, 24)
75-
def push25(computation):
123+
124+
125+
def push25(computation: ComputationAPI) -> None:
76126
return push_XX(computation, 25)
77-
def push26(computation):
127+
128+
129+
def push26(computation: ComputationAPI) -> None:
78130
return push_XX(computation, 26)
79-
def push27(computation):
131+
132+
133+
def push27(computation: ComputationAPI) -> None:
80134
return push_XX(computation, 27)
81-
def push28(computation):
135+
136+
137+
def push28(computation: ComputationAPI) -> None:
82138
return push_XX(computation, 28)
83-
def push29(computation):
139+
140+
141+
def push29(computation: ComputationAPI) -> None:
84142
return push_XX(computation, 29)
85-
def push30(computation):
143+
144+
145+
def push30(computation: ComputationAPI) -> None:
86146
return push_XX(computation, 30)
87-
def push31(computation):
147+
148+
149+
def push31(computation: ComputationAPI) -> None:
88150
return push_XX(computation, 31)
89-
def push32(computation):
151+
152+
153+
def push32(computation: ComputationAPI) -> None:
90154
return push_XX(computation, 32)

0 commit comments

Comments
 (0)