Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit 344132b

Browse files
committed
Add tests for transactions with all denominations
1 parent 5f22d02 commit 344132b

File tree

2 files changed

+56
-40
lines changed

2 files changed

+56
-40
lines changed

ethereum/tests/test_chain.py

Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@
66
from rlp.utils import decode_hex
77
from ethereum.utils import encode_hex
88
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+
)
1015
from ethereum.chain import Chain
1116
from ethereum.db import EphemDB
1217
from ethereum.tests.utils import new_db
@@ -29,10 +34,10 @@ def env(db):
2934

3035
@pytest.fixture(scope="module")
3136
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)
3641
return k, v, k2, v2
3742

3843

@@ -106,7 +111,7 @@ def get_transaction(gasprice=0, nonce=0):
106111
k, v, k2, v2 = accounts()
107112
tx = transactions.Transaction(
108113
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)
110115
return tx
111116

112117

@@ -115,9 +120,19 @@ def store_block(blk):
115120
assert blocks.get_block(env(blk.db), blk.hash) == blk
116121

117122

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):
119134
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}})
121136
b_v = blk.get_balance(v)
122137
b_v2 = blk.get_balance(v2)
123138
value = 42
@@ -129,10 +144,10 @@ def test_transfer(db):
129144

130145
def test_failing_transfer(db):
131146
k, v, k2, v2 = accounts()
132-
blk = blocks.genesis(env(db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
147+
blk = blocks.genesis(env(db), start_alloc={v: {"balance": denoms.ether * 1}})
133148
b_v = blk.get_balance(v)
134149
b_v2 = blk.get_balance(v2)
135-
value = utils.denoms.ether * 2
150+
value = denoms.ether * 2
136151
# should fail
137152
success = blk.transfer_value(v, v2, value)
138153
assert not success
@@ -149,19 +164,19 @@ def test_serialize_block(db):
149164

150165
def test_genesis(db, alt_db):
151166
k, v, k2, v2 = accounts()
152-
blk = blocks.genesis(env(db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
167+
blk = blocks.genesis(env(db), start_alloc={v: {"balance": denoms.ether * 1}})
153168
# sr = blk.state_root
154169
assert blk.state.db.db == db.db
155170
db.put(blk.hash, rlp.encode(blk))
156171
blk.state.db.commit()
157172
# assert sr in db
158173
db.commit()
159174
# assert sr in db
160-
blk2 = blocks.genesis(env(db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
175+
blk2 = blocks.genesis(env(db), start_alloc={v: {"balance": denoms.ether * 1}})
161176
blk3 = blocks.genesis(env(db))
162177
assert blk == blk2
163178
assert blk != blk3
164-
blk2 = blocks.genesis(env(alt_db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
179+
blk2 = blocks.genesis(env(alt_db), start_alloc={v: {"balance": denoms.ether * 1}})
165180
blk3 = blocks.genesis(env(alt_db))
166181
assert blk == blk2
167182
assert blk != blk3
@@ -184,21 +199,21 @@ def test_deserialize_commit(db):
184199

185200
def test_genesis_db(db, alt_db):
186201
k, v, k2, v2 = accounts()
187-
blk = blocks.genesis(env(db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
202+
blk = blocks.genesis(env(db), start_alloc={v: {"balance": denoms.ether * 1}})
188203
store_block(blk)
189-
blk2 = blocks.genesis(env(db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
204+
blk2 = blocks.genesis(env(db), start_alloc={v: {"balance": denoms.ether * 1}})
190205
blk3 = blocks.genesis(env(db))
191206
assert blk == blk2
192207
assert blk != blk3
193-
blk2 = blocks.genesis(env(alt_db), start_alloc={v: {"balance": utils.denoms.ether * 1}})
208+
blk2 = blocks.genesis(env(alt_db), start_alloc={v: {"balance": denoms.ether * 1}})
194209
blk3 = blocks.genesis(env(alt_db))
195210
assert blk == blk2
196211
assert blk != blk3
197212

198213

199214
def test_mine_block(db):
200215
k, v, k2, v2 = accounts()
201-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db)
216+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db)
202217
store_block(blk)
203218
blk2 = mine_next_block(blk, coinbase=v)
204219
store_block(blk2)
@@ -220,21 +235,21 @@ def test_block_serialization_with_transaction_empty_genesis(db):
220235

221236
def test_mine_block_with_transaction(db):
222237
k, v, k2, v2 = accounts()
223-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
238+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
224239
store_block(blk)
225240
tx = get_transaction()
226241
blk = mine_next_block(blk, transactions=[tx])
227242
assert tx in blk.get_transactions()
228243
assert blk.get_transaction(0) == tx
229244
with pytest.raises(IndexError):
230245
blk.get_transaction(1)
231-
assert blk.get_balance(v) == utils.denoms.finney * 990
232-
assert blk.get_balance(v2) == utils.denoms.finney * 10
246+
assert blk.get_balance(v) == denoms.finney * 990
247+
assert blk.get_balance(v2) == denoms.finney * 10
233248

234249

235250
def test_mine_block_with_transaction2(db):
236251
k, v, k2, v2 = accounts()
237-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db)
252+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db)
238253
store_block(blk)
239254
tx = get_transaction()
240255
blk2 = mine_next_block(blk, coinbase=v, transactions=[tx])
@@ -253,18 +268,18 @@ def test_mine_block_with_transaction2(db):
253268

254269
def test_mine_block_with_transaction3(db):
255270
k, v, k2, v2 = accounts()
256-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db)
271+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db)
257272
store_block(blk)
258273
tx = get_transaction()
259274
blk = mine_next_block(blk, transactions=[tx])
260275
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
276+
assert blk.get_balance(v) == denoms.finney * 990
277+
assert blk.get_balance(v2) == denoms.finney * 10
263278

264279

265280
def test_block_serialization_same_db(db):
266281
k, v, k2, v2 = accounts()
267-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db)
282+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db)
268283
assert blk.hash == rlp.decode(rlp.encode(blk), blocks.Block, env=env(db)).hash
269284
store_block(blk)
270285
blk2 = mine_next_block(blk)
@@ -299,20 +314,20 @@ def test_block_serialization_with_transaction_other_db():
299314
k, v, k2, v2 = accounts()
300315
a_db, b_db = db(), db()
301316
# mine two blocks
302-
a_blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=a_db)
317+
a_blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=a_db)
303318
store_block(a_blk)
304319
tx = get_transaction()
305320
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))
321+
logger.debug('a: state:\n%s' % dump_state(a_blk.state))
307322
a_blk2 = mine_next_block(a_blk, transactions=[tx])
308323
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))
324+
logger.debug('a: state:\n%s' % dump_state(a_blk2.state))
310325
assert tx in a_blk2.get_transactions()
311326
store_block(a_blk2)
312327
assert tx in a_blk2.get_transactions()
313328
logger.debug('preparing receiving chain ---------------------')
314329
# receive in other db
315-
b_blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, b_db)
330+
b_blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, b_db)
316331
store_block(b_blk)
317332

