git.delta.rocks / unique-network / refs/commits / 52d04b4c4f04

difftreelog

Fix fee sanity test

Greg Zaitsev2021-03-20parent: #6f9cded.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -665,6 +665,7 @@
             // Anyone can create a collection
             let who = ensure_signed(origin)?;
 
+            // Take a (non-refundable) deposit of collection creation
             let mut imbalance = <<<T as Config>::Currency as Currency<T::AccountId>>::PositiveImbalance>::zero();
             imbalance.subsume(<<T as Config>::Currency as Currency<T::AccountId>>::deposit_creating(
                 &T::TreasuryAccountId::get(),
modifiedtests/src/creditFeesToTreasury.test.tsdiffbeforeafterboth
after · tests/src/creditFeesToTreasury.test.ts
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;28const createCollectionDeposit = 100;2930let alice: IKeyringPair;31let bob: IKeyringPair;3233describe('integration test: Fees must be credited to Treasury:', () => {34  before(async () => {35    await usingApi(async (api) => {36      alice = privateKey('//Alice');37      bob = privateKey('//Bob');38    });39  });4041  it('Total issuance does not change', async () => {42    await usingApi(async (api) => {43      await waitNewBlocks(api, 1);4445      const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString());4647      const alicePrivateKey = privateKey('//Alice');48      const amount = new BigNumber(1);49      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());5051      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));5253      const totalAfter = new BigNumber((await api.query.balances.totalIssuance()).toString());5455      expect(result.success).to.be.true;56      expect(totalAfter.toFixed()).to.be.equal(totalBefore.toFixed());57    });58  });5960  it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => {61    await usingApi(async (api) => {62      await waitNewBlocks(api, 1);6364      const alicePrivateKey = privateKey('//Alice');65      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());66      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());6768      const amount = new BigNumber(1);69      const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());70      const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));7172      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());73      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());74      const fee = aliceBalanceBefore.minus(aliceBalanceAfter).minus(amount);75      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);7677      expect(result.success).to.be.true;78      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());79    });80  });8182  it('Treasury balance increased by failed tx fee', async () => {83    await usingApi(async (api) => {84      await waitNewBlocks(api, 1);8586      const bobPrivateKey = privateKey('//Bob');87      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());88      const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());8990      const badTx = api.tx.balances.setBalance(alicesPublicKey, 0, 0);91      await expect(submitTransactionExpectFailAsync(bobPrivateKey, badTx)).to.be.rejected;9293      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());94      const bobBalanceAfter = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());95      const fee = bobBalanceBefore.minus(bobBalanceAfter);96      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);9798      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());99    });100  });101102  it('NFT Transactions also send fees to Treasury', async () => {103    await usingApi(async (api) => {104      await waitNewBlocks(api, 1);105106      const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());107      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());108109      await createCollectionExpectSuccess();110111      const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());112      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());113      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);114      const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);115116      expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());117    });118  });119120  it('Fees are sane', async () => {121    await usingApi(async (api) => {122      await waitNewBlocks(api, 1);123124      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());125126      await createCollectionExpectSuccess();127128      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());129      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);130131      expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee + createCollectionDeposit);132      expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee  + createCollectionDeposit);133    });134  });135136  it('NFT Transfer fee is close to 0.1 Unique', async () => {137    await usingApi(async (api) => {138      await waitNewBlocks(api, 1);139140      const collectionId = await createCollectionExpectSuccess();141      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');142143      const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());144      await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');145      const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());146      const fee = aliceBalanceBefore.minus(aliceBalanceAfter);147148      // console.log(fee.toString());149      const expectedTransferFee = 0.1;150      const tolerance = 0.00001;151      expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance);152    });153  });154155});156