From 661959c13ec422cbfb588d40f0cb57fd9ff5c5fa Mon Sep 17 00:00:00 2001 From: Hsiao-Wei Wang Date: Wed, 24 Jun 2020 18:18:50 +0800 Subject: [PATCH] Add `process_shard_block` verification --- specs/phase1/shard-transition.md | 7 ++---- .../test/phase1/sanity/test_shard_blocks.py | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/specs/phase1/shard-transition.md b/specs/phase1/shard-transition.md index 09e603c58..1ca5a9ab8 100644 --- a/specs/phase1/shard-transition.md +++ b/specs/phase1/shard-transition.md @@ -92,11 +92,8 @@ def process_shard_block(shard_state: ShardState, prev_gasprice = shard_state.gasprice shard_block_length = len(block.body) shard_state.gasprice = compute_updated_gasprice(prev_gasprice, uint64(shard_block_length)) - if shard_block_length == 0: - latest_block_root = shard_state.latest_block_root - else: - latest_block_root = hash_tree_root(block) - shard_state.latest_block_root = latest_block_root + if shard_block_length != 0: + shard_state.latest_block_root = hash_tree_root(block) ``` ## Fraud proofs diff --git a/tests/core/pyspec/eth2spec/test/phase1/sanity/test_shard_blocks.py b/tests/core/pyspec/eth2spec/test/phase1/sanity/test_shard_blocks.py index 40d7e0650..4d07f340a 100644 --- a/tests/core/pyspec/eth2spec/test/phase1/sanity/test_shard_blocks.py +++ b/tests/core/pyspec/eth2spec/test/phase1/sanity/test_shard_blocks.py @@ -16,7 +16,8 @@ from eth2spec.test.helpers.state import transition_to_valid_shard_slot def run_shard_blocks(spec, shard_state, signed_shard_block, beacon_parent_state, validate=True, valid=True): - yield 'pre', shard_state.copy() + pre_shard_state = shard_state.copy() + yield 'pre', pre_shard_state yield 'signed_shard_block', signed_shard_block yield 'validate', validate yield 'beacon_parent_state', beacon_parent_state @@ -29,10 +30,23 @@ def run_shard_blocks(spec, shard_state, signed_shard_block, shard_state, signed_shard_block, validate=validate, beacon_parent_state=beacon_parent_state) ) yield 'post', None + return + + spec.shard_state_transition(shard_state, signed_shard_block, + validate=validate, beacon_parent_state=beacon_parent_state) + yield 'post', shard_state + + # Verify `process_shard_block` + block = signed_shard_block.message + + assert shard_state.slot == block.slot + + shard_block_length = len(block.body) + assert shard_state.gasprice == spec.compute_updated_gasprice(pre_shard_state.gasprice, shard_block_length) + if shard_block_length != 0: + shard_state.latest_block_root == block.hash_tree_root() else: - spec.shard_state_transition(shard_state, signed_shard_block, - validate=validate, beacon_parent_state=beacon_parent_state) - yield 'post', shard_state + shard_state.latest_block_root == pre_shard_state.latest_block_root @with_all_phases_except([PHASE0])