6
6
from rlp .utils import decode_hex
7
7
from ethereum .utils import encode_hex
8
8
import ethereum .ethpow as ethpow
9
- import ethereum .utils as utils
9
+ from ethereum .utils import (
10
+ sha3 ,
11
+ privtoaddr ,
12
+ denoms ,
13
+ dump_state ,
14
+ )
10
15
from ethereum .chain import Chain
11
16
from ethereum .db import EphemDB
12
17
from ethereum .tests .utils import new_db
@@ -29,10 +34,10 @@ def env(db):
29
34
30
35
@pytest .fixture (scope = "module" )
31
36
def accounts ():
32
- k = utils . sha3 (b'cow' )
33
- v = utils . privtoaddr (k )
34
- k2 = utils . sha3 (b'horse' )
35
- v2 = utils . privtoaddr (k2 )
37
+ k = sha3 (b'cow' )
38
+ v = privtoaddr (k )
39
+ k2 = sha3 (b'horse' )
40
+ v2 = privtoaddr (k2 )
36
41
return k , v , k2 , v2
37
42
38
43
@@ -106,7 +111,7 @@ def get_transaction(gasprice=0, nonce=0):
106
111
k , v , k2 , v2 = accounts ()
107
112
tx = transactions .Transaction (
108
113
nonce , gasprice , startgas = 100000 ,
109
- to = v2 , value = utils . denoms .finney * 10 , data = '' ).sign (k )
114
+ to = v2 , value = denoms .finney * 10 , data = '' ).sign (k )
110
115
return tx
111
116
112
117
@@ -115,9 +120,19 @@ def store_block(blk):
115
120
assert blocks .get_block (env (blk .db ), blk .hash ) == blk
116
121
117
122
118
- def test_transfer (db ):
123
+ @pytest .mark .parametrize ('balance' , [
124
+ denoms .wei * 10000 ,
125
+ denoms .babbage ,
126
+ denoms .lovelace ,
127
+ denoms .shannon ,
128
+ denoms .szabo ,
129
+ denoms .finney ,
130
+ denoms .ether ,
131
+ denoms .turing
132
+ ])
133
+ def test_transfer (db , balance ):
119
134
k , v , k2 , v2 = accounts ()
120
- blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms . ether * 1 }})
135
+ blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : balance }})
121
136
b_v = blk .get_balance (v )
122
137
b_v2 = blk .get_balance (v2 )
123
138
value = 42
@@ -127,12 +142,20 @@ def test_transfer(db):
127
142
assert blk .get_balance (v2 ) == b_v2 + value
128
143
129
144
145
+ def test_alloc_too_big (db ):
146
+ k , v , k2 , v2 = accounts ()
147
+ blk = None
148
+ with pytest .raises (ValueError ):
149
+ blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : 2 ** 256 }})
150
+ assert blk is None
151
+
152
+
130
153
def test_failing_transfer (db ):
131
154
k , v , k2 , v2 = accounts ()
132
- blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
155
+ blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
133
156
b_v = blk .get_balance (v )
134
157
b_v2 = blk .get_balance (v2 )
135
- value = utils . denoms .ether * 2
158
+ value = denoms .ether * 2
136
159
# should fail
137
160
success = blk .transfer_value (v , v2 , value )
138
161
assert not success
@@ -149,19 +172,19 @@ def test_serialize_block(db):
149
172
150
173
def test_genesis (db , alt_db ):
151
174
k , v , k2 , v2 = accounts ()
152
- blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
175
+ blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
153
176
# sr = blk.state_root
154
177
assert blk .state .db .db == db .db
155
178
db .put (blk .hash , rlp .encode (blk ))
156
179
blk .state .db .commit ()
157
180
# assert sr in db
158
181
db .commit ()
159
182
# assert sr in db
160
- blk2 = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
183
+ blk2 = blocks .genesis (env (db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
161
184
blk3 = blocks .genesis (env (db ))
162
185
assert blk == blk2
163
186
assert blk != blk3
164
- blk2 = blocks .genesis (env (alt_db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
187
+ blk2 = blocks .genesis (env (alt_db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
165
188
blk3 = blocks .genesis (env (alt_db ))
166
189
assert blk == blk2
167
190
assert blk != blk3
@@ -184,21 +207,21 @@ def test_deserialize_commit(db):
184
207
185
208
def test_genesis_db (db , alt_db ):
186
209
k , v , k2 , v2 = accounts ()
187
- blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
210
+ blk = blocks .genesis (env (db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
188
211
store_block (blk )
189
- blk2 = blocks .genesis (env (db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
212
+ blk2 = blocks .genesis (env (db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
190
213
blk3 = blocks .genesis (env (db ))
191
214
assert blk == blk2
192
215
assert blk != blk3
193
- blk2 = blocks .genesis (env (alt_db ), start_alloc = {v : {"balance" : utils . denoms .ether * 1 }})
216
+ blk2 = blocks .genesis (env (alt_db ), start_alloc = {v : {"balance" : denoms .ether * 1 }})
194
217
blk3 = blocks .genesis (env (alt_db ))
195
218
assert blk == blk2
196
219
assert blk != blk3
197
220
198
221
199
222
def test_mine_block (db ):
200
223
k , v , k2 , v2 = accounts ()
201
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db )
224
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db )
202
225
store_block (blk )
203
226
blk2 = mine_next_block (blk , coinbase = v )
204
227
store_block (blk2 )
@@ -220,21 +243,21 @@ def test_block_serialization_with_transaction_empty_genesis(db):
220
243
221
244
def test_mine_block_with_transaction (db ):
222
245
k , v , k2 , v2 = accounts ()
223
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
246
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
224
247
store_block (blk )
225
248
tx = get_transaction ()
226
249
blk = mine_next_block (blk , transactions = [tx ])
227
250
assert tx in blk .get_transactions ()
228
251
assert blk .get_transaction (0 ) == tx
229
252
with pytest .raises (IndexError ):
230
253
blk .get_transaction (1 )
231
- assert blk .get_balance (v ) == utils . denoms .finney * 990
232
- assert blk .get_balance (v2 ) == utils . denoms .finney * 10
254
+ assert blk .get_balance (v ) == denoms .finney * 990
255
+ assert blk .get_balance (v2 ) == denoms .finney * 10
233
256
234
257
235
258
def test_mine_block_with_transaction2 (db ):
236
259
k , v , k2 , v2 = accounts ()
237
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db )
260
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db )
238
261
store_block (blk )
239
262
tx = get_transaction ()
240
263
blk2 = mine_next_block (blk , coinbase = v , transactions = [tx ])
@@ -253,18 +276,18 @@ def test_mine_block_with_transaction2(db):
253
276
254
277
def test_mine_block_with_transaction3 (db ):
255
278
k , v , k2 , v2 = accounts ()
256
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db )
279
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db )
257
280
store_block (blk )
258
281
tx = get_transaction ()
259
282
blk = mine_next_block (blk , transactions = [tx ])
260
283
assert tx in blk .get_transactions ()
261
- assert blk .get_balance (v ) == utils . denoms .finney * 990
262
- assert blk .get_balance (v2 ) == utils . denoms .finney * 10
284
+ assert blk .get_balance (v ) == denoms .finney * 990
285
+ assert blk .get_balance (v2 ) == denoms .finney * 10
263
286
264
287
265
288
def test_block_serialization_same_db (db ):
266
289
k , v , k2 , v2 = accounts ()
267
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db )
290
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db )
268
291
assert blk .hash == rlp .decode (rlp .encode (blk ), blocks .Block , env = env (db )).hash
269
292
store_block (blk )
270
293
blk2 = mine_next_block (blk )
@@ -299,20 +322,20 @@ def test_block_serialization_with_transaction_other_db():
299
322
k , v , k2 , v2 = accounts ()
300
323
a_db , b_db = db (), db ()
301
324
# mine two blocks
302
- a_blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = a_db )
325
+ a_blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = a_db )
303
326
store_block (a_blk )
304
327
tx = get_transaction ()
305
328
logger .debug ('a: state_root before tx %r' % hx (a_blk .state_root ))
306
- logger .debug ('a: state:\n %s' % utils . dump_state (a_blk .state ))
329
+ logger .debug ('a: state:\n %s' % dump_state (a_blk .state ))
307
330
a_blk2 = mine_next_block (a_blk , transactions = [tx ])
308
331
logger .debug ('a: state_root after tx %r' % hx (a_blk2 .state_root ))
309
- logger .debug ('a: state:\n %s' % utils . dump_state (a_blk2 .state ))
332
+ logger .debug ('a: state:\n %s' % dump_state (a_blk2 .state ))
310
333
assert tx in a_blk2 .get_transactions ()
311
334
store_block (a_blk2 )
312
335
assert tx in a_blk2 .get_transactions ()
313
336
logger .debug ('preparing receiving chain ---------------------' )
314
337
# receive in other db
315
- b_blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, b_db )
338
+ b_blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, b_db )
316
339
store_block (b_blk )
317
340
318
341
assert b_blk .number == 0
@@ -332,15 +355,15 @@ def test_block_serialization_with_transaction_other_db():
332
355
333
356
def test_transaction (db ):
334
357
k , v , k2 , v2 = accounts ()
335
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
358
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
336
359
store_block (blk )
337
360
blk = mine_next_block (blk )
338
361
tx = get_transaction ()
339
362
assert tx not in blk .get_transactions ()
340
363
success , res = processblock .apply_transaction (blk , tx )
341
364
assert tx in blk .get_transactions ()
342
- assert blk .get_balance (v ) == utils . denoms .finney * 990
343
- assert blk .get_balance (v2 ) == utils . denoms .finney * 10
365
+ assert blk .get_balance (v ) == denoms .finney * 990
366
+ assert blk .get_balance (v2 ) == denoms .finney * 10
344
367
345
368
346
369
def test_transaction_serialization ():
@@ -353,12 +376,12 @@ def test_transaction_serialization():
353
376
354
377
def test_invalid_transaction (db ):
355
378
k , v , k2 , v2 = accounts ()
356
- blk = mkquickgenesis ({v2 : {"balance" : utils . denoms .ether * 1 }}, db = db )
379
+ blk = mkquickgenesis ({v2 : {"balance" : denoms .ether * 1 }}, db = db )
357
380
store_block (blk )
358
381
tx = get_transaction ()
359
382
blk = mine_next_block (blk , transactions = [tx ])
360
383
assert blk .get_balance (v ) == 0
361
- assert blk .get_balance (v2 ) == utils . denoms .ether * 1
384
+ assert blk .get_balance (v2 ) == denoms .ether * 1
362
385
assert tx not in blk .get_transactions ()
363
386
364
387
@@ -371,7 +394,7 @@ def test_prevhash(db):
371
394
372
395
def test_genesis_chain (db ):
373
396
k , v , k2 , v2 = accounts ()
374
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
397
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
375
398
chain = Chain (env = env (blk .db ), genesis = blk )
376
399
377
400
assert chain .has_block (blk .hash )
@@ -392,7 +415,7 @@ def test_genesis_chain(db):
392
415
393
416
def test_simple_chain (db ):
394
417
k , v , k2 , v2 = accounts ()
395
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
418
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
396
419
store_block (blk )
397
420
chain = Chain (env = env (blk .db ), genesis = blk )
398
421
tx = get_transaction ()
@@ -437,15 +460,15 @@ def test_add_side_chain(db, alt_db):
437
460
"""
438
461
k , v , k2 , v2 = accounts ()
439
462
# Remote: mine one block
440
- R0 = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
463
+ R0 = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
441
464
store_block (R0 )
442
465
tx0 = get_transaction (nonce = 0 )
443
466
R1 = mine_next_block (R0 , transactions = [tx0 ])
444
467
store_block (R1 )
445
468
assert tx0 .hash in [x .hash for x in R1 .get_transactions ()]
446
469
447
470
# Local: mine two blocks
448
- L0 = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, alt_db )
471
+ L0 = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, alt_db )
449
472
chain = Chain (env = env (L0 .db ), genesis = L0 )
450
473
tx0 = get_transaction (nonce = 0 )
451
474
L1 = mine_next_block (L0 , transactions = [tx0 ])
@@ -470,7 +493,7 @@ def test_add_longer_side_chain(db, alt_db):
470
493
"""
471
494
k , v , k2 , v2 = accounts ()
472
495
# Remote: mine one block
473
- blk = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = db )
496
+ blk = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = db )
474
497
store_block (blk )
475
498
remote_blocks = [blk ]
476
499
for i in range (3 ):
@@ -479,7 +502,7 @@ def test_add_longer_side_chain(db, alt_db):
479
502
store_block (blk )
480
503
remote_blocks .append (blk )
481
504
# Local: mine two blocks
482
- L0 = mkquickgenesis ({v : {"balance" : utils . denoms .ether * 1 }}, db = alt_db )
505
+ L0 = mkquickgenesis ({v : {"balance" : denoms .ether * 1 }}, db = alt_db )
483
506
chain = Chain (env = env (L0 .db ), genesis = L0 )
484
507
tx0 = get_transaction (nonce = 0 )
485
508
L1 = mine_next_block (L0 , transactions = [tx0 ])
0 commit comments