git.delta.rocks / unique-network / refs/commits / 0f81eccfefee

difftreelog

e2e scenario for promotion + vesting

Max Andreev2022-12-08parent: #e963dbc.patch.diff
in: master

1 file changed

modifiedtests/src/app-promotion.test.tsdiffbeforeafterboth
607 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);607 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);
608 });608 });
609609
610 itSub('should not be credited for vested balance', async ({helper}) => {610 itSub('e2e: should not be credited for vested balance', async ({helper}) => {
611 const [staker, sender] = [accounts.pop()!, accounts.pop()!];611 const [staker, sender] = [accounts.pop()!, accounts.pop()!];
612 const VESTED_TRANSFER = 300n * nominal;
613 const STAKE = 100n * nominal;
612 // Staker has frozen vested transfer of 500 tokens:614 // Arrange: Staker has frozen vested transfer of VESTED_TRANSFER tokens
613 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: 500n * nominal});615 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: VESTED_TRANSFER});
614 // Staker has frozen vested transfer of 500 tokens:616 // Arrange: Staker has frozen stake of 100 tokens
615 await helper.staking.stake(staker, 100n * nominal);617 await helper.staking.stake(staker, STAKE);
616 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});618 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});
619
617 // Staker's full balance inludes vested transfer and staked amount:620 // Assert: Staker's full balance inludes vested transfer and staked amount
618 const stakerBalance = await helper.balance.getSubstrateFull(staker.address);621 const stakerBalanceBefore = await helper.balance.getSubstrateFull(staker.address);
619 expect(stakerBalance).to.contain({miscFrozen: 600n * nominal, feeFrozen: 600n * nominal, reserved: 0n});622 expect(stakerBalanceBefore).to.contain({miscFrozen: VESTED_TRANSFER + STAKE, feeFrozen: VESTED_TRANSFER + STAKE, reserved: 0n});
620 expect(stakerBalance.free / nominal).to.eq(1499n);623 expect(stakerBalanceBefore.free / nominal).to.eq(1299n);
621624
622 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD);625 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block));
623 await helper.admin.payoutStakers(palletAdmin, 100);626 await helper.admin.payoutStakers(palletAdmin, 100);
624 // Staker got reward only for 100 staked tokens:627 // Assert: Staker got reward only for {STAKE} staked tokens
625 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});628 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});
629 const income = calculateIncome(STAKE);
626 expect(stake.amount).to.be.equal(calculateIncome(100n * nominal, 2));630 expect(stake.amount).to.be.equal(income);
631 // Assert: Frozen balance increased on {income} amount
632 const stakerBalanceAfterReward = await helper.balance.getSubstrateFull(staker.address);
633 expect(stakerBalanceAfterReward).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});
634 expect(stakerBalanceAfterReward.free > stakerBalanceBefore.free).to.be.true;
635
636 // Act: Staker can claim:
637 await helper.balance.claim(staker);
638 // Assert: Staker's frozen balance reduced on {VESTED_TRANSFER} amount
639 const stakerBalanceAfterClaim = await helper.balance.getSubstrateFull(staker.address);
640 expect(stakerBalanceAfterClaim).to.contain({miscFrozen: income, feeFrozen: income, reserved: 0n});
641 expect(stakerBalanceAfterClaim.free).to.eq(stakerBalanceAfterReward.free);
642
643 // Act: Staker receives another vested transfer
644 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: VESTED_TRANSFER});
645 // Assert: vested transfer included in balance
646 const stakerBalanceAfterSecondVestedTransfer = await helper.balance.getSubstrateFull(staker.address);
647 expect(stakerBalanceAfterSecondVestedTransfer).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});
648 expect(stakerBalanceAfterSecondVestedTransfer.free / nominal).to.eq(1599n);
649
650 // Act: Staker can unstake
651 await helper.staking.unstake(staker);
652 // Assert: Staker's frozen balance reduced on {income} amount
653 const stakerBalanceAfterUnstake = await helper.balance.getSubstrateFull(staker.address);
654 expect(stakerBalanceAfterUnstake).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: income});
655 expect(stakerBalanceAfterUnstake.free / nominal).to.eq(1599n);
656 // Assert: Balance after unstaking period ends
657 const [pendingUnstake] = await helper.staking.getPendingUnstakePerBlock({Substrate: staker.address});
658 await helper.wait.forParachainBlockNumber(pendingUnstake.block);
659 const stakerBalanceAfterUnstakeFinished = await helper.balance.getSubstrateFull(staker.address);
660 expect(stakerBalanceAfterUnstakeFinished).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: 0n});
661 expect(stakerBalanceAfterUnstakeFinished.free > stakerBalanceAfterUnstake.free).to.be.true;
627 });662 });
628 663
629 itSub('should bring compound interest', async ({helper}) => {664 itSub('should bring compound interest', async ({helper}) => {