mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-21 05:44:44 +00:00
## Issue Addressed #4512 Which issue # does this PR address? ## Proposed Changes Add inactivity calculation for Altair Please list or describe the changes introduced by this PR. Add inactivity calculation for Altair ## Additional Info Please provide any additional information. For example, future considerations or information useful for reviewers. Co-authored-by: Jimmy Chen <jchen.tc@gmail.com>
This commit is contained in:
@@ -5,6 +5,7 @@ use participation_cache::ParticipationCache;
|
||||
use safe_arith::SafeArith;
|
||||
use serde_utils::quoted_u64::Quoted;
|
||||
use slog::debug;
|
||||
use state_processing::per_epoch_processing::altair::process_inactivity_updates;
|
||||
use state_processing::{
|
||||
common::altair::BaseRewardPerIncrement,
|
||||
per_epoch_processing::altair::{participation_cache, rewards_and_penalties::get_flag_weight},
|
||||
@@ -124,6 +125,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
|
||||
// Calculate ideal_rewards
|
||||
let participation_cache = ParticipationCache::new(&state, spec)?;
|
||||
process_inactivity_updates(&mut state, &participation_cache, spec)?;
|
||||
|
||||
let previous_epoch = state.previous_epoch();
|
||||
|
||||
@@ -190,6 +192,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
let mut head_reward = 0i64;
|
||||
let mut target_reward = 0i64;
|
||||
let mut source_reward = 0i64;
|
||||
let mut inactivity_penalty = 0i64;
|
||||
|
||||
if eligible {
|
||||
let effective_balance = state.get_effective_balance(*validator_index)?;
|
||||
@@ -215,6 +218,14 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
head_reward = 0;
|
||||
} else if flag_index == TIMELY_TARGET_FLAG_INDEX {
|
||||
target_reward = *penalty;
|
||||
|
||||
let penalty_numerator = effective_balance
|
||||
.safe_mul(state.get_inactivity_score(*validator_index)?)?;
|
||||
let penalty_denominator = spec
|
||||
.inactivity_score_bias
|
||||
.safe_mul(spec.inactivity_penalty_quotient_for_state(&state))?;
|
||||
inactivity_penalty =
|
||||
-(penalty_numerator.safe_div(penalty_denominator)? as i64);
|
||||
} else if flag_index == TIMELY_SOURCE_FLAG_INDEX {
|
||||
source_reward = *penalty;
|
||||
}
|
||||
@@ -226,8 +237,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
target: target_reward,
|
||||
source: source_reward,
|
||||
inclusion_delay: None,
|
||||
// TODO: altair calculation logic needs to be updated to include inactivity penalty
|
||||
inactivity: 0,
|
||||
inactivity: inactivity_penalty,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -250,7 +260,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
target: 0,
|
||||
source: 0,
|
||||
inclusion_delay: None,
|
||||
// TODO: altair calculation logic needs to be updated to include inactivity penalty
|
||||
inactivity: 0,
|
||||
});
|
||||
match *flag_index {
|
||||
|
||||
@@ -2350,6 +2350,29 @@ where
|
||||
.await
|
||||
}
|
||||
|
||||
/// Uses `Self::extend_chain` to `num_slots` blocks.
|
||||
///
|
||||
/// Utilizes:
|
||||
///
|
||||
/// - BlockStrategy::OnCanonicalHead,
|
||||
/// - AttestationStrategy::SomeValidators(validators),
|
||||
pub async fn extend_slots_some_validators(
|
||||
&self,
|
||||
num_slots: usize,
|
||||
validators: Vec<usize>,
|
||||
) -> Hash256 {
|
||||
if self.chain.slot().unwrap() == self.chain.canonical_head.cached_head().head_slot() {
|
||||
self.advance_slot();
|
||||
}
|
||||
|
||||
self.extend_chain(
|
||||
num_slots,
|
||||
BlockStrategy::OnCanonicalHead,
|
||||
AttestationStrategy::SomeValidators(validators),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Extend the `BeaconChain` with some blocks and attestations. Returns the root of the
|
||||
/// last-produced block (the head of the chain).
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user