1212"""
1313
1414from dataclasses import dataclass
15- from typing import List , Tuple
15+ from typing import Final , List , Tuple
1616
1717from ethereum_types .numeric import U64 , U256 , Uint , ulen
1818
@@ -33,168 +33,168 @@ class GasCosts:
3333 """
3434
3535 # Tiers
36- BASE = Uint (2 )
37- VERY_LOW = Uint (3 )
38- LOW = Uint (5 )
39- MID = Uint (8 )
40- HIGH = Uint (10 )
36+ BASE : Final [ Uint ] = Uint (2 )
37+ VERY_LOW : Final [ Uint ] = Uint (3 )
38+ LOW : Final [ Uint ] = Uint (5 )
39+ MID : Final [ Uint ] = Uint (8 )
40+ HIGH : Final [ Uint ] = Uint (10 )
4141
4242 # Access
43- WARM_ACCESS = Uint (100 )
44- COLD_ACCOUNT_ACCESS = Uint (2600 )
45- COLD_STORAGE_ACCESS = Uint (2100 )
43+ WARM_ACCESS : Final [ Uint ] = Uint (100 )
44+ COLD_ACCOUNT_ACCESS : Final [ Uint ] = Uint (2600 )
45+ COLD_STORAGE_ACCESS : Final [ Uint ] = Uint (2100 )
4646
4747 # Storage
48- STORAGE_SET = Uint (20000 )
49- COLD_STORAGE_WRITE = Uint (5000 )
48+ STORAGE_SET : Final [ Uint ] = Uint (20000 )
49+ COLD_STORAGE_WRITE : Final [ Uint ] = Uint (5000 )
5050
5151 # Call
52- CALL_VALUE = Uint (9000 )
53- CALL_STIPEND = Uint (2300 )
54- NEW_ACCOUNT = Uint (25000 )
52+ CALL_VALUE : Final [ Uint ] = Uint (9000 )
53+ CALL_STIPEND : Final [ Uint ] = Uint (2300 )
54+ NEW_ACCOUNT : Final [ Uint ] = Uint (25000 )
5555
5656 # Contract Creation
57- CODE_DEPOSIT_PER_BYTE = Uint (200 )
58- CODE_INIT_PER_WORD = Uint (2 )
57+ CODE_DEPOSIT_PER_BYTE : Final [ Uint ] = Uint (200 )
58+ CODE_INIT_PER_WORD : Final [ Uint ] = Uint (2 )
5959
6060 # Authorization
61- AUTH_PER_EMPTY_ACCOUNT = 25000
61+ AUTH_PER_EMPTY_ACCOUNT : Final [ int ] = 25000
6262
6363 # Utility
64- ZERO = Uint (0 )
65- MEMORY_PER_WORD = Uint (3 )
66- FAST_STEP = Uint (5 )
64+ ZERO : Final [ Uint ] = Uint (0 )
65+ MEMORY_PER_WORD : Final [ Uint ] = Uint (3 )
66+ FAST_STEP : Final [ Uint ] = Uint (5 )
6767
6868 # Refunds
69- REFUND_STORAGE_CLEAR = 4800
69+ REFUND_STORAGE_CLEAR : Final [ int ] = 4800
7070
7171 # Precompiles
72- PRECOMPILE_ECRECOVER = Uint (3000 )
73- PRECOMPILE_P256VERIFY = Uint (6900 )
74- PRECOMPILE_SHA256_BASE = Uint (60 )
75- PRECOMPILE_SHA256_PER_WORD = Uint (12 )
76- PRECOMPILE_RIPEMD160_BASE = Uint (600 )
77- PRECOMPILE_RIPEMD160_PER_WORD = Uint (120 )
78- PRECOMPILE_IDENTITY_BASE = Uint (15 )
79- PRECOMPILE_IDENTITY_PER_WORD = Uint (3 )
80- PRECOMPILE_BLAKE2F_PER_ROUND = Uint (1 )
81- PRECOMPILE_POINT_EVALUATION = Uint (50000 )
82- PRECOMPILE_BLS_G1ADD = Uint (375 )
83- PRECOMPILE_BLS_G1MUL = Uint (12000 )
84- PRECOMPILE_BLS_G1MAP = Uint (5500 )
85- PRECOMPILE_BLS_G2ADD = Uint (600 )
86- PRECOMPILE_BLS_G2MUL = Uint (22500 )
87- PRECOMPILE_BLS_G2MAP = Uint (23800 )
88- PRECOMPILE_ECADD = Uint (150 )
89- PRECOMPILE_ECMUL = Uint (6000 )
90- PRECOMPILE_ECPAIRING_BASE = Uint (45000 )
91- PRECOMPILE_ECPAIRING_PER_POINT = Uint (34000 )
72+ PRECOMPILE_ECRECOVER : Final [ Uint ] = Uint (3000 )
73+ PRECOMPILE_P256VERIFY : Final [ Uint ] = Uint (6900 )
74+ PRECOMPILE_SHA256_BASE : Final [ Uint ] = Uint (60 )
75+ PRECOMPILE_SHA256_PER_WORD : Final [ Uint ] = Uint (12 )
76+ PRECOMPILE_RIPEMD160_BASE : Final [ Uint ] = Uint (600 )
77+ PRECOMPILE_RIPEMD160_PER_WORD : Final [ Uint ] = Uint (120 )
78+ PRECOMPILE_IDENTITY_BASE : Final [ Uint ] = Uint (15 )
79+ PRECOMPILE_IDENTITY_PER_WORD : Final [ Uint ] = Uint (3 )
80+ PRECOMPILE_BLAKE2F_PER_ROUND : Final [ Uint ] = Uint (1 )
81+ PRECOMPILE_POINT_EVALUATION : Final [ Uint ] = Uint (50000 )
82+ PRECOMPILE_BLS_G1ADD : Final [ Uint ] = Uint (375 )
83+ PRECOMPILE_BLS_G1MUL : Final [ Uint ] = Uint (12000 )
84+ PRECOMPILE_BLS_G1MAP : Final [ Uint ] = Uint (5500 )
85+ PRECOMPILE_BLS_G2ADD : Final [ Uint ] = Uint (600 )
86+ PRECOMPILE_BLS_G2MUL : Final [ Uint ] = Uint (22500 )
87+ PRECOMPILE_BLS_G2MAP : Final [ Uint ] = Uint (23800 )
88+ PRECOMPILE_ECADD : Final [ Uint ] = Uint (150 )
89+ PRECOMPILE_ECMUL : Final [ Uint ] = Uint (6000 )
90+ PRECOMPILE_ECPAIRING_BASE : Final [ Uint ] = Uint (45000 )
91+ PRECOMPILE_ECPAIRING_PER_POINT : Final [ Uint ] = Uint (34000 )
9292
9393 # Blobs
94- PER_BLOB = U64 (2 ** 17 )
95- BLOB_SCHEDULE_TARGET = U64 (14 )
96- BLOB_TARGET_GAS_PER_BLOCK = PER_BLOB * BLOB_SCHEDULE_TARGET
97- BLOB_BASE_COST = Uint (2 ** 13 )
98- BLOB_SCHEDULE_MAX = U64 (21 )
99- BLOB_MIN_GASPRICE = Uint (1 )
100- BLOB_BASE_FEE_UPDATE_FRACTION = Uint (11684671 )
94+ PER_BLOB : Final [ U64 ] = U64 (2 ** 17 )
95+ BLOB_SCHEDULE_TARGET : Final [ U64 ] = U64 (14 )
96+ BLOB_TARGET_GAS_PER_BLOCK : Final [ U64 ] = PER_BLOB * BLOB_SCHEDULE_TARGET
97+ BLOB_BASE_COST : Final [ Uint ] = Uint (2 ** 13 )
98+ BLOB_SCHEDULE_MAX : Final [ U64 ] = U64 (21 )
99+ BLOB_MIN_GASPRICE : Final [ Uint ] = Uint (1 )
100+ BLOB_BASE_FEE_UPDATE_FRACTION : Final [ Uint ] = Uint (11684671 )
101101
102102 # Block Access Lists
103- BLOCK_ACCESS_LIST_ITEM = Uint (2000 )
103+ BLOCK_ACCESS_LIST_ITEM : Final [ Uint ] = Uint (2000 )
104104
105105 # Transactions
106- TX_BASE = Uint (21000 )
107- TX_CREATE = Uint (32000 )
108- TX_DATA_TOKEN_STANDARD = Uint (4 )
109- TX_DATA_TOKEN_FLOOR = Uint (16 )
110- TX_ACCESS_LIST_ADDRESS = Uint (2400 )
111- TX_ACCESS_LIST_STORAGE_KEY = Uint (1900 )
106+ TX_BASE : Final [ Uint ] = Uint (21000 )
107+ TX_CREATE : Final [ Uint ] = Uint (32000 )
108+ TX_DATA_TOKEN_STANDARD : Final [ Uint ] = Uint (4 )
109+ TX_DATA_TOKEN_FLOOR : Final [ Uint ] = Uint (16 )
110+ TX_ACCESS_LIST_ADDRESS : Final [ Uint ] = Uint (2400 )
111+ TX_ACCESS_LIST_STORAGE_KEY : Final [ Uint ] = Uint (1900 )
112112
113113 # Block
114- LIMIT_ADJUSTMENT_FACTOR = Uint (1024 )
115- LIMIT_MINIMUM = Uint (5000 )
114+ LIMIT_ADJUSTMENT_FACTOR : Final [ Uint ] = Uint (1024 )
115+ LIMIT_MINIMUM : Final [ Uint ] = Uint (5000 )
116116
117117 # Static Opcodes
118- OPCODE_ADD = VERY_LOW
119- OPCODE_SUB = VERY_LOW
120- OPCODE_MUL = LOW
121- OPCODE_DIV = LOW
122- OPCODE_SDIV = LOW
123- OPCODE_MOD = LOW
124- OPCODE_SMOD = LOW
125- OPCODE_ADDMOD = MID
126- OPCODE_MULMOD = MID
127- OPCODE_SIGNEXTEND = LOW
128- OPCODE_LT = VERY_LOW
129- OPCODE_GT = VERY_LOW
130- OPCODE_SLT = VERY_LOW
131- OPCODE_SGT = VERY_LOW
132- OPCODE_EQ = VERY_LOW
133- OPCODE_ISZERO = VERY_LOW
134- OPCODE_AND = VERY_LOW
135- OPCODE_OR = VERY_LOW
136- OPCODE_XOR = VERY_LOW
137- OPCODE_NOT = VERY_LOW
138- OPCODE_BYTE = VERY_LOW
139- OPCODE_SHL = VERY_LOW
140- OPCODE_SHR = VERY_LOW
141- OPCODE_SAR = VERY_LOW
142- OPCODE_CLZ = LOW
143- OPCODE_JUMP = MID
144- OPCODE_JUMPI = HIGH
145- OPCODE_JUMPDEST = Uint (1 )
146- OPCODE_CALLDATALOAD = VERY_LOW
147- OPCODE_BLOCKHASH = Uint (20 )
148- OPCODE_COINBASE = BASE
149- OPCODE_POP = BASE
150- OPCODE_MSIZE = BASE
151- OPCODE_PC = BASE
152- OPCODE_GAS = BASE
153- OPCODE_ADDRESS = BASE
154- OPCODE_ORIGIN = BASE
155- OPCODE_CALLER = BASE
156- OPCODE_CALLVALUE = BASE
157- OPCODE_CALLDATASIZE = BASE
158- OPCODE_CODESIZE = BASE
159- OPCODE_GASPRICE = BASE
160- OPCODE_TIMESTAMP = BASE
161- OPCODE_NUMBER = BASE
162- OPCODE_GASLIMIT = BASE
163- OPCODE_PREVRANDAO = BASE
164- OPCODE_RETURNDATASIZE = BASE
165- OPCODE_CHAINID = BASE
166- OPCODE_BASEFEE = BASE
167- OPCODE_BLOBBASEFEE = BASE
168- OPCODE_SLOTNUM = BASE
169- OPCODE_BLOBHASH = Uint (3 )
170- OPCODE_PUSH = VERY_LOW
171- OPCODE_PUSH0 = BASE
172- OPCODE_DUP = VERY_LOW
173- OPCODE_SWAP = VERY_LOW
174- OPCODE_DUPN = VERY_LOW
175- OPCODE_SWAPN = VERY_LOW
176- OPCODE_EXCHANGE = VERY_LOW
118+ OPCODE_ADD : Final [ Uint ] = VERY_LOW
119+ OPCODE_SUB : Final [ Uint ] = VERY_LOW
120+ OPCODE_MUL : Final [ Uint ] = LOW
121+ OPCODE_DIV : Final [ Uint ] = LOW
122+ OPCODE_SDIV : Final [ Uint ] = LOW
123+ OPCODE_MOD : Final [ Uint ] = LOW
124+ OPCODE_SMOD : Final [ Uint ] = LOW
125+ OPCODE_ADDMOD : Final [ Uint ] = MID
126+ OPCODE_MULMOD : Final [ Uint ] = MID
127+ OPCODE_SIGNEXTEND : Final [ Uint ] = LOW
128+ OPCODE_LT : Final [ Uint ] = VERY_LOW
129+ OPCODE_GT : Final [ Uint ] = VERY_LOW
130+ OPCODE_SLT : Final [ Uint ] = VERY_LOW
131+ OPCODE_SGT : Final [ Uint ] = VERY_LOW
132+ OPCODE_EQ : Final [ Uint ] = VERY_LOW
133+ OPCODE_ISZERO : Final [ Uint ] = VERY_LOW
134+ OPCODE_AND : Final [ Uint ] = VERY_LOW
135+ OPCODE_OR : Final [ Uint ] = VERY_LOW
136+ OPCODE_XOR : Final [ Uint ] = VERY_LOW
137+ OPCODE_NOT : Final [ Uint ] = VERY_LOW
138+ OPCODE_BYTE : Final [ Uint ] = VERY_LOW
139+ OPCODE_SHL : Final [ Uint ] = VERY_LOW
140+ OPCODE_SHR : Final [ Uint ] = VERY_LOW
141+ OPCODE_SAR : Final [ Uint ] = VERY_LOW
142+ OPCODE_CLZ : Final [ Uint ] = LOW
143+ OPCODE_JUMP : Final [ Uint ] = MID
144+ OPCODE_JUMPI : Final [ Uint ] = HIGH
145+ OPCODE_JUMPDEST : Final [ Uint ] = Uint (1 )
146+ OPCODE_CALLDATALOAD : Final [ Uint ] = VERY_LOW
147+ OPCODE_BLOCKHASH : Final [ Uint ] = Uint (20 )
148+ OPCODE_COINBASE : Final [ Uint ] = BASE
149+ OPCODE_POP : Final [ Uint ] = BASE
150+ OPCODE_MSIZE : Final [ Uint ] = BASE
151+ OPCODE_PC : Final [ Uint ] = BASE
152+ OPCODE_GAS : Final [ Uint ] = BASE
153+ OPCODE_ADDRESS : Final [ Uint ] = BASE
154+ OPCODE_ORIGIN : Final [ Uint ] = BASE
155+ OPCODE_CALLER : Final [ Uint ] = BASE
156+ OPCODE_CALLVALUE : Final [ Uint ] = BASE
157+ OPCODE_CALLDATASIZE : Final [ Uint ] = BASE
158+ OPCODE_CODESIZE : Final [ Uint ] = BASE
159+ OPCODE_GASPRICE : Final [ Uint ] = BASE
160+ OPCODE_TIMESTAMP : Final [ Uint ] = BASE
161+ OPCODE_NUMBER : Final [ Uint ] = BASE
162+ OPCODE_GASLIMIT : Final [ Uint ] = BASE
163+ OPCODE_PREVRANDAO : Final [ Uint ] = BASE
164+ OPCODE_RETURNDATASIZE : Final [ Uint ] = BASE
165+ OPCODE_CHAINID : Final [ Uint ] = BASE
166+ OPCODE_BASEFEE : Final [ Uint ] = BASE
167+ OPCODE_BLOBBASEFEE : Final [ Uint ] = BASE
168+ OPCODE_SLOTNUM : Final [ Uint ] = BASE
169+ OPCODE_BLOBHASH : Final [ Uint ] = Uint (3 )
170+ OPCODE_PUSH : Final [ Uint ] = VERY_LOW
171+ OPCODE_PUSH0 : Final [ Uint ] = BASE
172+ OPCODE_DUP : Final [ Uint ] = VERY_LOW
173+ OPCODE_SWAP : Final [ Uint ] = VERY_LOW
174+ OPCODE_DUPN : Final [ Uint ] = VERY_LOW
175+ OPCODE_SWAPN : Final [ Uint ] = VERY_LOW
176+ OPCODE_EXCHANGE : Final [ Uint ] = VERY_LOW
177177
178178 # Dynamic Opcode Components
179- OPCODE_RETURNDATACOPY_BASE = VERY_LOW
180- OPCODE_RETURNDATACOPY_PER_WORD = Uint (3 )
181- OPCODE_CALLDATACOPY_BASE = VERY_LOW
182- OPCODE_CODECOPY_BASE = VERY_LOW
183- OPCODE_MCOPY_BASE = VERY_LOW
184- OPCODE_MLOAD_BASE = VERY_LOW
185- OPCODE_MSTORE_BASE = VERY_LOW
186- OPCODE_MSTORE8_BASE = VERY_LOW
187- OPCODE_COPY_PER_WORD = Uint (3 )
188- OPCODE_CREATE_BASE = Uint (32000 )
189- OPCODE_EXP_BASE = Uint (10 )
190- OPCODE_EXP_PER_BYTE = Uint (50 )
191- OPCODE_KECCAK256_BASE = Uint (30 )
192- OPCODE_KECCACK256_PER_WORD = Uint (6 )
193- OPCODE_LOG_BASE = Uint (375 )
194- OPCODE_LOG_DATA_PER_BYTE = Uint (8 )
195- OPCODE_LOG_TOPIC = Uint (375 )
196- OPCODE_SELFDESTRUCT_BASE = Uint (5000 )
197- OPCODE_SELFDESTRUCT_NEW_ACCOUNT = Uint (25000 )
179+ OPCODE_RETURNDATACOPY_BASE : Final [ Uint ] = VERY_LOW
180+ OPCODE_RETURNDATACOPY_PER_WORD : Final [ Uint ] = Uint (3 )
181+ OPCODE_CALLDATACOPY_BASE : Final [ Uint ] = VERY_LOW
182+ OPCODE_CODECOPY_BASE : Final [ Uint ] = VERY_LOW
183+ OPCODE_MCOPY_BASE : Final [ Uint ] = VERY_LOW
184+ OPCODE_MLOAD_BASE : Final [ Uint ] = VERY_LOW
185+ OPCODE_MSTORE_BASE : Final [ Uint ] = VERY_LOW
186+ OPCODE_MSTORE8_BASE : Final [ Uint ] = VERY_LOW
187+ OPCODE_COPY_PER_WORD : Final [ Uint ] = Uint (3 )
188+ OPCODE_CREATE_BASE : Final [ Uint ] = Uint (32000 )
189+ OPCODE_EXP_BASE : Final [ Uint ] = Uint (10 )
190+ OPCODE_EXP_PER_BYTE : Final [ Uint ] = Uint (50 )
191+ OPCODE_KECCAK256_BASE : Final [ Uint ] = Uint (30 )
192+ OPCODE_KECCACK256_PER_WORD : Final [ Uint ] = Uint (6 )
193+ OPCODE_LOG_BASE : Final [ Uint ] = Uint (375 )
194+ OPCODE_LOG_DATA_PER_BYTE : Final [ Uint ] = Uint (8 )
195+ OPCODE_LOG_TOPIC : Final [ Uint ] = Uint (375 )
196+ OPCODE_SELFDESTRUCT_BASE : Final [ Uint ] = Uint (5000 )
197+ OPCODE_SELFDESTRUCT_NEW_ACCOUNT : Final [ Uint ] = Uint (25000 )
198198
199199
200200@dataclass
0 commit comments