git.delta.rocks / unique-network / refs/commits / 0954b32db3b2

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';1920chai.use(chaiAsPromised);21const expect = chai.expect;2223const Treasury = "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z";24const saneMinimumFee = 0.05;25const saneMaximumFee = 0.5;2627let alice: IKeyringPair;28let bob: IKeyringPair;2930describe('integration test: Fees must be credited to Treasury:', () => {31  before(async () => {32    await usingApi(async (api) => {33      alice = privateKey('//Alice');34      bob = privateKey('//Bob');35    });36  });3738  it('Total issuance does not change', async () => {39    await usingApi(async (api) => {40      const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString());4142      const alicePrivateKey = privateKey('//Alice');43      const amount = new BigNumber(1);44      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());4546      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));4748      const totalAfter = new BigNumber((await api.query.balances.totalIssuance()).toString());4950      expect(result.success).to.be.true;51      expect(totalAfter.toFixed()).to.be.equal(totalBefore.toFixed());52    });53  });5455  it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => {56    await usingApi(async (api) => {57      const alicePrivateKey = privateKey('//Alice');58      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());59      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());6061      const amount = new BigNumber(1);62      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());63      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));6465      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());66      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());67      const fee = aliceBalanceBefore.minus(aliceBalanceAfter).minus(amount);68      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);6970      expect(result.success).to.be.true;71      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());72    });73  });7475  it('Treasury balance increased by failed tx fee', async () => {76    await usingApi(async (api) => {77      const bobPrivateKey = privateKey('//Bob');78      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());79      const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());8081      const badTx = api.tx.balances.setBalance(alicesPublicKey, 0, 0);82      await expect(submitTransactionExpectFailAsync(bobPrivateKey, badTx)).to.be.rejected;8384      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());85      const bobBalanceAfter = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());86      const fee = bobBalanceBefore.minus(bobBalanceAfter);87      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);8889      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());90    });91  });9293  it('NFT Transactions also send fees to Treasury', async () => {94    await usingApi(async (api) => {95      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());96      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());9798      await createCollectionExpectSuccess();99100      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());101      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());102      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);103      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);104105      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());106    });107  });108109  it('Fees are sane', async () => {110    await usingApi(async (api) => {111      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());112      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());113114      await createCollectionExpectSuccess();115116      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());117      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());118      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);119      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);120121      expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee);122      expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee);123    });124  });125126  it('NFT Transfer fee is close to 0.1 Unique', async () => {127    await usingApi(async (api) => {128      const collectionId = await createCollectionExpectSuccess();129      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');130131      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());132      await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');133      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());134      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);135136      // console.log(fee.toString());137      const expectedTransferFee = 0.1;138      const tolerance = 0.00001;139      expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance);140    });141  });142143});144