From b0cdc1e6f89f945bfbee9f9ab755e106cd02ff4b Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Tue, 26 Nov 2019 11:54:33 +0800 Subject: [PATCH] update: avoid unnecessary `insert` operation --- srml/staking/src/lib.rs | 52 +++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/srml/staking/src/lib.rs b/srml/staking/src/lib.rs index 93a383381..a85cf6480 100644 --- a/srml/staking/src/lib.rs +++ b/srml/staking/src/lib.rs @@ -527,10 +527,7 @@ decl_module! { /// modify time_deposit_items and time_deposit_ring amount fn unbond(origin, value: StakingBalance, KtonBalanceOf>) { let controller = ensure_signed(origin)?; - - Self::clear_mature_deposits(&controller); - - let mut ledger = Self::ledger(&controller).ok_or("not a controller")?; + let mut ledger = Self::clear_mature_deposits(Self::ledger(&controller).ok_or("not a controller")?); let StakingLedger { active_ring, active_deposit_ring, @@ -591,14 +588,12 @@ decl_module! { /// called by controller fn deposit_extra(origin, value: RingBalanceOf, promise_month: u32) { let controller = ensure_signed(origin)?; - if Self::ledger(&controller).is_none() { return Err("not a controller"); } + let ledger = Self::ledger(&controller).ok_or("not a controller")?; ensure!(promise_month >= 3 && promise_month <= 36, "months at least is 3 and at most is 36."); - Self::clear_mature_deposits(&controller); - let now = >::now(); - let mut ledger = Self::ledger(&controller).unwrap(); + let mut ledger = Self::clear_mature_deposits(ledger); let StakingLedger { stash, active_ring, @@ -625,7 +620,8 @@ decl_module! { fn claim_mature_deposits(origin) { let controller = ensure_signed(origin)?; - Self::clear_mature_deposits(&controller); + let ledger = Self::clear_mature_deposits(Self::ledger(&controller).ok_or("not a controller")?); + >::insert(controller, ledger); } fn claim_deposits_with_punish(origin, expire_time: T::Moment) { @@ -771,26 +767,26 @@ decl_module! { } impl Module { - pub fn clear_mature_deposits(controller: &T::AccountId) { - if let Some(mut ledger) = Self::ledger(&controller) { - let now = >::now(); - let StakingLedger { - active_deposit_ring, - deposit_items, - .. - } = &mut ledger; - - deposit_items.retain(|item| { - if item.expire_time > now { - true - } else { - *active_deposit_ring = active_deposit_ring.saturating_sub(item.value); - false - } - }); + pub fn clear_mature_deposits( + mut ledger: StakingLedger, KtonBalanceOf, T::Moment>, + ) -> StakingLedger, KtonBalanceOf, T::Moment> { + let now = >::now(); + let StakingLedger { + active_deposit_ring, + deposit_items, + .. + } = &mut ledger; + + deposit_items.retain(|item| { + if item.expire_time > now { + true + } else { + *active_deposit_ring = active_deposit_ring.saturating_sub(item.value); + false + } + }); - >::insert(controller, ledger); - }; + ledger } fn bond_helper_in_ring(