difftreelog
Merge pull request #591 from UniqueNetwork/fix/app-promotion
in: master
Fix/app promotion
3 files changed
Cargo.lockdiffbeforeafterboth647564756476[[package]]6476[[package]]6477name = "pallet-unique"6477name = "pallet-unique"6478version = "0.1.4"6478version = "0.2.0"6479dependencies = [6479dependencies = [6480 "ethereum",6480 "ethereum",6481 "evm-coder",6481 "evm-coder",pallets/app-promotion/src/lib.rsdiffbeforeafterboth--- a/pallets/app-promotion/src/lib.rs
+++ b/pallets/app-promotion/src/lib.rs
@@ -594,14 +594,14 @@
last_id,
*income_acc.borrow(),
ExistenceRequirement::KeepAlive,
- )
- .and_then(|_| {
- Self::add_lock_balance(last_id, *income_acc.borrow())?;
- <TotalStaked<T>>::try_mutate(|staked| {
- staked
- .checked_add(&*income_acc.borrow())
- .ok_or(ArithmeticError::Overflow.into())
- })
+ )?;
+
+ Self::add_lock_balance(last_id, *income_acc.borrow())?;
+ <TotalStaked<T>>::try_mutate(|staked| -> DispatchResult {
+ *staked = staked
+ .checked_add(&*income_acc.borrow())
+ .ok_or(ArithmeticError::Overflow)?;
+ Ok(())
})?;
Self::deposit_event(Event::StakingRecalculation(
tests/src/app-promotion.test.tsdiffbeforeafterboth--- a/tests/src/app-promotion.test.ts
+++ b/tests/src/app-promotion.test.ts
@@ -661,6 +661,26 @@
});
});
+ it('should increase total staked', async() => {
+ await usingPlaygrounds(async (helper) => {
+ const staker = accounts.pop()!;
+ const totalStakedBefore = await helper.staking.getTotalStaked();
+ await helper.staking.stake(staker, 100n * nominal);
+
+ // Wait for rewards and pay
+ const stakedInBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}))[0][0];
+ await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock));
+ await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));
+
+ const totalStakedAfter = await helper.staking.getTotalStaked();
+ expect(totalStakedAfter >= totalStakedBefore + calculateIncome(100n * nominal, 10n)).to.be.true;
+
+ // staker can unstake
+ await helper.staking.unstake(staker);
+ expect(await helper.staking.getTotalStaked()).to.be.equal(totalStakedAfter - calculateIncome(100n * nominal, 10n));
+ });
+ });
+
it('should credit 0.05% for staking period', async () => {
await usingPlaygrounds(async helper => {
const staker = accounts.pop()!;