From bf0909dd6458924781fb36faca59923f67ce4f28 Mon Sep 17 00:00:00 2001 From: zjb0807 Date: Tue, 14 Jan 2025 09:36:13 +0800 Subject: [PATCH 1/2] update saturating calculation (#1016) --- rewards/src/lib.rs | 4 ++-- rewards/src/mock.rs | 4 ++-- rewards/src/tests.rs | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/rewards/src/lib.rs b/rewards/src/lib.rs index 85e127d1b..ab33f8683 100644 --- a/rewards/src/lib.rs +++ b/rewards/src/lib.rs @@ -171,7 +171,7 @@ impl Pallet { .saturating_mul(total_reward.to_owned().saturated_into::().into()) .checked_div(initial_total_shares.to_owned().saturated_into::().into()) .unwrap_or_default() - .as_u128() + .saturated_into::() .saturated_into() }; *total_reward = total_reward.saturating_add(reward_inflation); @@ -239,7 +239,7 @@ impl Pallet { .saturating_mul(withdrawn_reward.to_owned().saturated_into::().into()) .checked_div(old_share.saturated_into::().into()) .unwrap_or_default() - .as_u128() + .saturated_into::() .saturated_into(); if let Some((total_reward, total_withdrawn_reward)) = diff --git a/rewards/src/mock.rs b/rewards/src/mock.rs index 6fb3618e4..a238605dd 100644 --- a/rewards/src/mock.rs +++ b/rewards/src/mock.rs @@ -12,8 +12,8 @@ use std::collections::HashMap; use crate as rewards; pub type AccountId = u128; -pub type Balance = u64; -pub type Share = u64; +pub type Balance = u128; +pub type Share = u128; pub type PoolId = u32; pub type CurrencyId = u32; diff --git a/rewards/src/tests.rs b/rewards/src/tests.rs index 3235d5c6e..6cf00451e 100644 --- a/rewards/src/tests.rs +++ b/rewards/src/tests.rs @@ -91,18 +91,18 @@ fn add_share_should_work() { ); // overflow occurs when saturating calculation - assert_ok!(RewardsModule::add_share(&ALICE, &DOT_POOL, u64::MAX)); + assert_ok!(RewardsModule::add_share(&ALICE, &DOT_POOL, u128::MAX)); assert_eq!( RewardsModule::pool_infos(DOT_POOL), PoolInfo { - total_shares: u64::MAX, - rewards: vec![(NATIVE_COIN, (u64::MAX, u64::MAX))].into_iter().collect() + total_shares: u128::MAX, + rewards: vec![(NATIVE_COIN, (u128::MAX, u128::MAX))].into_iter().collect() } ); assert_eq!( RewardsModule::shares_and_withdrawn_rewards(DOT_POOL, ALICE), - (u64::MAX, vec![(NATIVE_COIN, u64::MAX)].into_iter().collect()) + (u128::MAX, vec![(NATIVE_COIN, u128::MAX)].into_iter().collect()) ); }); } @@ -663,3 +663,29 @@ fn minimal_share_should_be_enforced() { assert_ok!(RewardsModule::transfer_share_and_rewards(&ALICE, &DOT_POOL, 5, &BOB)); }); } + +#[test] +fn overflow_should_work() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(RewardsModule::add_share(&ALICE, &DOT_POOL, 10)); + + // The DOT pool accumulate 21 rewards in the NATIVE COIN + assert_ok!(RewardsModule::accumulate_reward(&DOT_POOL, NATIVE_COIN, 21)); + assert_eq!( + RewardsModule::pool_infos(DOT_POOL), + PoolInfo { + total_shares: 10, + rewards: vec![(NATIVE_COIN, (21, 0))].into_iter().collect() + } + ); + + assert_ok!(RewardsModule::add_share(&ALICE, &DOT_POOL, u128::MAX)); + assert_eq!( + RewardsModule::pool_infos(DOT_POOL), + PoolInfo { + total_shares: u128::MAX, + rewards: vec![(NATIVE_COIN, (u128::MAX, u128::MAX))].into_iter().collect() + } + ); + }); +} From 58e611c30564eb4868d9a065be68879dfd92a491 Mon Sep 17 00:00:00 2001 From: Valery Klachkov Date: Wed, 29 Jan 2025 17:05:07 +0000 Subject: [PATCH 2/2] stable2412 --- Cargo.dev.toml | 64 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/Cargo.dev.toml b/Cargo.dev.toml index 0c7e48623..d2c5e286a 100644 --- a/Cargo.dev.toml +++ b/Cargo.dev.toml @@ -32,40 +32,40 @@ resolver = "2" split-debuginfo = "unpacked" [workspace.dependencies] -log = { version = "0.4.20", default-features = false } +log = { version = "0.4.25", default-features = false } scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.189" } -parity-scale-codec = { version = "3.6.5", default-features = false, features = ["max-encoded-len"] } +serde = { version = "1.0.214" } +parity-scale-codec = { version = "3.6.12", default-features = false, features = ["max-encoded-len"] } -cumulus-pallet-xcm = { version = "0.17.0", default-features = false } -cumulus-primitives-core = { version = "0.16.0", default-features = false } -frame-benchmarking = { version = "38.0.0", default-features = false } -frame-support = { version = "38.0.0", default-features = false } -frame-system = { version = "38.0.0", default-features = false } -pallet-balances = { version = "39.0.0", default-features = false } -pallet-elections-phragmen = { version = "39.0.0", default-features = false } -pallet-message-queue = { version = "41.0.1", default-features = false } -pallet-preimage = { version = "38.0.0", default-features = false } -pallet-root-testing = { version = "14.0.0", default-features = false } -pallet-scheduler = { version = "39.0.0", default-features = false } -pallet-timestamp = { version = "37.0.0", default-features = false } -pallet-treasury = { version = "37.0.0", default-features = false } -pallet-xcm = { version = "17.0.0", default-features = false } -polkadot-parachain-primitives = { version = "14.0.0", default-features = false } -polkadot-runtime-common = { version = "17.0.0", default-features = false } -polkadot-runtime-parachains = { version = "17.0.1", default-features = false } -sp-api = { version = "34.0.0", default-features = false } -sp-application-crypto = { version = "38.0.0", default-features = false } +cumulus-pallet-xcm = { version = "0.18.0", default-features = false } +cumulus-primitives-core = { version = "0.17.0", default-features = false } +frame-benchmarking = { version = "39.0.0", default-features = false } +frame-support = { version = "39.0.0", default-features = false } +frame-system = { version = "39.1.0", default-features = false } +pallet-balances = { version = "40.0.0", default-features = false } +pallet-elections-phragmen = { version = "40.0.0", default-features = false } +pallet-message-queue = { version = "42.0.0", default-features = false } +pallet-preimage = { version = "39.0.0", default-features = false } +pallet-root-testing = { version = "15.0.0", default-features = false } +pallet-scheduler = { version = "40.0.0", default-features = false } +pallet-timestamp = { version = "38.0.0", default-features = false } +pallet-treasury = { version = "38.0.0", default-features = false } +pallet-xcm = { version = "18.0.0", default-features = false } +polkadot-parachain-primitives = { version = "15.0.0", default-features = false } +polkadot-runtime-common = { version = "18.0.0", default-features = false } +polkadot-runtime-parachains = { version = "18.0.1", default-features = false } +sp-api = { version = "35.0.0", default-features = false } +sp-application-crypto = { version = "39.0.0", default-features = false } sp-arithmetic = { version = "26.0.0", default-features = false } -sp-core = { version = "34.0.0", default-features = false } -sp-io = { version = "38.0.0", default-features = false } -sp-runtime = { version = "39.0.1", default-features = false } -sp-runtime-interface = { version = "28.0.0", default-features = false } -sp-staking = { version = "36.0.0", default-features = false } +sp-core = { version = "35.0.0", default-features = false } +sp-io = { version = "39.0.0", default-features = false } +sp-runtime = { version = "40.1.0", default-features = false } +sp-runtime-interface = { version = "29.0.0", default-features = false } +sp-staking = { version = "37.0.0", default-features = false } sp-std = { version = "14.0.0", default-features = false } -sp-storage = { version = "21.0.0", default-features = false } -xcm = { version = "14.2.0", package = "staging-xcm", default-features = false } -xcm-builder = { version = "17.0.1", package = "staging-xcm-builder", default-features = false } -xcm-executor = { version = "17.0.0", package = "staging-xcm-executor", default-features = false } +sp-storage = { version = "22.0.0", default-features = false } +xcm = { version = "15.0.1", package = "staging-xcm", default-features = false } +xcm-builder = { version = "18.0.0", package = "staging-xcm-builder", default-features = false } +xcm-executor = { version = "18.0.0", package = "staging-xcm-executor", default-features = false } -xcm-simulator = { version = "17.0.0" } +xcm-simulator = { version = "18.0.0" }