git.delta.rocks / unique-network / refs/commits / eb685d6767ce

difftreelog

refac(app-promo): `unstake_partial` optimize code.

PraetorP2023-02-15parent: #6a05547.patch.diff
in: master

1 file changed

modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
807807
808 let mut pendings = <PendingUnstake<T>>::get(unpending_block);808 let mut pendings = <PendingUnstake<T>>::get(unpending_block);
809809
810 // checks that we can do unreserve stakes in the block810 // checks that we can do unstake in the block
811 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);811 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);
812812
813 let mut stakes = Staked::<T>::iter_prefix((&staker_id,)).collect::<Vec<_>>();813 let mut stakes = Staked::<T>::iter_prefix((&staker_id,)).collect::<Vec<_>>();
836836
837 let changed_stakes = stakes837 let changed_stakes = stakes
838 .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 })?;
865865
866 changed_stakes866 changed_stakes
867 .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_state
874 });874 });
875 }875 }
876 });876 });
10871087
1088 let mut pendings = <PendingUnstake<T>>::get(block);1088 let mut pendings = <PendingUnstake<T>>::get(block);
10891089
1090 // checks that we can do unreserve stakes in the block1090 // checks that we can do unstake in the block
1091 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);1091 ensure!(!pendings.is_full(), Error::<T>::PendingForBlockOverflow);
10921092
1093 let mut total_stakes = 0u64;1093 let mut total_stakes = 0u64;