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

Commit c19a90f

Browse files
vubvub
authored andcommitted
Passing state and block tests
1 parent 81d37fc commit c19a90f

File tree

5 files changed

+23
-18
lines changed

5 files changed

+23
-18
lines changed

ethereum/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
# Blank account initial nonce
4545
ACCOUNT_INITIAL_NONCE=0,
4646
# Homestead fork (500k on livenet?)
47-
HOMESTEAD_FORK_BLKNUM=900000,
47+
HOMESTEAD_FORK_BLKNUM=1000000,
4848
HOMESTEAD_DIFF_ADJUSTMENT_CUTOFF=10,
4949
)
5050
assert default_config['NEPHEW_REWARD'] == \

ethereum/processblock.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,19 +228,20 @@ def _apply_msg(ext, msg, code):
228228
gas=msg.gas, value=msg.value,
229229
data=encode_hex(msg.data.extract_all()))
230230
if log_state.is_active('trace'):
231-
log_state.trace('MSG PRE STATE SENDER', account=msg.sender,
231+
log_state.trace('MSG PRE STATE SENDER', account=msg.sender.encode('hex'),
232232
bal=ext.get_balance(msg.sender),
233233
state=ext.log_storage(msg.sender))
234-
log_state.trace('MSG PRE STATE RECIPIENT', account=msg.to,
234+
log_state.trace('MSG PRE STATE RECIPIENT', account=msg.to.encode('hex'),
235235
bal=ext.get_balance(msg.to),
236236
state=ext.log_storage(msg.to))
237237
# log_state.trace('CODE', code=code)
238238
# Transfer value, instaquit if not enough
239239
snapshot = ext._block.snapshot()
240-
if not ext._block.transfer_value(msg.sender, msg.to, msg.value):
241-
log_msg.debug('MSG TRANSFER FAILED', have=ext.get_balance(msg.to),
242-
want=msg.value)
243-
return 1, msg.gas, []
240+
if msg.transfers_value:
241+
if not ext._block.transfer_value(msg.sender, msg.to, msg.value):
242+
log_msg.debug('MSG TRANSFER FAILED', have=ext.get_balance(msg.to),
243+
want=msg.value)
244+
return 1, msg.gas, []
244245
# Main loop
245246
if msg.code_address in specials.specials:
246247
res, gas, dat = specials.specials[msg.code_address](ext, msg)
@@ -252,10 +253,10 @@ def _apply_msg(ext, msg, code):
252253
log_msg.debug('MSG APPLIED', gas_remained=gas,
253254
sender=msg.sender, to=msg.to, data=dat)
254255
if log_state.is_active('trace'):
255-
log_state.trace('MSG PRE STATE SENDER', account=msg.sender,
256+
log_state.trace('MSG POST STATE SENDER', account=msg.sender.encode('hex'),
256257
bal=ext.get_balance(msg.sender),
257258
state=ext.log_storage(msg.sender))
258-
log_state.trace('MSG PRE STATE RECIPIENT', account=msg.to,
259+
log_state.trace('MSG POST STATE RECIPIENT', account=msg.to.encode('hex'),
259260
bal=ext.get_balance(msg.to),
260261
state=ext.log_storage(msg.to))
261262

@@ -267,6 +268,7 @@ def _apply_msg(ext, msg, code):
267268

268269

269270
def create_contract(ext, msg):
271+
log_msg.debug('CONTRACT CREATION')
270272
#print('CREATING WITH GAS', msg.gas)
271273
sender = decode_hex(msg.sender) if len(msg.sender) == 40 else msg.sender
272274
if ext.tx_origin != msg.sender:
@@ -295,7 +297,7 @@ def create_contract(ext, msg):
295297
gas -= gcost
296298
else:
297299
dat = []
298-
log_msg.debug('CONTRACT CREATION OOG', have=gas, want=gcost)
300+
log_msg.debug('CONTRACT CREATION OOG', have=gas, want=gcost, block_number=ext._block.number)
299301
if ext._block.number >= ext._block.config['HOMESTEAD_FORK_BLKNUM']:
300302
ext._block.revert(snapshot)
301303
return 0, 0, b''

ethereum/tests/test_blocks.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def run_block_test(params, config_overrides = {}):
7272
old_config = copy.deepcopy(env.config)
7373
for k, v in config_overrides.items():
7474
env.config[k] = v
75+
b2 = None
7576
for blk in params["blocks"]:
7677
if 'blockHeader' not in blk:
7778
try:
@@ -91,7 +92,8 @@ def run_block_test(params, config_overrides = {}):
9192
assert b2.validate_uncles()
9293
blockmap[b2.hash] = b2
9394
env.db.put(b2.hash, rlp.encode(b2))
94-
print 'Block %d with state root %s' % (b2.number, b2.state.root_hash.encode('hex'))
95+
if b2:
96+
print 'Block %d with state root %s' % (b2.number, b2.state.root_hash.encode('hex'))
9597
# blkdict = b.to_dict(False, True, False, True)
9698
# assert blk["blockHeader"] == \
9799
# translate_keys(blkdict["header"], translator_list, lambda y, x: x, [])
@@ -106,7 +108,7 @@ def run_block_test(params, config_overrides = {}):
106108

107109
def do_test_block(filename, testname=None, testdata=None, limit=99999999):
108110
print('\nrunning test:%r in %r' % (testname, filename))
109-
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0} if 'Homestead' in filename else {})
111+
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0 if 'Homestead' in filename else 5 if 'TestNetwork' in filename else 1000000 })
110112

