diff --git a/substrate/frame/asset-rewards/src/lib.rs b/substrate/frame/asset-rewards/src/lib.rs index 4237347579142a68498baed15811c6e654b2248e..0e70166a015a559390bb378ec07a37fce0bc9366 100644 --- a/substrate/frame/asset-rewards/src/lib.rs +++ b/substrate/frame/asset-rewards/src/lib.rs @@ -107,7 +107,7 @@ pub use weights::WeightInfo; pub type PoolId = u32; /// Multiplier to maintain precision when calculating rewards. -pub(crate) const PRECISION_SCALING_FACTOR: u32 = u32::MAX; +pub(crate) const PRECISION_SCALING_FACTOR: u16 = 4096; /// Convenience alias for `PoolInfo`. pub type PoolInfoFor<T> = PoolInfo< diff --git a/substrate/frame/asset-rewards/src/tests.rs b/substrate/frame/asset-rewards/src/tests.rs index 27ff298339127ef3083df80ba20b7991cc1ff4cf..417d4185e57e14b0913369d55535364b740aaac4 100644 --- a/substrate/frame/asset-rewards/src/tests.rs +++ b/substrate/frame/asset-rewards/src/tests.rs @@ -921,7 +921,7 @@ mod set_pool_reward_rate_per_block { // Check that rewards are calculated correctly with the updated rate assert_hypothetically_earned( staker, - 10 * 100 + 10 * new_reward_rate - 1, // -1 due to rounding + 10 * 100 + 10 * new_reward_rate, pool_id, NativeOrWithId::<u32>::Native, ); @@ -1227,8 +1227,8 @@ fn integration() { // - Staker 2 is earning 33.33 tokens per block. // Check that Staker 1 has earned 350 tokens and Staker 2 has earned 150 tokens. - assert_hypothetically_earned(staker1, 349, pool_id, reward_asset_id.clone()); - assert_hypothetically_earned(staker2, 149, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 350, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker2, 150, pool_id, reward_asset_id.clone()); // Block 22: Staker 1 unstakes 100 tokens. System::set_block_number(22); @@ -1237,7 +1237,7 @@ fn integration() { // - Staker 2 has earned 483 (150 + 33.33 * 10) tokens. // - Staker 1 is earning 50 tokens per block. // - Staker 2 is earning 50 tokens per block. - assert_hypothetically_earned(staker1, 1015, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1016, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 483, pool_id, reward_asset_id.clone()); // Block 23: Staker 1 unstakes 100 tokens. @@ -1247,7 +1247,7 @@ fn integration() { // - Staker 2 has earned 533 (483 + 50) tokens. // - Staker 1 is earning 0 tokens per block. // - Staker 2 is earning 100 tokens per block. - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 533, pool_id, reward_asset_id.clone()); // Block 50: Stakers should only have earned 2 blocks worth of tokens (expiry is 25). @@ -1256,7 +1256,7 @@ fn integration() { // - Staker 2 has earned 733 (533 + 2 * 100) tokens. // - Staker 1 is earning 0 tokens per block. // - Staker 2 is earning 0 tokens per block. - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 733, pool_id, reward_asset_id.clone()); // Block 51: Extend the pool expiry block to 60. @@ -1268,7 +1268,7 @@ fn integration() { pool_id, 60u64 )); - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 733, pool_id, reward_asset_id.clone()); // Block 53: Check rewards are resumed. @@ -1276,7 +1276,7 @@ fn integration() { // - Staker 2 has earned 933 (733 + 2 * 100) tokens. // - Staker 2 is earning 100 tokens per block. System::set_block_number(53); - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 933, pool_id, reward_asset_id.clone()); // Block 55: Halve the block reward. @@ -1289,7 +1289,7 @@ fn integration() { pool_id, 50 )); - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); assert_hypothetically_earned(staker2, 1133, pool_id, reward_asset_id.clone()); // Block 57: Staker2 harvests their rewards. @@ -1308,8 +1308,8 @@ fn integration() { // - Staker 1 has earned 1065 tokens. // - Staker 2 has earned 149 (3 * 50) tokens. System::set_block_number(60); - assert_hypothetically_earned(staker1, 1064, pool_id, reward_asset_id.clone()); - assert_hypothetically_earned(staker2, 149, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker1, 1066, pool_id, reward_asset_id.clone()); + assert_hypothetically_earned(staker2, 150, pool_id, reward_asset_id.clone()); // Finally, check events. assert_eq!(