git.delta.rocks / unique-network / refs/commits / f9806160e716

difftreelog

Tests: skip test for 1000 rewards

Max Andreev2022-09-07parent: #95510b9.patch.diff
in: master

1 file changed

modifiedtests/src/app-promotion.test.tsdiffbeforeafterboth
2727
28import {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);
4342
44before(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 address
49 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 payed
676 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 rewards
694 694
695 await helper.staking.stake(staker, 100n * nominal);695 await helper.staking.stake(staker, 100n * nominal);
696
696 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 });
710710
711 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 unstaked
712 await usingPlaygrounds(async (helper) => {713 await usingPlaygrounds(async (helper) => {
714 const oneHundredStakers = await helper.arrange.createCrowd(100, 1050n, alice);
715
716 // stakers stakes 10 times each
717 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 });
716724
734 });742 });
735});743});
736
737async 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}
749744
750function 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'));