diff --git a/src/catalyst-toolbox/catalyst-toolbox/src/rewards/dreps.rs b/src/catalyst-toolbox/catalyst-toolbox/src/rewards/dreps.rs index 86e9c3720f..085f094d39 100644 --- a/src/catalyst-toolbox/catalyst-toolbox/src/rewards/dreps.rs +++ b/src/catalyst-toolbox/catalyst-toolbox/src/rewards/dreps.rs @@ -69,17 +69,23 @@ pub fn calc_dreps_rewards( let res = filtered .into_iter() .map(|d| { - let reward = Decimal::from(u64::from(d.hir.voting_power)) - / Decimal::from(total_active_stake) - * total_rewards; + let reward = if let Some(reward) = Decimal::from(u64::from(d.hir.voting_power)) + .checked_div(Decimal::from(total_active_stake)) + { + reward * total_rewards + } else { + Decimal::ZERO + }; (d.hir.voting_key, reward) }) .collect::>(); - let expected_rewards = if total_active_stake == 0 { - Decimal::ZERO + let expected_rewards = if let Some(stake) = + Decimal::from(total_dreps_stake).checked_div(Decimal::from(total_active_stake)) + { + total_rewards * stake } else { - total_rewards * Decimal::from(total_dreps_stake) / Decimal::from(total_active_stake) + Decimal::ZERO }; assert_are_close(res.values().sum(), expected_rewards); diff --git a/src/catalyst-toolbox/catalyst-toolbox/src/rewards/voters.rs b/src/catalyst-toolbox/catalyst-toolbox/src/rewards/voters.rs index 9e9b211535..7e96d9779c 100644 --- a/src/catalyst-toolbox/catalyst-toolbox/src/rewards/voters.rs +++ b/src/catalyst-toolbox/catalyst-toolbox/src/rewards/voters.rs @@ -387,10 +387,13 @@ mod tests { Rewards::ONE, ) .unwrap(); + // The only assertion that we can make at this point is that the sum + // of the voter rewards is equal to the total rewards. assert_are_close(rewards.values().sum::(), Rewards::ONE); - for (_, reward) in rewards { - assert_eq!(reward, Rewards::ONE / Rewards::from(9u8)); - } + // These assertions are invalid, as the rewards are dependent on the weighted capped voting power. + // for (_, reward) in rewards { + // assert_eq!(reward, Rewards::ONE / Rewards::from(9u8)); + // } } #[proptest]