fix up previous epoch logic around genesis (#672)

This commit is contained in:
Danny Ryan 2019-02-22 12:51:09 -07:00 committed by Justin
parent 06e6496bca
commit 060e3c36c5
1 changed files with 8 additions and 7 deletions

View File

@ -683,7 +683,7 @@ def get_previous_epoch(state: BeaconState) -> Epoch:
"""` """`
Return the previous epoch of the given ``state``. Return the previous epoch of the given ``state``.
""" """
return get_current_epoch(state) - 1 return max(get_current_epoch(state) - 1, GENESIS_EPOCH)
``` ```
### `get_current_epoch` ### `get_current_epoch`
@ -865,16 +865,16 @@ def get_crosslink_committees_at_slot(state: BeaconState,
assert previous_epoch <= epoch <= next_epoch assert previous_epoch <= epoch <= next_epoch
if epoch == previous_epoch: if epoch == current_epoch:
committees_per_epoch = get_previous_epoch_committee_count(state)
seed = state.previous_shuffling_seed
shuffling_epoch = state.previous_shuffling_epoch
shuffling_start_shard = state.previous_shuffling_start_shard
elif epoch == current_epoch:
committees_per_epoch = get_current_epoch_committee_count(state) committees_per_epoch = get_current_epoch_committee_count(state)
seed = state.current_shuffling_seed seed = state.current_shuffling_seed
shuffling_epoch = state.current_shuffling_epoch shuffling_epoch = state.current_shuffling_epoch
shuffling_start_shard = state.current_shuffling_start_shard shuffling_start_shard = state.current_shuffling_start_shard
elif epoch == previous_epoch:
committees_per_epoch = get_previous_epoch_committee_count(state)
seed = state.previous_shuffling_seed
shuffling_epoch = state.previous_shuffling_epoch
shuffling_start_shard = state.previous_shuffling_start_shard
elif epoch == next_epoch: elif epoch == next_epoch:
current_committees_per_epoch = get_current_epoch_committee_count(state) current_committees_per_epoch = get_current_epoch_committee_count(state)
committees_per_epoch = get_next_epoch_committee_count(state) committees_per_epoch = get_next_epoch_committee_count(state)
@ -1657,6 +1657,7 @@ Verify that `len(block.body.attestations) <= MAX_ATTESTATIONS`.
For each `attestation` in `block.body.attestations`: For each `attestation` in `block.body.attestations`:
* Verify that `attestation.data.slot >= GENESIS_SLOT`.
* Verify that `attestation.data.slot + MIN_ATTESTATION_INCLUSION_DELAY <= state.slot`. * Verify that `attestation.data.slot + MIN_ATTESTATION_INCLUSION_DELAY <= state.slot`.
* Verify that `state.slot < attestation.data.slot + SLOTS_PER_EPOCH. * Verify that `state.slot < attestation.data.slot + SLOTS_PER_EPOCH.
* Verify that `attestation.data.justified_epoch` is equal to `state.justified_epoch if slot_to_epoch(attestation.data.slot + 1) >= get_current_epoch(state) else state.previous_justified_epoch`. * Verify that `attestation.data.justified_epoch` is equal to `state.justified_epoch if slot_to_epoch(attestation.data.slot + 1) >= get_current_epoch(state) else state.previous_justified_epoch`.