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

difftreelog

fix stake and unstake extrinsics

PraetorP2022-08-30parent: #daf5420.patch.diff
in: master

1 file changed

modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
260 impl<T: Config> Pallet<T>260 impl<T: Config> Pallet<T>
261 where261 where
262 T::BlockNumber: From<u32>,262 T::BlockNumber: From<u32>,
263 <<T as Config>::Currency as Currency<T::AccountId>>::Balance: Sum + From<u128>
263 {264 {
264 #[pallet::weight(T::WeightInfo::set_admin_address())]265 #[pallet::weight(T::WeightInfo::set_admin_address())]
265 pub fn set_admin_address(origin: OriginFor<T>, admin: T::CrossAccountId) -> DispatchResult {266 pub fn set_admin_address(origin: OriginFor<T>, admin: T::CrossAccountId) -> DispatchResult {
313 let staker_id = ensure_signed(staker)?;314 let staker_id = ensure_signed(staker)?;
315
314316
315 ensure!(amount >= T::Nominal::get(), ArithmeticError::Underflow);317 ensure!(amount >= Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get(), ArithmeticError::Underflow);
316318
317 let balance =319 let balance =
318 <<T as Config>::Currency as Currency<T::AccountId>>::free_balance(&staker_id);320 <<T as Config>::Currency as Currency<T::AccountId>>::free_balance(&staker_id);
342 balance_and_recalc_block344 balance_and_recalc_block
343 });345 });
344346
345 // <TotalStaked<T>>::set(347 <TotalStaked<T>>::set(
346 // <TotalStaked<T>>::get()348 <TotalStaked<T>>::get()
347 // .checked_add(&amount)349 .checked_add(&amount)
348 // .ok_or(ArithmeticError::Overflow)?,350 .ok_or(ArithmeticError::Overflow)?,
349 // );351 );
350352
351 Ok(())353 Ok(())
352 }354 }
353355
354 #[pallet::weight(T::WeightInfo::unstake())]356 #[pallet::weight(T::WeightInfo::unstake())]
355 pub fn unstake(staker: OriginFor<T>, amount: BalanceOf<T>) -> DispatchResult {357 pub fn unstake(staker: OriginFor<T>) -> DispatchResultWithPostInfo {
356 let staker_id = ensure_signed(staker)?;358 let staker_id = ensure_signed(staker)?;
357359
358 let mut stakes = Staked::<T>::drain_prefix((&staker_id,));360 let mut total_stakes = 0u64;
359361
360 // let total_staked = stakes362 let total_staked: BalanceOf<T> = Staked::<T>::drain_prefix((&staker_id,))
361 // .iter()363 .map(|(_, (amount, _))| {
362 // .fold(<BalanceOf<T>>::default(), |acc, (_, amount)| acc + *amount);364 *&mut total_stakes += 1;
363365 amount
364 // ensure!(total_staked >= amount, ArithmeticError::Underflow);366 })
365367 .sum();
366 // <TotalStaked<T>>::set(368
367 // <TotalStaked<T>>::get()369 let block =
368 // .checked_sub(&amount)370 T::RelayBlockNumberProvider::current_block_number() + T::PendingInterval::get();
369 // .ok_or(ArithmeticError::Underflow)?,371 <PendingUnstake<T>>::insert(
370 // );372 (&staker_id, block),
371373 <PendingUnstake<T>>::get((&staker_id, block))
372 // let block =374 .checked_add(&total_staked)
373 // T::RelayBlockNumberProvider::current_block_number() + T::PendingInterval::get();375 .ok_or(ArithmeticError::Overflow)?,
374 // <PendingUnstake<T>>::insert(376 );
375 // (&staker_id, block),377
376 // <PendingUnstake<T>>::get((&staker_id, block))378 TotalStaked::<T>::set(TotalStaked::<T>::get().checked_sub(&total_staked).ok_or(ArithmeticError::Underflow)?); // when error we should recover stake state for the staker
377 // .checked_add(&amount)
378 // .ok_or(ArithmeticError::Overflow)?,
379 // );
380
381 // stakes.sort_by_key(|(block, _)| *block);
382
383 // let mut acc_amount = amount;
384 // let new_state = stakes
385 // .into_iter()
386 // .map_while(|(block, balance_per_block)| {
387 // if acc_amount == <BalanceOf<T>>::default() {
388 // return None;
389 // }
390 // if acc_amount <= balance_per_block {
391 // let res = (block, balance_per_block - acc_amount, acc_amount);
392 // acc_amount = <BalanceOf<T>>::default();
393 // return Some(res);
394 // } else {
395 // acc_amount -= balance_per_block;
396 // return Some((block, <BalanceOf<T>>::default(), acc_amount));
397 // }
398 // })
399 // .collect::<Vec<_>>();
400
401 // new_state
402 // .into_iter()
403 // .for_each(|(block, to_staked, _to_pending)| {
404 // if to_staked == <BalanceOf<T>>::default() {
405 // <Staked<T>>::remove((&staker_id, block));
406 // } else {
407 // <Staked<T>>::insert((&staker_id, block), to_staked);
408 // }
409 // });
410379
411 Ok(())380 Ok(None.into())
412381
413 // let staker_id = ensure_signed(staker)?;382 // let staker_id = ensure_signed(staker)?;
414383
543 Error::<T>::NoPermission512 Error::<T>::NoPermission
544 );513 );
514
515 let raw_key = Staked::<T>::hashed_key_for((admin_id, T::BlockNumber::default()));
516
517 let key_iterator = Staked::<T>::iter_keys_from(raw_key).skip(1).into_iter();
518
519 match Self::get_last_calculated_staker() {
520 Some(last_staker) => {},
521 None => {}
522 };
545523
546 Ok(())524 Ok(())
547 }525 }
661639
662impl<T: Config> Pallet<T>640impl<T: Config> Pallet<T>
663where641where
664 <<T as pallet::Config>::Currency as Currency<T::AccountId>>::Balance: Sum,642 <<T as Config>::Currency as Currency<T::AccountId>>::Balance: Sum,
665{643{
666 pub fn cross_id_pending_unstake(staker: Option<T::CrossAccountId>) -> BalanceOf<T> {644 pub fn cross_id_pending_unstake(staker: Option<T::CrossAccountId>) -> BalanceOf<T> {
667 staker.map_or(PendingUnstake::<T>::iter_values().sum(), |s| {645 staker.map_or(PendingUnstake::<T>::iter_values().sum(), |s| {