using performance^20 when calculating active set selection weight

This commit is contained in:
Jędrzej Stuczyński
2023-11-10 09:54:03 +00:00
parent 6d2d8ce149
commit ef8e452f30
2 changed files with 11 additions and 1 deletions
@@ -71,6 +71,16 @@ impl Percent {
// we know the cast from u128 to u8 is a safe one since the internal value must be within 0 - 1 range
truncate_decimal(hundred * self.0).u128() as u8
}
pub fn pow(&self, exp: u32) -> Self {
match self.0.checked_pow(exp) {
Ok(res) => Percent(res),
Err(overflow) => {
// since the percent is meant to always be strictly less than 1, this should NEVER hapen
panic!("the percent invariant has been broken. the exponentiation result has overflown: {overflow}");
}
}
}
}
impl Display for Percent {
@@ -24,7 +24,7 @@ struct MixnodeWithStakeAndPerformance {
impl MixnodeWithStakeAndPerformance {
fn to_selection_weight(&self) -> f64 {
let scaled_stake = self.total_stake * self.performance;
let scaled_stake = self.total_stake * self.performance.pow(20);
stake_to_f64(scaled_stake)
}
}