difftreelog
e2e scenario for promotion + vesting
in: master
1 file changed
tests/src/app-promotion.test.tsdiffbeforeafterboth607 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);607 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);608 });608 });609609610 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 tokens613 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 tokens615 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});619617 // Staker's full balance inludes vested transfer and staked amount:620 // Assert: Staker's full balance inludes vested transfer and staked amount618 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);621624622 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 tokens625 [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} amount632 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;635636 // Act: Staker can claim:637 await helper.balance.claim(staker);638 // Assert: Staker's frozen balance reduced on {VESTED_TRANSFER} amount639 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);642643 // Act: Staker receives another vested transfer644 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: VESTED_TRANSFER});645 // Assert: vested transfer included in balance646 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);649650 // Act: Staker can unstake651 await helper.staking.unstake(staker);652 // Assert: Staker's frozen balance reduced on {income} amount653 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 ends657 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}) => {