From 3c3ae9ac02ed896b59b03c95f60778c6f4f22f8b Mon Sep 17 00:00:00 2001 From: Danny Ryan Date: Sat, 5 Oct 2019 07:22:20 +0900 Subject: [PATCH] enforce beacon state at epoch boundary slot --- specs/core/1_shard-data-chains.md | 16 ++++++++++------ .../eth2spec/test/helpers/phase1/shard_block.py | 11 +++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/specs/core/1_shard-data-chains.md b/specs/core/1_shard-data-chains.md index a31f16880..69962b6fe 100644 --- a/specs/core/1_shard-data-chains.md +++ b/specs/core/1_shard-data-chains.md @@ -339,12 +339,16 @@ def process_shard_block_header(beacon_state: BeaconState, shard_state: ShardStat assert block.slot == shard_state.slot # Verify the beacon chain root epoch = compute_epoch_of_shard_slot(shard_state.slot) - assert epoch == compute_epoch_of_slot(beacon_state.slot) - if epoch * SLOTS_PER_EPOCH == beacon_state.slot: - beacon_block_root = signing_root(beacon_state.latest_block_header) - else: - beacon_block_root = get_block_root(beacon_state, epoch) - assert block.beacon_block_root == beacon_block_root + assert epoch * SLOTS_PER_EPOCH == beacon_state.slot + beacon_block_header = BeaconBlockHeader( + slot=beacon_state.latest_block_header.slot, + parent_root=beacon_state.latest_block_header.parent_root, + state_root=beacon_state.latest_block_header.state_root, + body_root=beacon_state.latest_block_header.body_root, + ) + if beacon_block_header.state_root == Bytes32(): + beacon_block_header.state_root = hash_tree_root(beacon_state) + assert block.beacon_block_root == signing_root(beacon_block_header) # Verify the parent root assert block.parent_root == signing_root(shard_state.latest_block_header) # Save current block as the new latest block diff --git a/test_libs/pyspec/eth2spec/test/helpers/phase1/shard_block.py b/test_libs/pyspec/eth2spec/test/helpers/phase1/shard_block.py index 834adc93f..7955c613e 100644 --- a/test_libs/pyspec/eth2spec/test/helpers/phase1/shard_block.py +++ b/test_libs/pyspec/eth2spec/test/helpers/phase1/shard_block.py @@ -41,14 +41,13 @@ def build_empty_shard_block(spec, if slot is None: slot = shard_state.slot - epoch = spec.compute_epoch_of_shard_slot(slot) - if epoch * spec.SLOTS_PER_EPOCH == beacon_state.slot: - beacon_block_root = spec.signing_root(beacon_state.latest_block_header) - else: - beacon_block_root = spec.get_block_root(beacon_state, epoch) + previous_beacon_header = deepcopy(beacon_state.latest_block_header) + if previous_beacon_header.state_root == spec.Bytes32(): + previous_beacon_header.state_root = beacon_state.hash_tree_root() + beacon_block_root = spec.signing_root(previous_beacon_header) previous_block_header = deepcopy(shard_state.latest_block_header) - if previous_block_header.state_root == spec.Hash(): + if previous_block_header.state_root == spec.Bytes32(): previous_block_header.state_root = shard_state.hash_tree_root() parent_root = signing_root(previous_block_header)