Apply PR feedback from Danny and Terence

This commit is contained in:
Hsiao-Wei Wang 2020-06-03 22:31:16 +08:00
parent 142ba17451
commit 5c5cedd60d
No known key found for this signature in database
GPG Key ID: 95B070122902DEA4

View File

@ -6,7 +6,7 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Introduction](#introduction) - [Introduction](#introduction)
- [Fork choice](#fork-choice) - [Fork choice](#fork-choice)
@ -23,7 +23,7 @@
## Introduction ## Introduction
This document is the shard chain fork choice spec for part of Ethereum 2.0 Phase 1. This document is the shard chain fork choice spec for part of Ethereum 2.0 Phase 1. It assumes the [beacon chain fork choice spec](./fork-choice.md).
## Fork choice ## Fork choice
@ -59,9 +59,9 @@ def get_shard_latest_attesting_balance(store: Store, shard_store: ShardStore, ro
return Gwei(sum( return Gwei(sum(
state.validators[i].effective_balance for i in active_indices state.validators[i].effective_balance for i in active_indices
if ( if (
i in store.latest_messages and i in store.latest_messages
store.latest_messages[i].shard == shard_store.shard and and store.latest_messages[i].shard == shard_store.shard
get_shard_ancestor( and get_shard_ancestor(
store, shard_store, store.latest_messages[i].root, shard_store.blocks[root].slot store, shard_store, store.latest_messages[i].root, shard_store.blocks[root].slot
) == root ) == root
) )
@ -116,20 +116,25 @@ def get_shard_ancestor(store: Store, shard_store: ShardStore, root: Root, slot:
def on_shard_block(store: Store, shard_store: ShardStore, signed_shard_block: SignedShardBlock) -> None: def on_shard_block(store: Store, shard_store: ShardStore, signed_shard_block: SignedShardBlock) -> None:
shard_block = signed_shard_block.message shard_block = signed_shard_block.message
shard = shard_store.shard shard = shard_store.shard
# 1. Check shard parent exists
# Check shard
# TODO: check it in networking spec
assert shard_block.shard == shard
# Check shard parent exists
assert shard_block.shard_parent_root in shard_store.block_states assert shard_block.shard_parent_root in shard_store.block_states
pre_shard_state = shard_store.block_states[shard_block.shard_parent_root] pre_shard_state = shard_store.block_states[shard_block.shard_parent_root]
# 2. Check beacon parent exists # Check beacon parent exists
assert shard_block.beacon_parent_root in store.block_states assert shard_block.beacon_parent_root in store.block_states
beacon_state = store.block_states[shard_block.beacon_parent_root] beacon_state = store.block_states[shard_block.beacon_parent_root]
# 3. Check that block is later than the finalized shard state slot (optimization to reduce calls to get_ancestor) # Check that block is later than the finalized shard state slot (optimization to reduce calls to get_ancestor)
finalized_beacon_state = store.block_states[store.finalized_checkpoint.root] finalized_beacon_state = store.block_states[store.finalized_checkpoint.root]
finalized_shard_state = finalized_beacon_state.shard_states[shard] finalized_shard_state = finalized_beacon_state.shard_states[shard]
assert shard_block.slot > finalized_shard_state.slot assert shard_block.slot > finalized_shard_state.slot
# 4. Check block is a descendant of the finalized block at the checkpoint finalized slot # Check block is a descendant of the finalized block at the checkpoint finalized slot
finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)
assert ( assert (
get_ancestor(store, shard_block.beacon_parent_root, finalized_slot) == store.finalized_checkpoint.root get_ancestor(store, shard_block.beacon_parent_root, finalized_slot) == store.finalized_checkpoint.root