difftreelog
Add balances.locked checks
in: master
2 files changed
tests/src/app-promotion.test.tsdiffbeforeafterboth51 // Staker balance is: miscFrozen: 100, feeFrozen: 100, reserved: 0n...51 // Staker balance is: miscFrozen: 100, feeFrozen: 100, reserved: 0n...52 // ...so he can not transfer 90052 // ...so he can not transfer 90053 expect (await helper.balance.getSubstrateFull(staker.address)).to.contain({miscFrozen: 100n * nominal, feeFrozen: 100n * nominal, reserved: 0n});53 expect(await helper.balance.getSubstrateFull(staker.address)).to.contain({miscFrozen: 100n * nominal, feeFrozen: 100n * nominal, reserved: 0n});54 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: 100n * nominal, reasons: 'All'}]);54 await expect(helper.balance.transferToSubstrate(staker, recepient.address, 900n * nominal)).to.be.rejectedWith('balances.LiquidityRestrictions');55 await expect(helper.balance.transferToSubstrate(staker, recepient.address, 900n * nominal)).to.be.rejectedWith('balances.LiquidityRestrictions');55 56 56 expect(await helper.staking.getTotalStaked({Substrate: staker.address})).to.be.equal(100n * nominal);57 expect(await helper.staking.getTotalStaked({Substrate: staker.address})).to.be.equal(100n * nominal);621 const stakerBalanceBefore = await helper.balance.getSubstrateFull(staker.address);622 const stakerBalanceBefore = await helper.balance.getSubstrateFull(staker.address);622 expect(stakerBalanceBefore).to.contain({miscFrozen: VESTED_TRANSFER + STAKE, feeFrozen: VESTED_TRANSFER + STAKE, reserved: 0n});623 expect(stakerBalanceBefore).to.contain({miscFrozen: VESTED_TRANSFER + STAKE, feeFrozen: VESTED_TRANSFER + STAKE, reserved: 0n});623 expect(stakerBalanceBefore.free / nominal).to.eq(1299n);624 expect(stakerBalanceBefore.free / nominal).to.eq(1299n);625 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: STAKE, reasons: 'All'}, {id: 'ormlvest', amount: VESTED_TRANSFER, reasons: 'All'}]);624626625 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block));627 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block));626 await helper.admin.payoutStakers(palletAdmin, 100);628 await helper.admin.payoutStakers(palletAdmin, 100);632 const stakerBalanceAfterReward = await helper.balance.getSubstrateFull(staker.address);634 const stakerBalanceAfterReward = await helper.balance.getSubstrateFull(staker.address);633 expect(stakerBalanceAfterReward).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});635 expect(stakerBalanceAfterReward).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});634 expect(stakerBalanceAfterReward.free > stakerBalanceBefore.free).to.be.true;636 expect(stakerBalanceAfterReward.free > stakerBalanceBefore.free).to.be.true;637 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: income, reasons: 'All'}, {id: 'ormlvest', amount: VESTED_TRANSFER, reasons: 'All'}]);635638636 // Act: Staker can claim:639 // Act: Staker can claim:637 await helper.balance.claim(staker);640 await helper.balance.claim(staker);638 // Assert: Staker's frozen balance reduced on {VESTED_TRANSFER} amount641 // Assert: Staker's frozen balance reduced on {VESTED_TRANSFER} amount639 const stakerBalanceAfterClaim = await helper.balance.getSubstrateFull(staker.address);642 const stakerBalanceAfterClaim = await helper.balance.getSubstrateFull(staker.address);640 expect(stakerBalanceAfterClaim).to.contain({miscFrozen: income, feeFrozen: income, reserved: 0n});643 expect(stakerBalanceAfterClaim).to.contain({miscFrozen: income, feeFrozen: income, reserved: 0n});641 expect(stakerBalanceAfterClaim.free).to.eq(stakerBalanceAfterReward.free);644 expect(stakerBalanceAfterClaim.free).to.eq(stakerBalanceAfterReward.free);645 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: income, reasons: 'All'}]);642646643 // Act: Staker receives another vested transfer647 // Act: Staker receives another vested transfer644 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: VESTED_TRANSFER});648 await helper.balance.vestedTransfer(sender, staker.address, {start: 1000n, period: 10n, periodCount: 1n, perPeriod: VESTED_TRANSFER});645 // Assert: vested transfer included in balance649 // Assert: vested transfer included in balance646 const stakerBalanceAfterSecondVestedTransfer = await helper.balance.getSubstrateFull(staker.address);650 const stakerBalanceAfterSecondVestedTransfer = await helper.balance.getSubstrateFull(staker.address);647 expect(stakerBalanceAfterSecondVestedTransfer).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});651 expect(stakerBalanceAfterSecondVestedTransfer).to.contain({miscFrozen: VESTED_TRANSFER + income, feeFrozen: VESTED_TRANSFER + income, reserved: 0n});648 expect(stakerBalanceAfterSecondVestedTransfer.free / nominal).to.eq(1599n);652 expect(stakerBalanceAfterSecondVestedTransfer.free / nominal).to.eq(1599n);653 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: income, reasons: 'All'}, {id: 'ormlvest', amount: VESTED_TRANSFER, reasons: 'All'}]);649654650 // Act: Staker can unstake655 // Act: Staker can unstake651 await helper.staking.unstake(staker);656 await helper.staking.unstake(staker);652 // Assert: Staker's frozen balance reduced on {income} amount657 // Assert: Staker's frozen balance reduced on {income} amount653 const stakerBalanceAfterUnstake = await helper.balance.getSubstrateFull(staker.address);658 const stakerBalanceAfterUnstake = await helper.balance.getSubstrateFull(staker.address);654 expect(stakerBalanceAfterUnstake).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: income});659 expect(stakerBalanceAfterUnstake).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: income});655 expect(stakerBalanceAfterUnstake.free / nominal).to.eq(1599n);660 expect(stakerBalanceAfterUnstake.free / nominal).to.eq(1599n);661 // FIXME: should remove app staking instantly or after unlocking period ends?662 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'appstake', amount: income, reasons: 'All'}, {id: 'ormlvest', amount: VESTED_TRANSFER, reasons: 'All'}]);663 656 // Assert: Balance after unstaking period ends664 // Assert: Balance after unstaking period ends657 const [pendingUnstake] = await helper.staking.getPendingUnstakePerBlock({Substrate: staker.address}); 665 const [pendingUnstake] = await helper.staking.getPendingUnstakePerBlock({Substrate: staker.address}); 658 await helper.wait.forParachainBlockNumber(pendingUnstake.block);666 await helper.wait.forParachainBlockNumber(pendingUnstake.block);659 const stakerBalanceAfterUnstakeFinished = await helper.balance.getSubstrateFull(staker.address);667 const stakerBalanceAfterUnstakeFinished = await helper.balance.getSubstrateFull(staker.address);660 expect(stakerBalanceAfterUnstakeFinished).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: 0n});668 expect(stakerBalanceAfterUnstakeFinished).to.contain({miscFrozen: VESTED_TRANSFER, feeFrozen: VESTED_TRANSFER, reserved: 0n});661 expect(stakerBalanceAfterUnstakeFinished.free > stakerBalanceAfterUnstake.free).to.be.true;669 expect(stakerBalanceAfterUnstakeFinished.free > stakerBalanceAfterUnstake.free).to.be.true;670 expect(await helper.balance.getLocked(staker.address)).to.deep.eq([{id: 'ormlvest', amount: VESTED_TRANSFER, reasons: 'All'}]);662 });671 });663 672 664 itSub('should bring compound interest', async ({helper}) => {673 itSub('should bring compound interest', async ({helper}) => {tests/src/util/playgrounds/unique.tsdiffbeforeafterboth2213 return {free: accountInfo.free.toBigInt(), miscFrozen: accountInfo.miscFrozen.toBigInt(), feeFrozen: accountInfo.feeFrozen.toBigInt(), reserved: accountInfo.reserved.toBigInt()};2213 return {free: accountInfo.free.toBigInt(), miscFrozen: accountInfo.miscFrozen.toBigInt(), feeFrozen: accountInfo.feeFrozen.toBigInt(), reserved: accountInfo.reserved.toBigInt()};2214 }2214 }22152216 async getLocked(address: TSubstrateAccount): Promise<[{id: string, amount: bigint, reason: string}]> {2217 const locks = (await this.helper.callRpc('api.query.balances.locks', [address])).toHuman();2218 return locks.map((lock: any) => {return {id: lock.id, amount: BigInt(lock.amount.replace(/,/g, '')), reasons: lock.reasons};});2219 }2215}2220}221622212217class EthereumBalanceGroup<T extends ChainHelperBase> extends HelperGroup<T> {2222class EthereumBalanceGroup<T extends ChainHelperBase> extends HelperGroup<T> {2295 return this.subBalanceGroup.getSubstrateFull(address);2300 return this.subBalanceGroup.getSubstrateFull(address);2296 }2301 }23022303 /**2304 * Get locked balances2305 * @param address substrate address2306 * @returns locked balances with reason via api.query.balances.locks2307 */2308 getLocked(address: TSubstrateAccount) {2309 return this.subBalanceGroup.getLocked(address);2310 }229723112298 /**2312 /**2299 * Get ethereum address balance2313 * Get ethereum address balance