difftreelog
Tests: skip test for 1000 rewards
in: master
1 file changed
tests/src/app-promotion.test.tsdiffbeforeafterboth272728import {encodeAddress} from '@polkadot/util-crypto';28import {encodeAddress} from '@polkadot/util-crypto';29import {stringToU8a} from '@polkadot/util';29import {stringToU8a} from '@polkadot/util';30import {ApiPromise} from '@polkadot/api';31import {SponsoringMode, contractHelpers, createEthAccountWithBalance, deployFlipper, itWeb3, transferBalanceToEth} from './eth/util/helpers';30import {SponsoringMode, contractHelpers, createEthAccountWithBalance, deployFlipper, itWeb3, transferBalanceToEth} from './eth/util/helpers';32chai.use(chaiAsPromised);31chai.use(chaiAsPromised);33const expect = chai.expect;32const expect = chai.expect;42const rewardAvailableInBlock = (stakedInBlock: bigint) => (stakedInBlock - stakedInBlock % LOCKING_PERIOD) + (LOCKING_PERIOD * 2n);41const rewardAvailableInBlock = (stakedInBlock: bigint) => (stakedInBlock - stakedInBlock % LOCKING_PERIOD) + (LOCKING_PERIOD * 2n);434244before(async function () {43before(async function () {45 await usingPlaygrounds(async (helper, privateKeyWrapper) => {44 await usingPlaygrounds(async (helper, privateKey) => {46 if (!getModuleNames(helper.api!).includes(Pallets.AppPromotion)) this.skip();45 if (!getModuleNames(helper.api!).includes(Pallets.AppPromotion)) this.skip();47 alice = privateKeyWrapper('//Alice');46 alice = privateKey('//Alice');48 palletAdmin = privateKeyWrapper('//Charlie'); // TODO use custom address47 palletAdmin = privateKey('//Charlie'); // TODO use custom address49 await helper.signTransaction(alice, helper.api!.tx.sudo.sudo(helper.api!.tx.appPromotion.setAdminAddress({Substrate: palletAdmin.address})));48 await helper.signTransaction(alice, helper.api!.tx.sudo.sudo(helper.api!.tx.appPromotion.setAdminAddress({Substrate: palletAdmin.address})));50 nominal = helper.balance.getOneTokenNominal();49 nominal = helper.balance.getOneTokenNominal();51 await helper.balance.transferToSubstrate(alice, palletAdmin.address, 1000n * nominal);50 await helper.balance.transferToSubstrate(alice, palletAdmin.address, 1000n * nominal);675 // staker unstakes before rewards has been payed674 // staker unstakes before rewards has been payed676 const staker = accounts.pop()!;675 const staker = accounts.pop()!;677 await helper.staking.stake(staker, 100n * nominal);676 await helper.staking.stake(staker, 100n * nominal);677 const stakedInBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}))[0][0];678 await waitForRelayBlock(helper.api!, 40);678 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock) + LOCKING_PERIOD);679 await helper.staking.unstake(staker);679 await helper.staking.unstake(staker);680 680 681 // so he did not receive any rewards681 // so he did not receive any rewards694 694 695 await helper.staking.stake(staker, 100n * nominal);695 await helper.staking.stake(staker, 100n * nominal);696696 await helper.staking.stake(staker, 200n * nominal);697 const stakedInBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}))[0][0];697 await helper.staking.stake(staker, 300n * nominal);698 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock));698 699 699 await waitForRelayBlock(helper.api!, 34);700 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));700 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));701 let totalStakedPerBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address})).map(s => s[1]);701 let totalStakedPerBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address})).map(s => s[1]);702 expect(totalStakedPerBlock).to.deep.equal([calculateIncome(100n * nominal, 10n), calculateIncome(200n * nominal, 10n), calculateIncome(300n * nominal, 10n)]);702 expect(totalStakedPerBlock).to.deep.equal([calculateIncome(100n * nominal, 10n)]);703 703 704 await waitForRelayBlock(helper.api!, 20);704 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock) + LOCKING_PERIOD);705 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));705 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));706 totalStakedPerBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address})).map(s => s[1]);706 totalStakedPerBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address})).map(s => s[1]);707 expect(totalStakedPerBlock).to.deep.equal([calculateIncome(100n * nominal, 10n, 2), calculateIncome(200n * nominal, 10n, 2), calculateIncome(300n * nominal, 10n, 2)]); 707 expect(totalStakedPerBlock).to.deep.equal([calculateIncome(100n * nominal, 10n, 2)]); 708 });708 });709 });709 });710710711 it('can be paid 1000 rewards in a time', async () => {711 it.skip('can be paid 1000 rewards in a time', async () => {712 // all other stakes should be unstaked712 await usingPlaygrounds(async (helper) => {713 await usingPlaygrounds(async (helper) => {714 const oneHundredStakers = await helper.arrange.createCrowd(100, 1050n, alice);715716 // stakers stakes 10 times each717 for (let i = 0; i < 10; i++) {718 await Promise.all(oneHundredStakers.map(staker => helper.staking.stake(staker, 100n * nominal)));719 }713 expect.fail('Test not implemented');720 await helper.wait.newBlocks(40);721 const result = await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));714 });722 });715 });723 });716724734 });742 });735});743});736737async function waitForRelayBlock(api: ApiPromise, blocks = 1): Promise<void> {738 const current_block = (await api.query.parachainSystem.lastRelayChainBlockNumber()).toNumber();739 return new Promise<void>(async (resolve, reject) => {740 const unsubscribe = await api.query.parachainSystem.validationData(async (data) => {741 // console.log(`${current_block} || ${data.value.relayParentNumber.toNumber()}`);742 if (data.value.relayParentNumber.toNumber() - current_block >= blocks) {743 unsubscribe();744 resolve();745 }746 });747 });748}749744750function calculatePalleteAddress(palletId: any) {745function calculatePalleteAddress(palletId: any) {751 const address = stringToU8a(('modl' + palletId).padEnd(32, '\0'));746 const address = stringToU8a(('modl' + palletId).padEnd(32, '\0'));