From e2f4e32332de6ff28815b69dba861c292686222a Mon Sep 17 00:00:00 2001 From: Danny Ryan Date: Wed, 27 Feb 2019 11:27:23 -0700 Subject: [PATCH 1/3] fix committee start shard bug --- specs/core/0_beacon-chain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/core/0_beacon-chain.md b/specs/core/0_beacon-chain.md index e8347704e1..05bb37f481 100644 --- a/specs/core/0_beacon-chain.md +++ b/specs/core/0_beacon-chain.md @@ -1978,8 +1978,8 @@ def update_validator_registry(state: BeaconState) -> None: and perform the following updates: -* Set `state.current_shuffling_epoch = next_epoch` * Set `state.current_shuffling_start_shard = (state.current_shuffling_start_shard + get_current_epoch_committee_count(state)) % SHARD_COUNT` +* Set `state.current_shuffling_epoch = next_epoch` * Set `state.current_shuffling_seed = generate_seed(state, state.current_shuffling_epoch)` If a validator registry update does _not_ happen do the following: From c9ac8170f018be1390bf66a172ee45b794b760d4 Mon Sep 17 00:00:00 2001 From: Danny Ryan Date: Wed, 27 Feb 2019 11:37:54 -0700 Subject: [PATCH 2/3] ensure that next committee assignemtns is stable when need to be --- specs/core/0_beacon-chain.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/specs/core/0_beacon-chain.md b/specs/core/0_beacon-chain.md index 05bb37f481..7d26c06f90 100644 --- a/specs/core/0_beacon-chain.md +++ b/specs/core/0_beacon-chain.md @@ -876,18 +876,21 @@ def get_crosslink_committees_at_slot(state: BeaconState, shuffling_epoch = state.previous_shuffling_epoch shuffling_start_shard = state.previous_shuffling_start_shard elif epoch == next_epoch: - current_committees_per_epoch = get_current_epoch_committee_count(state) - committees_per_epoch = get_next_epoch_committee_count(state) - shuffling_epoch = next_epoch - epochs_since_last_registry_update = current_epoch - state.validator_registry_update_epoch if registry_change: + committees_per_epoch = get_next_epoch_committee_count(state) + shuffling_epoch = next_epoch seed = generate_seed(state, next_epoch) + current_committees_per_epoch = get_current_epoch_committee_count(state) shuffling_start_shard = (state.current_shuffling_start_shard + current_committees_per_epoch) % SHARD_COUNT elif epochs_since_last_registry_update > 1 and is_power_of_two(epochs_since_last_registry_update): + committees_per_epoch = get_next_epoch_committee_count(state) + shuffling_epoch = next_epoch seed = generate_seed(state, next_epoch) shuffling_start_shard = state.current_shuffling_start_shard else: + committees_per_epoch = get_current_epoch_committee_count(state) + shuffling_epoch = state.current_shuffling_epoch seed = state.current_shuffling_seed shuffling_start_shard = state.current_shuffling_start_shard From dbbfb938735a328d4ebad090d18eb7d8c3601f4b Mon Sep 17 00:00:00 2001 From: Hsiao-Wei Wang Date: Thu, 28 Feb 2019 19:07:37 +0800 Subject: [PATCH 3/3] Order by `committees_per_epoch`, `seed`, `shuffling_epoch`, and `shuffling_start_shard` --- specs/core/0_beacon-chain.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/specs/core/0_beacon-chain.md b/specs/core/0_beacon-chain.md index 7d26c06f90..7ab7e42c50 100644 --- a/specs/core/0_beacon-chain.md +++ b/specs/core/0_beacon-chain.md @@ -55,6 +55,7 @@ - [Helper functions](#helper-functions) - [`hash`](#hash) - [`hash_tree_root`](#hash_tree_root) + - [`signed_root`](#signed_root) - [`slot_to_epoch`](#slot_to_epoch) - [`get_previous_epoch`](#get_previous_epoch) - [`get_current_epoch`](#get_current_epoch) @@ -879,19 +880,19 @@ def get_crosslink_committees_at_slot(state: BeaconState, epochs_since_last_registry_update = current_epoch - state.validator_registry_update_epoch if registry_change: committees_per_epoch = get_next_epoch_committee_count(state) - shuffling_epoch = next_epoch seed = generate_seed(state, next_epoch) + shuffling_epoch = next_epoch current_committees_per_epoch = get_current_epoch_committee_count(state) shuffling_start_shard = (state.current_shuffling_start_shard + current_committees_per_epoch) % SHARD_COUNT elif epochs_since_last_registry_update > 1 and is_power_of_two(epochs_since_last_registry_update): committees_per_epoch = get_next_epoch_committee_count(state) - shuffling_epoch = next_epoch seed = generate_seed(state, next_epoch) + shuffling_epoch = next_epoch shuffling_start_shard = state.current_shuffling_start_shard else: committees_per_epoch = get_current_epoch_committee_count(state) - shuffling_epoch = state.current_shuffling_epoch seed = state.current_shuffling_seed + shuffling_epoch = state.current_shuffling_epoch shuffling_start_shard = state.current_shuffling_start_shard shuffling = get_shuffling(