difftreelog
sending fees to treasury + integration test
in: master
5 files changed
runtime/src/lib.rsdiffbeforeafterboth--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -315,7 +315,7 @@
type Balance = Balance;
/// The ubiquitous event type.
type Event = Event;
- type DustRemoval = ();
+ type DustRemoval = Treasury;
type ExistentialDeposit = ExistentialDeposit;
type AccountStore = System;
type WeightInfo = ();
@@ -357,7 +357,7 @@
impl pallet_transaction_payment::Trait for Runtime {
type Currency = pallet_balances::Module<Runtime>;
- type OnTransactionPayment = ();
+ type OnTransactionPayment = Treasury;
type TransactionByteFee = TransactionByteFee;
type WeightToFee = IdentityFee<Balance>;
type FeeMultiplierUpdate = ();
tests/package-lock.jsondiffbeforeafterboth--- a/tests/package-lock.json
+++ b/tests/package-lock.json
@@ -13,13 +13,12 @@
"@polkadot/api-contract": "^2.3.1",
"@polkadot/types": "^2.3.1",
"@polkadot/util": "^3.4.1",
- "@types/bn.js": "^4.11.6",
+ "bignumber.js": "^9.0.0",
"chai-as-promised": "^7.1.1"
},
"devDependencies": {
"@polkadot/dev": "^0.52.11",
"@polkadot/ts": "^0.3.41",
- "@types/bn.js": "^4.11.6",
"@types/chai": "^4.2.12",
"@types/chai-as-promised": "^7.1.3",
"@types/mocha": "^8.0.3",
@@ -7114,6 +7113,14 @@
"node": "*"
}
},
+ "node_modules/bignumber.js": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
+ "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/binary-extensions": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
@@ -34960,6 +34967,11 @@
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true
},
+ "bignumber.js": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
+ "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
+ },
"binary-extensions": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
tests/package.jsondiffbeforeafterboth--- a/tests/package.json
+++ b/tests/package.json
@@ -6,7 +6,6 @@
"devDependencies": {
"@polkadot/dev": "^0.52.11",
"@polkadot/ts": "^0.3.41",
- "@types/bn.js": "^4.11.6",
"@types/chai": "^4.2.12",
"@types/chai-as-promised": "^7.1.3",
"@types/mocha": "^8.0.3",
@@ -27,7 +26,7 @@
"@polkadot/api-contract": "^2.3.1",
"@polkadot/types": "^2.3.1",
"@polkadot/util": "^3.4.1",
- "@types/bn.js": "^4.11.6",
+ "bignumber.js": "^9.0.0",
"chai-as-promised": "^7.1.1"
},
"standard": {
tests/src/crefitFeesToTreasury.test.tsdiffbeforeafterboth1import chai from 'chai';2import chaiAsPromised from 'chai-as-promised';3import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";4import { alicesPublicKey, bobsPublicKey } from "./accounts";5import privateKey from "./substrate/privateKey";6import { BigNumber } from 'bignumber.js';7import { createCollectionExpectSuccess, getGenericResult } from './util/helpers';89chai.use(chaiAsPromised);10const expect = chai.expect;1112const Treasury = "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z";13const saneMinimumFee = 0.0001;14const saneMaximumFee = 0.01;1516describe('integration test: Fees must be credited to Treasury:', () => {17 it('Total issuance does not change', async () => {18 await usingApi(async (api) => {19 const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString());2021 const alicePrivateKey = privateKey('//Alice');22 const amount = new BigNumber(1);23 const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());2425 const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));2627 const totalAfter = new BigNumber((await api.query.balances.totalIssuance()).toString());2829 expect(result.success).to.be.true;30 expect(totalAfter.toFixed()).to.be.equal(totalBefore.toFixed());31 });32 });3334 it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => {35 await usingApi(async (api) => {36 const alicePrivateKey = privateKey('//Alice');37 const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());38 const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());3940 const amount = new BigNumber(1);41 const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());42 const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));4344 const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());45 const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());46 const fee = aliceBalanceBefore.minus(aliceBalanceAfter).minus(amount);47 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);4849 expect(result.success).to.be.true;50 expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());51 });52 });5354 it('Treasury balance increased by failed tx fee', async () => {55 await usingApi(async (api) => {56 const bobPrivateKey = privateKey('//Bob');57 const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());58 const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());5960 const badTx = api.tx.balances.setBalance(alicesPublicKey, 0, 0);61 const result = getGenericResult(await submitTransactionAsync(bobPrivateKey, badTx));6263 const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());64 const bobBalanceAfter = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());65 const fee = bobBalanceBefore.minus(bobBalanceAfter);66 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);6768 expect(result.success).to.be.false;69 expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());70 });71 });7273 it('NFT Transactions also send fees to Treasury', async () => {74 await usingApi(async (api) => {75 const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());76 const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());7778 await createCollectionExpectSuccess('A', 'B', 'C', 'NFT');7980 const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());81 const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());82 const fee = aliceBalanceBefore.minus(aliceBalanceAfter);83 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);8485 expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());86 });87 });8889 it('Fees are sane', async () => {90 await usingApi(async (api) => {91 const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());92 const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());9394 await createCollectionExpectSuccess('A', 'B', 'C', 'NFT');9596 const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());97 const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());98 const fee = aliceBalanceBefore.minus(aliceBalanceAfter);99 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);100101 expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(0.01);102 expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(0.0001);103 });104 });105106});107tests/src/util/helpers.tsdiffbeforeafterboth--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -9,11 +9,28 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
+type GenericResult = {
+ success: boolean,
+};
+
type CreateCollectionResult = {
success: boolean,
collectionId: number
};
+export function getGenericResult(events: EventRecord[]): GenericResult {
+ let result: GenericResult = {
+ success: false
+ }
+ events.forEach(({ phase, event: { data, method, section } }) => {
+ // console.log(` ${phase}: ${section}.${method}:: ${data}`);
+ if (method == 'ExtrinsicSuccess') {
+ result.success = true;
+ }
+ });
+ return result;
+}
+
function getCreateCollectionResult(events: EventRecord[]): CreateCollectionResult {
let success = false;
let collectionId: number = 0;