difftreelog
refac(app-promo): `unstake_partial` optimize code.
in: master
1 file changed
pallets/app-promotion/src/lib.rsdiffbeforeafterboth807807808 let mut pendings = <PendingUnstake<T>>::get(unpending_block);808 let mut pendings = <PendingUnstake<T>>::get(unpending_block);809809810 // checks that we can do unreserve stakes in the block810 // checks that we can do unstake in the block811 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);811 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);812812813 let mut stakes = Staked::<T>::iter_prefix((&staker_id,)).collect::<Vec<_>>();813 let mut stakes = Staked::<T>::iter_prefix((&staker_id,)).collect::<Vec<_>>();836836837 let changed_stakes = stakes837 let changed_stakes = stakes838 .into_iter()838 .into_iter()839 .map_while(|(block, (balance_per_block, recalc_block))| {839 .map_while(|(block, (balance_per_block, _))| {840 if acc_amount == <BalanceOf<T>>::default() {840 if acc_amount == <BalanceOf<T>>::default() {841 return None;841 return None;842 }842 }843 if acc_amount < balance_per_block {843 if acc_amount < balance_per_block {844 let res = (block, (balance_per_block - acc_amount, recalc_block));844 let res = (block, balance_per_block - acc_amount);845 acc_amount = <BalanceOf<T>>::default();845 acc_amount = <BalanceOf<T>>::default();846 return Some(res);846 return Some(res);847 } else {847 } else {848 acc_amount -= balance_per_block;848 acc_amount -= balance_per_block;849 will_deleted_stakes_count += 1;849 will_deleted_stakes_count += 1;850 return Some((block, (<BalanceOf<T>>::default(), recalc_block)));850 return Some((block, <BalanceOf<T>>::default()));851 }851 }852 })852 })853 .collect::<Vec<_>>();853 .collect::<Vec<_>>();864 })?;864 })?;865865866 changed_stakes866 changed_stakes867 .iter()867 .into_iter()868 .for_each(|(staked_block, (current_stake_state, _))| {868 .for_each(|(staked_block, current_stake_state)| {869 if current_stake_state == &Default::default() {869 if current_stake_state == Default::default() {870 <Staked<T>>::remove((&staker_id, staked_block));870 <Staked<T>>::remove((&staker_id, staked_block));871 } else {871 } else {872 <Staked<T>>::mutate((&staker_id, staked_block), |(old_stake_state, _)| {872 <Staked<T>>::mutate((&staker_id, staked_block), |(old_stake_state, _)| {873 *old_stake_state = *current_stake_state873 *old_stake_state = current_stake_state874 });874 });875 }875 }876 });876 });108710871088 let mut pendings = <PendingUnstake<T>>::get(block);1088 let mut pendings = <PendingUnstake<T>>::get(block);108910891090 // checks that we can do unreserve stakes in the block1090 // checks that we can do unstake in the block1091 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);1091 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);109210921093 let mut total_stakes = 0u64;1093 let mut total_stakes = 0u64;