318333
assert b_blk.number == 0
@@ -332,15 +347,15 @@ def test_block_serialization_with_transaction_other_db():
332347

333348
def test_transaction(db):
334349
k, v, k2, v2 = accounts()
335-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
350+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
336351
store_block(blk)
337352
blk = mine_next_block(blk)
338353
tx = get_transaction()
339354
assert tx not in blk.get_transactions()
340355
success, res = processblock.apply_transaction(blk, tx)
341356
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
357+
assert blk.get_balance(v) == denoms.finney * 990
358+
assert blk.get_balance(v2) == denoms.finney * 10
344359

345360

346361
def test_transaction_serialization():
@@ -353,12 +368,12 @@ def test_transaction_serialization():
353368

354369
def test_invalid_transaction(db):
355370
k, v, k2, v2 = accounts()
356-
blk = mkquickgenesis({v2: {"balance": utils.denoms.ether * 1}}, db=db)
371+
blk = mkquickgenesis({v2: {"balance": denoms.ether * 1}}, db=db)
357372
store_block(blk)
358373
tx = get_transaction()
359374
blk = mine_next_block(blk, transactions=[tx])
360375
assert blk.get_balance(v) == 0
361-
assert blk.get_balance(v2) == utils.denoms.ether * 1
376+
assert blk.get_balance(v2) == denoms.ether * 1
362377
assert tx not in blk.get_transactions()
363378

364379

@@ -371,7 +386,7 @@ def test_prevhash(db):
371386

372387
def test_genesis_chain(db):
373388
k, v, k2, v2 = accounts()
374-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
389+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
375390
chain = Chain(env=env(blk.db), genesis=blk)
376391

377392
assert chain.has_block(blk.hash)
@@ -392,7 +407,7 @@ def test_genesis_chain(db):
392407

393408
def test_simple_chain(db):
394409
k, v, k2, v2 = accounts()
395-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
410+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
396411
store_block(blk)
397412
chain = Chain(env=env(blk.db), genesis=blk)
398413
tx = get_transaction()
@@ -437,15 +452,15 @@ def test_add_side_chain(db, alt_db):
437452
"""
438453
k, v, k2, v2 = accounts()
439454
# Remote: mine one block
440-
R0 = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
455+
R0 = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
441456
store_block(R0)
442457
tx0 = get_transaction(nonce=0)
443458
R1 = mine_next_block(R0, transactions=[tx0])
444459
store_block(R1)
445460
assert tx0.hash in [x.hash for x in R1.get_transactions()]
446461

447462
# Local: mine two blocks
448-
L0 = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, alt_db)
463+
L0 = mkquickgenesis({v: {"balance": denoms.ether * 1}}, alt_db)
449464
chain = Chain(env=env(L0.db), genesis=L0)
450465
tx0 = get_transaction(nonce=0)
451466
L1 = mine_next_block(L0, transactions=[tx0])
@@ -470,7 +485,7 @@ def test_add_longer_side_chain(db, alt_db):
470485
"""
471486
k, v, k2, v2 = accounts()
472487
# Remote: mine one block
473-
blk = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=db)
488+
blk = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=db)
474489
store_block(blk)
475490
remote_blocks = [blk]
476491
for i in range(3):
@@ -479,7 +494,7 @@ def test_add_longer_side_chain(db, alt_db):
479494
store_block(blk)
480495
remote_blocks.append(blk)
481496
# Local: mine two blocks
482-
L0 = mkquickgenesis({v: {"balance": utils.denoms.ether * 1}}, db=alt_db)
497+
L0 = mkquickgenesis({v: {"balance": denoms.ether * 1}}, db=alt_db)
483498
chain = Chain(env=env(L0.db), genesis=L0)
484499
tx0 = get_transaction(nonce=0)
485500
L1 = mine_next_block(L0, transactions=[tx0])

ethereum/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ def __init__(self):
483483
self.ether = 10 ** 18
484484
self.turing = 2 ** 256 - 1
485485

486+
486487
denoms = Denoms()
487488

488489

0 commit comments

Comments
 (0)