Update to spec v0.8.3
This commit is contained in:
parent
5a7903a377
commit
4d2cdc9492
@ -17,11 +17,9 @@ pub fn get_attesting_indices<T: EthSpec>(
|
|||||||
target_relative_epoch,
|
target_relative_epoch,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
/* TODO(freeze): re-enable this?
|
if bitlist.len() != committee.committee.len() {
|
||||||
if bitlist.len() > committee.committee.len() {
|
|
||||||
return Err(BeaconStateError::InvalidBitfield);
|
return Err(BeaconStateError::InvalidBitfield);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
Ok(committee
|
Ok(committee
|
||||||
.committee
|
.committee
|
||||||
|
@ -3,7 +3,7 @@ use types::*;
|
|||||||
|
|
||||||
/// Return the compact committee root at `relative_epoch`.
|
/// Return the compact committee root at `relative_epoch`.
|
||||||
///
|
///
|
||||||
/// Spec v0.8.0
|
/// Spec v0.8.3
|
||||||
pub fn get_compact_committees_root<T: EthSpec>(
|
pub fn get_compact_committees_root<T: EthSpec>(
|
||||||
state: &BeaconState<T>,
|
state: &BeaconState<T>,
|
||||||
relative_epoch: RelativeEpoch,
|
relative_epoch: RelativeEpoch,
|
||||||
@ -11,28 +11,13 @@ pub fn get_compact_committees_root<T: EthSpec>(
|
|||||||
) -> Result<Hash256, BeaconStateError> {
|
) -> Result<Hash256, BeaconStateError> {
|
||||||
let mut committees =
|
let mut committees =
|
||||||
FixedVector::<_, T::ShardCount>::from_elem(CompactCommittee::<T>::default());
|
FixedVector::<_, T::ShardCount>::from_elem(CompactCommittee::<T>::default());
|
||||||
// FIXME: this is a spec bug, whereby the start shard for the epoch after the next epoch
|
let start_shard = state.get_epoch_start_shard(relative_epoch)?;
|
||||||
// is mistakenly used. The start shard from the cache SHOULD work.
|
|
||||||
// Waiting on a release to fix https://github.com/ethereum/eth2.0-specs/issues/1315
|
|
||||||
let start_shard = if relative_epoch == RelativeEpoch::Next {
|
|
||||||
state.next_epoch_start_shard(spec)?
|
|
||||||
} else {
|
|
||||||
state.get_epoch_start_shard(relative_epoch)?
|
|
||||||
};
|
|
||||||
|
|
||||||
for committee_number in 0..state.get_committee_count(relative_epoch)? {
|
for committee_number in 0..state.get_committee_count(relative_epoch)? {
|
||||||
let shard = (start_shard + committee_number) % T::ShardCount::to_u64();
|
let shard = (start_shard + committee_number) % T::ShardCount::to_u64();
|
||||||
// FIXME: this is a partial workaround for the above, but it only works in the case
|
|
||||||
// where there's a committee for every shard in every epoch. It works for the minimal
|
|
||||||
// tests but not the mainnet ones.
|
|
||||||
let fake_shard = if relative_epoch == RelativeEpoch::Next {
|
|
||||||
(shard + 1) % T::ShardCount::to_u64()
|
|
||||||
} else {
|
|
||||||
shard
|
|
||||||
};
|
|
||||||
|
|
||||||
for &index in state
|
for &index in state
|
||||||
.get_crosslink_committee_for_shard(fake_shard, relative_epoch)?
|
.get_crosslink_committee_for_shard(shard, relative_epoch)?
|
||||||
.committee
|
.committee
|
||||||
{
|
{
|
||||||
let validator = state
|
let validator = state
|
||||||
|
@ -11,6 +11,8 @@ pub fn get_indexed_attestation<T: EthSpec>(
|
|||||||
state: &BeaconState<T>,
|
state: &BeaconState<T>,
|
||||||
attestation: &Attestation<T>,
|
attestation: &Attestation<T>,
|
||||||
) -> Result<IndexedAttestation<T>, Error> {
|
) -> Result<IndexedAttestation<T>, Error> {
|
||||||
|
// Note: we rely on both calls to `get_attesting_indices` to check the bitfield lengths
|
||||||
|
// against the committee length
|
||||||
let attesting_indices =
|
let attesting_indices =
|
||||||
get_attesting_indices(state, &attestation.data, &attestation.aggregation_bits)?;
|
get_attesting_indices(state, &attestation.data, &attestation.aggregation_bits)?;
|
||||||
|
|
||||||
|
@ -218,9 +218,6 @@ pub fn process_final_updates<T: EthSpec>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update start shard.
|
|
||||||
state.start_shard = state.next_epoch_start_shard(spec)?;
|
|
||||||
|
|
||||||
// Set active index root
|
// Set active index root
|
||||||
let index_epoch = next_epoch + spec.activation_exit_delay;
|
let index_epoch = next_epoch + spec.activation_exit_delay;
|
||||||
let indices_list = VariableList::<usize, T::ValidatorRegistryLimit>::from(
|
let indices_list = VariableList::<usize, T::ValidatorRegistryLimit>::from(
|
||||||
@ -252,6 +249,9 @@ pub fn process_final_updates<T: EthSpec>(
|
|||||||
.push(Hash256::from_slice(&historical_batch.tree_hash_root()))?;
|
.push(Hash256::from_slice(&historical_batch.tree_hash_root()))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update start shard.
|
||||||
|
state.start_shard = state.get_epoch_start_shard(RelativeEpoch::Next)?;
|
||||||
|
|
||||||
// Rotate current/previous epoch attestations
|
// Rotate current/previous epoch attestations
|
||||||
state.previous_epoch_attestations =
|
state.previous_epoch_attestations =
|
||||||
std::mem::replace(&mut state.current_epoch_attestations, VariableList::empty());
|
std::mem::replace(&mut state.current_epoch_attestations, VariableList::empty());
|
||||||
|
@ -298,14 +298,6 @@ impl<T: EthSpec> BeaconState<T> {
|
|||||||
Ok(cache.epoch_start_shard())
|
Ok(cache.epoch_start_shard())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn next_epoch_start_shard(&self, spec: &ChainSpec) -> Result<u64, Error> {
|
|
||||||
let cache = self.cache(RelativeEpoch::Current)?;
|
|
||||||
let active_validator_count = cache.active_validator_count();
|
|
||||||
let shard_delta = T::get_shard_delta(active_validator_count, spec.target_committee_size);
|
|
||||||
|
|
||||||
Ok((self.start_shard + shard_delta) % T::ShardCount::to_u64())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the slot of an attestation.
|
/// Get the slot of an attestation.
|
||||||
///
|
///
|
||||||
/// Note: Utilizes the cache and will fail if the appropriate cache is not initialized.
|
/// Note: Utilizes the cache and will fail if the appropriate cache is not initialized.
|
||||||
|
Loading…
Reference in New Issue
Block a user