difftreelog
fix review
in: master
3 files changed
tests/src/app-promotion.test.tsdiffbeforeafterboth414 const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'});414 const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'});415 415 416 await collection.burn(collectionOwner);416 await collection.burn(collectionOwner);417 await expect(helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.stopSponsoringCollection(collection.collectionId))).to.be.rejected;417 await expect(helper.executeExtrinsic(palletAdmin, 'api.tx.appPromotion.stopSponsoringCollection', [collection.collectionId], true)).to.be.rejectedWith('common.CollectionNotFound');418 await expect(helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.stopSponsoringCollection(999999999))).to.be.rejected;418 await expect(helper.executeExtrinsic(palletAdmin, 'api.tx.appPromotion.stopSponsoringCollection', [999_999_999], true)).to.be.rejectedWith('common.CollectionNotFound');419 });419 });420});420});421421459459460 // new sponsor is pallet address460 // new sponsor is pallet address461 expect(await contractHelper.methods.hasSponsor(flipper.options.address).call()).to.be.true; 461 expect(await contractHelper.methods.hasSponsor(flipper.options.address).call()).to.be.true; 462 expect((await helper.api!.query.evmContractHelpers.owner(flipper.options.address)).toJSON()).to.be.equal(contractOwner); 462 expect((await helper.callRpc('api.query.evmContractHelpers.owner', [flipper.options.address])).toJSON()).to.be.equal(contractOwner); 463 expect((await helper.api!.query.evmContractHelpers.sponsoring(flipper.options.address)).toJSON()).to.deep.equal({463 expect((await helper.callRpc('api.query.evmContractHelpers.sponsoring', [flipper.options.address])).toJSON()).to.deep.equal({464 confirmed: {464 confirmed: {465 substrate: palletAddress,465 substrate: palletAddress,466 },466 },602602603 itSub('can not be called by non admin', async ({helper}) => {603 itSub('can not be called by non admin', async ({helper}) => {604 const nonAdmin = accounts.pop()!;604 const nonAdmin = accounts.pop()!;605 await expect(helper.signTransaction(nonAdmin, helper.api!.tx.appPromotion.payoutStakers(100))).to.be.rejected;605 await expect(helper.admin.payoutStakers(nonAdmin, 100)).to.be.rejectedWith('appPromotion.NoPermission');606 });606 });607607608 itSub('should increase total staked', async ({helper}) => {608 itSub('should increase total staked', async ({helper}) => {613 // Wait for rewards and pay613 // Wait for rewards and pay614 const [stakedInBlock] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});614 const [stakedInBlock] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});615 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock.block));615 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock.block));616 const totalPayout = (await helper.sudo.payoutStakers(palletAdmin, 100)).reduce((prev, payout) => prev + payout.payout, 0n);616 const totalPayout = (await helper.admin.payoutStakers(palletAdmin, 100)).reduce((prev, payout) => prev + payout.payout, 0n);617617618 const totalStakedAfter = await helper.staking.getTotalStaked();618 const totalStakedAfter = await helper.staking.getTotalStaked();619 expect(totalStakedAfter).to.equal(totalStakedBefore + (100n * nominal) + totalPayout);619 expect(totalStakedAfter).to.equal(totalStakedBefore + (100n * nominal) + totalPayout);634 const [_, stake2] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});634 const [_, stake2] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});635 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake2.block));635 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake2.block));636636637 const payoutToStaker = (await helper.sudo.payoutStakers(palletAdmin, 100)).find((payout) => payout.staker === staker.address)?.payout;637 const payoutToStaker = (await helper.admin.payoutStakers(palletAdmin, 100)).find((payout) => payout.staker === staker.address)?.payout;638 expect(payoutToStaker + 300n * nominal).to.equal(calculateIncome(300n * nominal, 10n));638 expect(payoutToStaker + 300n * nominal).to.equal(calculateIncome(300n * nominal, 10n));639639640 const totalStakedPerBlock = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});640 const totalStakedPerBlock = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});650 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});650 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});651 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD);651 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD);652652653 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));653 await helper.admin.payoutStakers(palletAdmin, 100);654 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});654 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});655 const frozenBalanceShouldBe = calculateIncome(100n * nominal, 10n, 2);655 const frozenBalanceShouldBe = calculateIncome(100n * nominal, 10n, 2);656 expect(stake.amount).to.be.equal(frozenBalanceShouldBe);656 expect(stake.amount).to.be.equal(frozenBalanceShouldBe);670 670 671 // so he did not receive any rewards671 // so he did not receive any rewards672 const totalBalanceBefore = await helper.balance.getSubstrate(staker.address);672 const totalBalanceBefore = await helper.balance.getSubstrate(staker.address);673 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));673 await helper.admin.payoutStakers(palletAdmin, 100);674 const totalBalanceAfter = await helper.balance.getSubstrate(staker.address);674 const totalBalanceAfter = await helper.balance.getSubstrate(staker.address);675675676 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);676 expect(totalBalanceBefore).to.be.equal(totalBalanceAfter);684 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});684 let [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});685 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block));685 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block));686 686 687 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));687 await helper.admin.payoutStakers(palletAdmin, 100);688 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});688 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});689 expect(stake.amount).to.equal(calculateIncome(100n * nominal, 10n));689 expect(stake.amount).to.equal(calculateIncome(100n * nominal, 10n));690 690 691 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD);691 await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD);692 await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));692 await helper.admin.payoutStakers(palletAdmin, 100);693 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});693 [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address});694 expect(stake.amount).to.equal(calculateIncome(100n * nominal, 10n, 2));694 expect(stake.amount).to.equal(calculateIncome(100n * nominal, 10n, 2));695 });695 });703 await Promise.all(oneHundredStakers.map(staker => helper.staking.stake(staker, 100n * nominal)));703 await Promise.all(oneHundredStakers.map(staker => helper.staking.stake(staker, 100n * nominal)));704 }704 }705 await helper.wait.newBlocks(40);705 await helper.wait.newBlocks(40);706 const result = await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));706 await helper.admin.payoutStakers(palletAdmin, 100);707 });707 });708708709 itSub.skip('can handle 40.000 rewards', async ({helper}) => {709 itSub.skip('can handle 40.000 rewards', async ({helper}) => {tests/src/eth/util/playgrounds/unique.dev.tsdiffbeforeafterboth200 }200 }201201202 async deployFlipper(signer: string): Promise<Contract> {202 async deployFlipper(signer: string): Promise<Contract> {203 return await this.helper.ethContract.deployByCode(signer, 'Flipper', `203 return await this.helper.ethContract.deployByCode(signer, 'Flipper', `204 contract Flipper {204 // SPDX-License-Identifier: UNLICENSED205 pragma solidity ^0.8.6;206207 contract Flipper {205 bool value = false;208 bool value = false;206 function flip() public {209 function flip() public {207 value = !value;210 value = !value;208 }211 }209 function getValue() public view returns (bool) {212 function getValue() public view returns (bool) {210 return value;213 return value;211 }214 }212 }215 }213 `);216 `);214 }217 }215} 218} 216 219 tests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth60 */60 */61 arrange: ArrangeGroup;61 arrange: ArrangeGroup;62 wait: WaitGroup;62 wait: WaitGroup;63 sudo: SudoGroup;63 admin: AdminGroup;646465 constructor(logger: { log: (msg: any, level: any) => void, level: any }) {65 constructor(logger: { log: (msg: any, level: any) => void, level: any }) {66 super(logger);66 super(logger);67 this.arrange = new ArrangeGroup(this);67 this.arrange = new ArrangeGroup(this);68 this.wait = new WaitGroup(this);68 this.wait = new WaitGroup(this);69 this.sudo = new SudoGroup(this);69 this.admin = new AdminGroup(this);70 }70 }717172 async connect(wsEndpoint: string, _listeners?: any): Promise<void> {72 async connect(wsEndpoint: string, _listeners?: any): Promise<void> {284 }284 }285}285}286286287class SudoGroup {287class AdminGroup {288 helper: UniqueHelper;288 helper: UniqueHelper;289289290 constructor(helper: UniqueHelper) {290 constructor(helper: UniqueHelper) {