git.delta.rocks / unique-network / refs/commits / 9d35eaceaefb

difftreelog

Add boundary tests for inflation rate

Greg Zaitsev2021-04-07parent: #b40985b.patch.diff
in: master

2 files changed

modifiedpallets/inflation/src/tests.rsdiffbeforeafterboth
--- a/pallets/inflation/src/tests.rs
+++ b/pallets/inflation/src/tests.rs
@@ -189,4 +189,53 @@
 		});
 	}
 
+    #[test]
+	fn inflation_rate_by_year() {
+		new_test_ext().execute_with(|| {
+            let payouts: u64 = YEAR / InflationBlockInterval::get() as u64;
+
+            // Inflation starts at 10% and does down by 2/3% every year until year 9 (included), 
+            // then it is flat.
+            let payout_by_year: [u64; 11] = [
+                1000,
+                933,
+                867,
+                800,
+                733,
+                667,
+                600,
+                533,
+                467,
+                400,
+                400
+            ];
+
+            // For accuracy total issuance = payout0 * payouts * 10;
+            let initial_issuance: u64 = payout_by_year[0] * payouts * 10;
+            let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
+            assert_eq!(Balances::free_balance(1234), initial_issuance);
+
+            for year in 0..=10 {
+                // Year first block
+                Inflation::on_initialize(year*YEAR);
+                let mut actual_payout = Inflation::block_inflation();
+                assert_eq!(actual_payout, payout_by_year[year as usize]);
+
+                // Year second block
+                Inflation::on_initialize(year*YEAR+1);
+                actual_payout = Inflation::block_inflation();
+                assert_eq!(actual_payout, payout_by_year[year as usize]);
+
+                // Year middle block
+                Inflation::on_initialize(year*YEAR + YEAR/2);
+                actual_payout = Inflation::block_inflation();
+                assert_eq!(actual_payout, payout_by_year[year as usize]);
+
+                // Year last block
+                Inflation::on_initialize((year + 1)*YEAR-1);
+                actual_payout = Inflation::block_inflation();
+                assert_eq!(actual_payout, payout_by_year[year as usize]);
+            }
+		});
+	}
 }
modifiedtests/src/inflation.test.tsdiffbeforeafterboth
before · tests/src/inflation.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  getGenericResult,15} from './util/helpers';1617chai.use(chaiAsPromised);18const expect = chai.expect;1920let alice: IKeyringPair;21let bob: IKeyringPair;2223describe('integration test: Inflation', () => {24  before(async () => {25    await usingApi(async (api) => {26      alice = privateKey('//Alice');27      bob = privateKey('//Bob');28    });29  });3031  it('First year inflation is 10%', async () => {32    await usingApi(async (api) => {3334      const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString());35      const totalIssuanceStart = new BigNumber((await api.query.inflation.startingYearTotalIssuance()).toString());36      const blockInflation = new BigNumber((await api.query.inflation.blockInflation()).toString());3738      const YEAR = 5259600; // Blocks in one year39      const totalExpectedInflation = totalIssuanceStart.multipliedBy(0.1);40      const totalActualInflation = blockInflation.multipliedBy(YEAR / blockInterval);4142      const tolerance = 0.00001; // Relative difference per year between theoretical and actual inflation43      expect(totalExpectedInflation.dividedBy(totalActualInflation).minus(1).abs().toNumber()).to.be.lessThan(tolerance);44    });45  });464748});49
after · tests/src/inflation.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 } from "./substrate/substrate-api";9import privateKey from "./substrate/privateKey";10import { BigNumber } from 'bignumber.js';11import { IKeyringPair } from '@polkadot/types/types';1213chai.use(chaiAsPromised);14const expect = chai.expect;1516let alice: IKeyringPair;17let bob: IKeyringPair;1819describe('integration test: Inflation', () => {20  before(async () => {21    await usingApi(async (api) => {22      alice = privateKey('//Alice');23      bob = privateKey('//Bob');24    });25  });2627  it('First year inflation is 10%', async () => {28    await usingApi(async (api) => {2930      const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString());31      const totalIssuanceStart = new BigNumber((await api.query.inflation.startingYearTotalIssuance()).toString());32      const blockInflation = new BigNumber((await api.query.inflation.blockInflation()).toString());3334      const YEAR = 5259600; // Blocks in one year35      const totalExpectedInflation = totalIssuanceStart.multipliedBy(0.1);36      const totalActualInflation = blockInflation.multipliedBy(YEAR / blockInterval);3738      const tolerance = 0.00001; // Relative difference per year between theoretical and actual inflation39      expect(totalExpectedInflation.dividedBy(totalActualInflation).minus(1).abs().toNumber()).to.be.lessThan(tolerance);40    });41  });4243});