mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
minimize the number of places we are calling update_pubkey_cache (#1626)
## Issue Addressed - Resolves #1080 ## Proposed Changes - Call `update_pubkey_cache` only in the `build_all_caches` method and `get_validator_index` method. ## Additional Info This does reduce the number of places the cache is updated, making it simpler. But the `get_validator_index` method is used a couple times when we are iterating through the entire validator registry (or set of active validators). Before, we would only call `update_pubkey_cache` once before iterating through all validators. So I'm not _totally_ sure this change is worth it.
This commit is contained in:
@@ -192,12 +192,11 @@ pub fn get_all_validators<T: BeaconChainTypes>(
|
||||
};
|
||||
|
||||
let mut state = get_state_from_root_opt(&ctx.beacon_chain, state_root_opt)?;
|
||||
state.update_pubkey_cache()?;
|
||||
|
||||
state
|
||||
.validators
|
||||
let validators = state.validators.clone();
|
||||
validators
|
||||
.iter()
|
||||
.map(|validator| validator_response_by_pubkey(&state, validator.pubkey.clone()))
|
||||
.map(|validator| validator_response_by_pubkey(&mut state, validator.pubkey.clone()))
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
}
|
||||
|
||||
@@ -215,13 +214,14 @@ pub fn get_active_validators<T: BeaconChainTypes>(
|
||||
};
|
||||
|
||||
let mut state = get_state_from_root_opt(&ctx.beacon_chain, state_root_opt)?;
|
||||
state.update_pubkey_cache()?;
|
||||
|
||||
state
|
||||
.validators
|
||||
let validators = state.validators.clone();
|
||||
let current_epoch = state.current_epoch();
|
||||
|
||||
validators
|
||||
.iter()
|
||||
.filter(|validator| validator.is_active_at(state.current_epoch()))
|
||||
.map(|validator| validator_response_by_pubkey(&state, validator.pubkey.clone()))
|
||||
.filter(|validator| validator.is_active_at(current_epoch))
|
||||
.map(|validator| validator_response_by_pubkey(&mut state, validator.pubkey.clone()))
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
}
|
||||
|
||||
@@ -279,11 +279,10 @@ fn validator_responses_by_pubkey<T: BeaconChainTypes>(
|
||||
validator_pubkeys: Vec<PublicKeyBytes>,
|
||||
) -> Result<Vec<ValidatorResponse>, ApiError> {
|
||||
let mut state = get_state_from_root_opt(beacon_chain, state_root_opt)?;
|
||||
state.update_pubkey_cache()?;
|
||||
|
||||
validator_pubkeys
|
||||
.into_iter()
|
||||
.map(|validator_pubkey| validator_response_by_pubkey(&state, validator_pubkey))
|
||||
.map(|validator_pubkey| validator_response_by_pubkey(&mut state, validator_pubkey))
|
||||
.collect::<Result<Vec<_>, ApiError>>()
|
||||
}
|
||||
|
||||
@@ -291,7 +290,7 @@ fn validator_responses_by_pubkey<T: BeaconChainTypes>(
|
||||
///
|
||||
/// The provided `state` must have a fully up-to-date pubkey cache.
|
||||
fn validator_response_by_pubkey<E: EthSpec>(
|
||||
state: &BeaconState<E>,
|
||||
state: &mut BeaconState<E>,
|
||||
validator_pubkey: PublicKeyBytes,
|
||||
) -> Result<ValidatorResponse, ApiError> {
|
||||
let validator_index_opt = state
|
||||
|
||||
@@ -92,10 +92,6 @@ pub fn post_individual_votes<T: BeaconChainTypes>(
|
||||
let mut validator_statuses = ValidatorStatuses::new(&state, spec)?;
|
||||
validator_statuses.process_attestations(&state, spec)?;
|
||||
|
||||
state.update_pubkey_cache().map_err(|e| {
|
||||
ApiError::ServerError(format!("Unable to build pubkey cache: {:?}", e))
|
||||
})?;
|
||||
|
||||
body.pubkeys
|
||||
.into_iter()
|
||||
.map(|pubkey| {
|
||||
|
||||
@@ -156,9 +156,6 @@ fn return_validator_duties<T: BeaconChainTypes>(
|
||||
state
|
||||
.build_committee_cache(relative_epoch, &beacon_chain.spec)
|
||||
.map_err(|e| ApiError::ServerError(format!("Unable to build committee cache: {:?}", e)))?;
|
||||
state
|
||||
.update_pubkey_cache()
|
||||
.map_err(|e| ApiError::ServerError(format!("Unable to build pubkey cache: {:?}", e)))?;
|
||||
|
||||
// Get a list of all validators for this epoch.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user