111113
excludes = [('bcWalletTest.json', u'walletReorganizeOwners'),
112114
('bl10251623GO.json', u'randomBlockTest'),
@@ -122,13 +124,13 @@ def do_test_block(filename, testname=None, testdata=None, limit=99999999):
122124
for testname, testdata in list(tests.items()):
123125
if testname == sys.argv[2]:
124126
print("Testing: %s %s" % (filename, testname))
125-
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0} if 'Homestead' in filename else {})
127+
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0 if 'Homestead' in filename else 5 if 'TestNetwork' in filename else 1000000 })
126128
else:
127129
for filename, tests in list(fixtures.items()):
128130
for testname, testdata in list(tests.items()):
129131
if (filename.split('/')[-1], testname) not in excludes:
130132
print("Testing: %s %s" % (filename, testname))
131-
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0} if 'Homestead' in filename else {})
133+
run_block_test(testdata, {'HOMESTEAD_FORK_BLKNUM':0 if 'Homestead' in filename else 5 if 'TestNetwork' in filename else 1000000 })
132134
else:
133135
fixtures = testutils.get_tests_from_file_or_dir(
134136
os.path.join(testutils.fixture_path, 'BlockchainTests'))

ethereum/vm.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ def extract_copy(self, mem, memstart, datastart, size):
5555

5656
class Message(object):
5757

58-
def __init__(self, sender, to, value, gas, data,
59-
depth=0, code_address=None, is_create=False):
58+
def __init__(self, sender, to, value, gas, data, depth=0,
59+
code_address=None, is_create=False, transfers_value=True):
6060
self.sender = sender
6161
self.to = to
6262
self.value = value
@@ -66,6 +66,7 @@ def __init__(self, sender, to, value, gas, data,
6666
self.logs = []
6767
self.code_address = code_address
6868
self.is_create = is_create
69+
self.transfers_value = transfers_value
6970

7071
def __repr__(self):
7172
return '<Message(to:%s...)>' % self.to[:8]
@@ -555,7 +556,7 @@ def vm_execute(ext, msg, code):
555556
cd = CallData(mem, meminstart, meminsz)
556557
if ext.post_homestead_hardfork() and op == 'DELEGATECALL':
557558
call_msg = Message(msg.sender, msg.to, msg.value, submsg_gas, cd,
558-
msg.depth + 1, code_address=to)
559+
msg.depth + 1, code_address=to, transfers_value=False)
559560
elif op == 'DELEGATECALL':
560561
return vm_exception('OPCODE INACTIVE')
561562
else:

fixtures

Submodule fixtures updated 45 files

0 commit comments

Comments
 (0)