mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-02-20 22:38:11 +00:00
enforce beacon state at epoch boundary slot
This commit is contained in:
parent
dc4869349c
commit
3c3ae9ac02
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user