-
Notifications
You must be signed in to change notification settings - Fork 685
/
Copy pathconstants.py
211 lines (164 loc) · 3.79 KB
/
constants.py
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
from eth_utils import denoms
ANY = 'any'
UINT256 = 'uint256'
BYTES = 'bytes'
UINT_256_MAX = 2**256 - 1
UINT_256_CEILING = 2**256
UINT_255_MAX = 2**255 - 1
UINT_255_CEILING = 2**255
NULL_BYTE = b'\x00'
EMPTY_WORD = NULL_BYTE * 32
UINT_160_CEILING = 2**160
CREATE_CONTRACT_ADDRESS = b''
ZERO_ADDRESS = 20 * b'\x00'
ZERO_HASH32 = 32 * b'\x00'
#
# Stack Limit
#
STACK_DEPTH_LIMIT = 1024
#
# Gas Costs and Refunds
#
GAS_NULL = 0
GAS_ZERO = 0
GAS_BASE = 2
GAS_VERYLOW = 3
GAS_LOW = 5
GAS_MID = 8
GAS_HIGH = 10
GAS_EXTCODE = 20
GAS_EXTCODE_EIP150 = 700
GAS_BALANCE = 20
GAS_BALANCE_EIP150 = 400
GAS_SLOAD = 50
GAS_SLOAD_EIP150 = 200
GAS_JUMPDEST = 1
GAS_SSET = 20000
GAS_SRESET = 5000
REFUND_SCLEAR = 15000
REFUND_SELFDESTRUCT = 24000
GAS_SELFDESTRUCT = 0
GAS_SELFDESTRUCT_EIP150 = 5000
GAS_SELFDESTRUCT_NEWACCOUNT = 25000
GAS_CREATE = 32000
GAS_CODEDEPOSIT = 200
GAS_CALL = 40
GAS_CALL_EIP150 = 700
GAS_CALLVALUE = 9000
GAS_CALLSTIPEND = 2300
GAS_NEWACCOUNT = 25000
GAS_EXP = 10
GAS_EXPBYTE = 10
GAS_MEMORY = 3
GAS_TXCREATE = 32000
GAS_TXDATAZERO = 4
GAS_TXDATANONZERO = 68
GAS_TX = 21000
GAS_LOG = 375
GAS_LOGDATA = 8
GAS_LOGTOPIC = 375
GAS_SHA3 = 30
GAS_SHA3WORD = 6
GAS_COPY = 3
GAS_BLOCKHASH = 20
GAS_MEMORY_QUADRATIC_DENOMINATOR = 512
#
# Pre-compile contract gas costs
#
GAS_SHA256 = 60
GAS_SHA256WORD = 12
GAS_RIPEMD160 = 600
GAS_RIPEMD160WORD = 120
GAS_IDENTITY = 15
GAS_IDENTITYWORD = 3
GAS_ECRECOVER = 3000
GAS_ECADD = 500
GAS_ECMUL = 40000
GAS_ECPAIRING_BASE = 100000
GAS_ECPAIRING_PER_POINT = 80000
#
# Gas Limit
#
GAS_LIMIT_EMA_DENOMINATOR = 1024
GAS_LIMIT_ADJUSTMENT_FACTOR = 1024
GAS_LIMIT_MINIMUM = 125000
GAS_LIMIT_MAXIMUM = 2 ** 63 - 1
GAS_LIMIT_USAGE_ADJUSTMENT_NUMERATOR = 3
GAS_LIMIT_USAGE_ADJUSTMENT_DENOMINATOR = 2
#
# Difficulty
#
DIFFICULTY_ADJUSTMENT_DENOMINATOR = 2048
DIFFICULTY_MINIMUM = 131072
FRONTIER_DIFFICULTY_ADJUSTMENT_CUTOFF = 13
HOMESTEAD_DIFFICULTY_ADJUSTMENT_CUTOFF = 10
BYZANTIUM_DIFFICULTY_ADJUSTMENT_CUTOFF = 9
BOMB_EXPONENTIAL_PERIOD = 100000
BOMB_EXPONENTIAL_FREE_PERIODS = 2
#
# Mining
#
BLOCK_REWARD = 5 * denoms.ether
EIP649_BLOCK_REWARD = 3 * denoms.ether
UNCLE_DEPTH_PENALTY_FACTOR = 8
MAX_UNCLE_DEPTH = 6
MAX_UNCLES = 2
#
# SECPK1N
#
SECPK1_P = 2**256 - 2**32 - 977
SECPK1_N = 115792089237316195423570985008687907852837564279074904382605163141518161494337
SECPK1_A = 0
SECPK1_B = 7
SECPK1_Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240
SECPK1_Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424
SECPK1_G = (SECPK1_Gx, SECPK1_Gy)
#
# Block and Header
#
# keccak(rlp.encode([]))
EMPTY_UNCLE_HASH = b'\x1d\xccM\xe8\xde\xc7]z\xab\x85\xb5g\xb6\xcc\xd4\x1a\xd3\x12E\x1b\x94\x8at\x13\xf0\xa1B\xfd@\xd4\x93G' # noqa: E501
#
# Genesis Data
#
GENESIS_BLOCK_NUMBER = 0
GENESIS_DIFFICULTY = 131072
GENESIS_GAS_LIMIT = 3141592
GENESIS_PARENT_HASH = ZERO_HASH32
GENESIS_COINBASE = ZERO_ADDRESS
GENESIS_NONCE = b'\x00\x00\x00\x00\x00\x00\x00B' # 0x42 encoded as big-endian-integer
GENESIS_MIX_HASH = ZERO_HASH32
GENESIS_EXTRA_DATA = b''
GENESIS_INITIAL_ALLOC = {}
#
# Sha3 Keccak
#
EMPTY_SHA3 = b"\xc5\xd2F\x01\x86\xf7#<\x92~}\xb2\xdc\xc7\x03\xc0\xe5\x00\xb6S\xca\x82';\x7b\xfa\xd8\x04]\x85\xa4p" # noqa: E501
BLANK_ROOT_HASH = b'V\xe8\x1f\x17\x1b\xccU\xa6\xff\x83E\xe6\x92\xc0\xf8n\x5bH\xe0\x1b\x99l\xad\xc0\x01b/\xb5\xe3c\xb4!' # noqa: E501
#
# Homestead
#
HOMESTEAD_MAINNET_BLOCK = 1150000
#
# DAO
#
DAO_FORK_BLOCK_NUMBER = 1920000
#
# EIP150
#
EIP150_MAINNET_BLOCK = 2463000
#
# Spurious Dragon
#
SPURIOUS_DRAGON_MAINNET_BLOCK = 2675000
# https://github.com/ethereum/EIPs/issues/160
GAS_EXP_EIP160 = 10
GAS_EXPBYTE_EIP160 = 50
# https://github.com/ethereum/EIPs/issues/170
EIP170_CODE_SIZE_LIMIT = 24577
#
# ByzantiumVM
#
BYZANTIUM_MAINNET_BLOCK = 4370000
BYZANTIUM_ROPSTEN_BLOCK = 1700000
GAS_MOD_EXP_QUADRATIC_DENOMINATOR = 20