From c1f4e7e1cab1ed16ba25d0eaa1c2b7c000f57a8e Mon Sep 17 00:00:00 2001 From: PraetorP Date: Tue, 30 Aug 2022 13:57:52 +0000 Subject: [PATCH] fix stake and unstake extrinsics --- --- a/pallets/app-promotion/src/lib.rs +++ b/pallets/app-promotion/src/lib.rs @@ -260,6 +260,7 @@ impl Pallet where T::BlockNumber: From, + <::Currency as Currency>::Balance: Sum + From { #[pallet::weight(T::WeightInfo::set_admin_address())] pub fn set_admin_address(origin: OriginFor, admin: T::CrossAccountId) -> DispatchResult { @@ -311,8 +312,9 @@ #[pallet::weight(T::WeightInfo::stake())] pub fn stake(staker: OriginFor, amount: BalanceOf) -> DispatchResult { let staker_id = ensure_signed(staker)?; + - ensure!(amount >= T::Nominal::get(), ArithmeticError::Underflow); + ensure!(amount >= Into::>::into(100u128) * T::Nominal::get(), ArithmeticError::Underflow); let balance = <::Currency as Currency>::free_balance(&staker_id); @@ -342,74 +344,41 @@ balance_and_recalc_block }); - // >::set( - // >::get() - // .checked_add(&amount) - // .ok_or(ArithmeticError::Overflow)?, - // ); + >::set( + >::get() + .checked_add(&amount) + .ok_or(ArithmeticError::Overflow)?, + ); Ok(()) } #[pallet::weight(T::WeightInfo::unstake())] - pub fn unstake(staker: OriginFor, amount: BalanceOf) -> DispatchResult { + pub fn unstake(staker: OriginFor) -> DispatchResultWithPostInfo { let staker_id = ensure_signed(staker)?; - let mut stakes = Staked::::drain_prefix((&staker_id,)); - - // let total_staked = stakes - // .iter() - // .fold(>::default(), |acc, (_, amount)| acc + *amount); + let mut total_stakes = 0u64; - // ensure!(total_staked >= amount, ArithmeticError::Underflow); - - // >::set( - // >::get() - // .checked_sub(&amount) - // .ok_or(ArithmeticError::Underflow)?, - // ); + let total_staked: BalanceOf = Staked::::drain_prefix((&staker_id,)) + .map(|(_, (amount, _))| { + *&mut total_stakes += 1; + amount + }) + .sum(); + + let block = + T::RelayBlockNumberProvider::current_block_number() + T::PendingInterval::get(); + >::insert( + (&staker_id, block), + >::get((&staker_id, block)) + .checked_add(&total_staked) + .ok_or(ArithmeticError::Overflow)?, + ); + + TotalStaked::::set(TotalStaked::::get().checked_sub(&total_staked).ok_or(ArithmeticError::Underflow)?); // when error we should recover stake state for the staker - // let block = - // T::RelayBlockNumberProvider::current_block_number() + T::PendingInterval::get(); - // >::insert( - // (&staker_id, block), - // >::get((&staker_id, block)) - // .checked_add(&amount) - // .ok_or(ArithmeticError::Overflow)?, - // ); + Ok(None.into()) - // stakes.sort_by_key(|(block, _)| *block); - - // let mut acc_amount = amount; - // let new_state = stakes - // .into_iter() - // .map_while(|(block, balance_per_block)| { - // if acc_amount == >::default() { - // return None; - // } - // if acc_amount <= balance_per_block { - // let res = (block, balance_per_block - acc_amount, acc_amount); - // acc_amount = >::default(); - // return Some(res); - // } else { - // acc_amount -= balance_per_block; - // return Some((block, >::default(), acc_amount)); - // } - // }) - // .collect::>(); - - // new_state - // .into_iter() - // .for_each(|(block, to_staked, _to_pending)| { - // if to_staked == >::default() { - // >::remove((&staker_id, block)); - // } else { - // >::insert((&staker_id, block), to_staked); - // } - // }); - - Ok(()) - // let staker_id = ensure_signed(staker)?; // let mut stakes = Staked::::iter_prefix((&staker_id,)).collect::>(); @@ -542,6 +511,15 @@ admin_id == Admin::::get().ok_or(Error::::AdminNotSet)?, Error::::NoPermission ); + + let raw_key = Staked::::hashed_key_for((admin_id, T::BlockNumber::default())); + + let key_iterator = Staked::::iter_keys_from(raw_key).skip(1).into_iter(); + + match Self::get_last_calculated_staker() { + Some(last_staker) => {}, + None => {} + }; Ok(()) } @@ -661,7 +639,7 @@ impl Pallet where - <::Currency as Currency>::Balance: Sum, + <::Currency as Currency>::Balance: Sum, { pub fn cross_id_pending_unstake(staker: Option) -> BalanceOf { staker.map_or(PendingUnstake::::iter_values().sum(), |s| { -- gitstuff