solana validators
output now includes average skip rate
This commit is contained in:
committed by
mergify[bot]
parent
dfb6296499
commit
52290dbd35
@ -347,6 +347,8 @@ pub struct CliValidators {
|
|||||||
pub total_current_stake: u64,
|
pub total_current_stake: u64,
|
||||||
pub total_delinquent_stake: u64,
|
pub total_delinquent_stake: u64,
|
||||||
pub validators: Vec<CliValidator>,
|
pub validators: Vec<CliValidator>,
|
||||||
|
pub average_skip_rate: f64,
|
||||||
|
pub average_stake_weighted_skip_rate: f64,
|
||||||
#[serde(skip_serializing)]
|
#[serde(skip_serializing)]
|
||||||
pub validators_sort_order: CliValidatorsSortOrder,
|
pub validators_sort_order: CliValidatorsSortOrder,
|
||||||
#[serde(skip_serializing)]
|
#[serde(skip_serializing)]
|
||||||
@ -510,6 +512,18 @@ impl fmt::Display for CliValidators {
|
|||||||
writeln!(f, "{}", header)?;
|
writeln!(f, "{}", header)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeln!(f)?;
|
||||||
|
writeln_name_value(
|
||||||
|
f,
|
||||||
|
"Average Stake-Weighted Skip Rate:",
|
||||||
|
&format!("{:.2}%", self.average_stake_weighted_skip_rate,),
|
||||||
|
)?;
|
||||||
|
writeln_name_value(
|
||||||
|
f,
|
||||||
|
"Average Unweighted Skip Rate: ",
|
||||||
|
&format!("{:.2}%", self.average_skip_rate),
|
||||||
|
)?;
|
||||||
|
|
||||||
writeln!(f)?;
|
writeln!(f)?;
|
||||||
writeln_name_value(
|
writeln_name_value(
|
||||||
f,
|
f,
|
||||||
|
@ -1892,14 +1892,40 @@ pub fn process_show_validators(
|
|||||||
entry.delinquent_active_stake += validator.activated_stake;
|
entry.delinquent_active_stake += validator.activated_stake;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let validators: Vec<_> = current_validators
|
||||||
|
.into_iter()
|
||||||
|
.chain(delinquent_validators.into_iter())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let (average_skip_rate, average_stake_weighted_skip_rate) = {
|
||||||
|
let mut skip_rate_len = 0;
|
||||||
|
let mut skip_rate_sum = 0.;
|
||||||
|
let mut skip_rate_weighted_sum = 0.;
|
||||||
|
for validator in validators.iter() {
|
||||||
|
if let Some(skip_rate) = validator.skip_rate {
|
||||||
|
skip_rate_sum += skip_rate;
|
||||||
|
skip_rate_len += 1;
|
||||||
|
skip_rate_weighted_sum += skip_rate * validator.activated_stake as f64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if skip_rate_len > 0 && total_active_stake > 0 {
|
||||||
|
(
|
||||||
|
skip_rate_sum / skip_rate_len as f64,
|
||||||
|
skip_rate_weighted_sum / total_active_stake as f64,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
(100., 100.) // Impossible?
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let cli_validators = CliValidators {
|
let cli_validators = CliValidators {
|
||||||
total_active_stake,
|
total_active_stake,
|
||||||
total_current_stake,
|
total_current_stake,
|
||||||
total_delinquent_stake,
|
total_delinquent_stake,
|
||||||
validators: current_validators
|
validators,
|
||||||
.into_iter()
|
average_skip_rate,
|
||||||
.chain(delinquent_validators.into_iter())
|
average_stake_weighted_skip_rate,
|
||||||
.collect(),
|
|
||||||
validators_sort_order,
|
validators_sort_order,
|
||||||
validators_reverse_sort,
|
validators_reverse_sort,
|
||||||
number_validators,
|
number_validators,
|
||||||
|
Reference in New Issue
Block a user