git.delta.rocks / unique-network / refs/commits / 2d6d3d4e076b

difftreelog

source

tests/src/creditFeesToTreasury.test.ts6.4 KiBsourcehistory
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import chai from 'chai';7import chaiAsPromised from 'chai-as-promised';8import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";9import { alicesPublicKey, bobsPublicKey } from "./accounts";10import privateKey from "./substrate/privateKey";11import { BigNumber } from 'bignumber.js';12import { IKeyringPair } from '@polkadot/types/types';13import { 14  createCollectionExpectSuccess, 15  createItemExpectSuccess,16  getGenericResult,17  transferExpectSuccess18} from './util/helpers';1920import { default as waitNewBlocks } from './substrate/wait-new-blocks';2122chai.use(chaiAsPromised);23const expect = chai.expect;2425const Treasury = "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z";26const saneMinimumFee = 0.05;27const saneMaximumFee = 0.5;2829let alice: IKeyringPair;30let bob: IKeyringPair;3132describe('integration test: Fees must be credited to Treasury:', () => {33  before(async () => {34    await usingApi(async (api) => {35      alice = privateKey('//Alice');36      bob = privateKey('//Bob');37    });38  });3940  it('Total issuance does not change', async () => {41    await usingApi(async (api) => {42      await waitNewBlocks(api, 1);4344      const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString());4546      const alicePrivateKey = privateKey('//Alice');47      const amount = new BigNumber(1);48      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());4950      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));5152      const totalAfter = new BigNumber((await api.query.balances.totalIssuance()).toString());5354      expect(result.success).to.be.true;55      expect(totalAfter.toFixed()).to.be.equal(totalBefore.toFixed());56    });57  });5859  it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => {60    await usingApi(async (api) => {61      await waitNewBlocks(api, 1);6263      const alicePrivateKey = privateKey('//Alice');64      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());65      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());6667      const amount = new BigNumber(1);68      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());69      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));7071      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());72      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());73      const fee = aliceBalanceBefore.minus(aliceBalanceAfter).minus(amount);74      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);7576      expect(result.success).to.be.true;77      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());78    });79  });8081  it('Treasury balance increased by failed tx fee', async () => {82    await usingApi(async (api) => {83      await waitNewBlocks(api, 1);8485      const bobPrivateKey = privateKey('//Bob');86      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());87      const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());8889      const badTx = api.tx.balances.setBalance(alicesPublicKey, 0, 0);90      await expect(submitTransactionExpectFailAsync(bobPrivateKey, badTx)).to.be.rejected;9192      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());93      const bobBalanceAfter = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());94      const fee = bobBalanceBefore.minus(bobBalanceAfter);95      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);9697      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());98    });99  });100101  it('NFT Transactions also send fees to Treasury', async () => {102    await usingApi(async (api) => {103      await waitNewBlocks(api, 1);104105      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());106      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());107108      await createCollectionExpectSuccess();109110      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());111      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());112      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);113      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);114115      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());116    });117  });118119  it('Fees are sane', async () => {120    await usingApi(async (api) => {121      await waitNewBlocks(api, 1);122123      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());124125      await createCollectionExpectSuccess();126127      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());128      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);129130      expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee);131      expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee);132    });133  });134135  it('NFT Transfer fee is close to 0.1 Unique', async () => {136    await usingApi(async (api) => {137      await waitNewBlocks(api, 1);138139      const collectionId = await createCollectionExpectSuccess();140      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');141142      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());143      await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');144      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());145      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);146147      // console.log(fee.toString());148      const expectedTransferFee = 0.1;149      const tolerance = 0.00001;150      expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance);151    });152  });153154});155