git.delta.rocks / unique-network / refs/commits / 3495f61f0acd

difftreelog

Fix imflation unit tests

Greg Zaitsev2021-12-07parent: #4a7e624.patch.diff
in: master

1 file changed

modifiedpallets/inflation/src/tests.rsdiffbeforeafterboth
3use crate as pallet_inflation;3use crate as pallet_inflation;
44
5use frame_support::{5use frame_support::{
6 assert_ok, parameter_types,
6 traits::{Currency},7 traits::{Currency, OnInitialize, Everything},
7 parameter_types,
8};8};
9use frame_support::{9use frame_system::RawOrigin;
10 traits::{OnInitialize, Everything},
11};
12use sp_core::H256;10use sp_core::H256;
13use sp_runtime::{11use sp_runtime::{
14 traits::{BlakeTwo256, BlockNumberProvider, IdentityLookup},12 traits::{BlakeTwo256, BlockNumberProvider, IdentityLookup},
18type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;16type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
19type Block = frame_system::mocking::MockBlock<Test>;17type Block = frame_system::mocking::MockBlock<Test>;
2018
21const YEAR: u64 = 2_629_800;19const YEAR: u64 = 5_259_600; // 6-second blocks
20 // const YEAR: u64 = 2_629_800; // 12-second blocks
21 // Expected 100-block inflation for year 1 is 100 * 100_000_000 / YEAR = FIRST_YEAR_BLOCK_INFLATION
22const FIRST_YEAR_BLOCK_INFLATION: u64 = 1901;
2223
23parameter_types! {24parameter_types! {
24 pub const ExistentialDeposit: u64 = 1;25 pub const ExistentialDeposit: u64 = 1;
110 .into()111 .into()
111}112}
113
114macro_rules! block_inflation {
115 // Block inflation doesn't have any argumets
116 () => {
117 // Return BlockInflation state variable current value
118 <pallet_inflation::BlockInflation<Test>>::get()
119 };
120}
121
122#[test]
123fn uninitialized_inflation() {
124 new_test_ext().execute_with(|| {
125 let initial_issuance: u64 = 1_000_000_000;
126 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
127 assert_eq!(Balances::free_balance(1234), initial_issuance);
128
129 // BlockInflation should be set after inflation is started
130 // first inflation deposit should be equal to BlockInflation
131 MockBlockNumberProvider::set(1);
132
133 assert_eq!(block_inflation!(), 0);
134 });
135}
112136
113#[test]137#[test]
114fn inflation_works() {138fn inflation_works() {
118 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);142 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
119 assert_eq!(Balances::free_balance(1234), initial_issuance);143 assert_eq!(Balances::free_balance(1234), initial_issuance);
120144
121 // BlockInflation should be set after 1st block and145 // BlockInflation should be set after inflation is started
122 // first inflation deposit should be equal to BlockInflation146 // first inflation deposit should be equal to BlockInflation
123 MockBlockNumberProvider::set(1);147 MockBlockNumberProvider::set(1);
148
149 // Start inflation as sudo
124 Inflation::on_initialize(0);150 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));
125151 assert_eq!(block_inflation!(), FIRST_YEAR_BLOCK_INFLATION);
126 // Expected 100-block inflation for year 1 is 100 * 100_000_000 / YEAR = 3803
127 assert_eq!(Inflation::block_inflation(), 3803);152 assert_eq!(
153 Balances::free_balance(1234) - initial_issuance,
154 block_inflation!()
155 );
156
157 // Trigger inflation
158 MockBlockNumberProvider::set(102);
159 Inflation::on_initialize(0);
128 assert_eq!(160 assert_eq!(
129 Balances::free_balance(1234) - initial_issuance,161 Balances::free_balance(1234) - initial_issuance,
130 Inflation::block_inflation()162 2 * block_inflation!()
131 );163 );
132 });164 });
133}165}
141 assert_eq!(Balances::free_balance(1234), initial_issuance);173 assert_eq!(Balances::free_balance(1234), initial_issuance);
142 MockBlockNumberProvider::set(1);174 MockBlockNumberProvider::set(1);
175
176 // Start inflation as sudo
143 Inflation::on_initialize(0);177 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));
144178
145 // Next inflation deposit happens when block is multiple of InflationBlockInterval179 // Next inflation deposit happens when block is greater then or equal to NextInflationBlock
146 let mut block: u32 = 2;180 let mut block: u64 = 2;
147 let balance_before: u64 = Balances::free_balance(1234);181 let balance_before: u64 = Balances::free_balance(1234);
148 while block % InflationBlockInterval::get() != 0 {182 while block < <pallet_inflation::NextInflationBlock<Test>>::get() {
149 MockBlockNumberProvider::set(block as u64);183 MockBlockNumberProvider::set(block as u64);
150 Inflation::on_initialize(0);184 Inflation::on_initialize(0);
151 block += 1;185 block += 1;
157 MockBlockNumberProvider::set(block as u64);191 MockBlockNumberProvider::set(block as u64);
158 Inflation::on_initialize(0);192 Inflation::on_initialize(0);
159 let balance_after: u64 = Balances::free_balance(1234);193 let balance_after: u64 = Balances::free_balance(1234);
160 assert_eq!(194 assert_eq!(balance_after - balance_just_before, block_inflation!());
161 balance_after - balance_just_before,
162 Inflation::block_inflation()
163 );
164 });195 });
165}196}
173 assert_eq!(Balances::free_balance(1234), initial_issuance);204 assert_eq!(Balances::free_balance(1234), initial_issuance);
174 MockBlockNumberProvider::set(1);205 MockBlockNumberProvider::set(1);
206
207 // Start inflation as sudo
175 Inflation::on_initialize(0);208 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));
176209
177 // Go through all the block inflations for year 1,210 // Go through all the block inflations for year 1,
178 // total issuance will be updated accordingly211 // total issuance will be updated accordingly
212 // Inflation is set to start in block 1, so first iteration is block 101
179 for block in (100..YEAR).step_by(100) {213 for block in (101..YEAR).step_by(100) {
180 MockBlockNumberProvider::set(block);214 MockBlockNumberProvider::set(block);
181 Inflation::on_initialize(0);215 Inflation::on_initialize(0);
182 }216 }
183 assert_eq!(217 assert_eq!(
184 initial_issuance + (3803 * (YEAR / 100)),218 initial_issuance + (FIRST_YEAR_BLOCK_INFLATION * (YEAR / 100)),
185 <Balances as Currency<_>>::total_issuance()219 <Balances as Currency<_>>::total_issuance()
186 );220 );
187221
188 MockBlockNumberProvider::set(YEAR);222 MockBlockNumberProvider::set(YEAR + 1);
189 Inflation::on_initialize(0);223 Inflation::on_initialize(0);
190 let block_inflation_year_1 = Inflation::block_inflation();224 let block_inflation_year_2 = block_inflation!();
191 // Expected 100-block inflation for year 2: 100 * 9.33% * initial issuance * 110% / YEAR = 3904225 // Expected 100-block inflation for year 2: 100 * 9.33% * initial issuance * 110% / YEAR == 1951
226 let expecter_year_2_inflation: u64 = (initial_issuance
227 + FIRST_YEAR_BLOCK_INFLATION * YEAR / 100)
228 * 933 * 100 / (10000 * YEAR);
192 assert_eq!(block_inflation_year_1, 3904);229 assert_eq!(block_inflation_year_2 / 10, expecter_year_2_inflation / 10); // divide by 10 for approx. equality
193 });230 });
194}231}
195
196#[test]
197fn inflation_in_1_to_9_years() {
198 new_test_ext().execute_with(|| {
199 // Total issuance = 1_000_000_000
200 let initial_issuance: u64 = 1_000_000_000;
201
202 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
203 assert_eq!(Balances::free_balance(1234), initial_issuance);
204 MockBlockNumberProvider::set(1);
205 Inflation::on_initialize(0);
206
207 for year in 1..=9 {
208 let block_inflation_year_before = Inflation::block_inflation();
209 MockBlockNumberProvider::set(YEAR * year);
210 Inflation::on_initialize(0);
211 let block_inflation_year_after = Inflation::block_inflation();
212
213 // SBP M2 review: this is actually not true (not for the first few years)
214 // Assert that next year inflation is less than previous year inflation
215 assert!(block_inflation_year_before > block_inflation_year_after);
216 }
217 });
218}
219232
220#[test]233#[test]
221fn inflation_after_year_10_is_flat() {234fn inflation_after_year_10_is_flat() {
224 let initial_issuance: u64 = 1_000_000_000;237 let initial_issuance: u64 = 1_000_000_000;
225 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);238 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
226 assert_eq!(Balances::free_balance(1234), initial_issuance);239 assert_eq!(Balances::free_balance(1234), initial_issuance);
227 MockBlockNumberProvider::set(YEAR * 9);240 MockBlockNumberProvider::set(YEAR * 9 + 1);
241
242 // Start inflation as sudo
243 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));
244
245 // Let inflation catch up
246 for _year in 1..=9 {
228 Inflation::on_initialize(0);247 Inflation::on_initialize(0);
248 }
229249
230 for year in 10..=20 {250 for year in 10..=20 {
231 let block_inflation_year_before = Inflation::block_inflation();251 let block_inflation_year_before = block_inflation!();
232 MockBlockNumberProvider::set(YEAR * year);252 MockBlockNumberProvider::set(YEAR * year + 1);
233 Inflation::on_initialize(0);253 Inflation::on_initialize(0);
234 let block_inflation_year_after = Inflation::block_inflation();254 let block_inflation_year_after = block_inflation!();
235255
236 // Assert that next year inflation is equal to previous year inflation256 // Assert that next year inflation is equal to previous year inflation
237 assert_eq!(block_inflation_year_before, block_inflation_year_after);257 assert_eq!(block_inflation_year_before, block_inflation_year_after);
253 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);273 let _ = <Balances as Currency<_>>::deposit_creating(&1234, initial_issuance);
254 assert_eq!(Balances::free_balance(1234), initial_issuance);274 assert_eq!(Balances::free_balance(1234), initial_issuance);
275
276 // Start inflation as sudo
277 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));
255278
256 for year in 0..=10 {279 for year in 0..=10 {
257 // Year first block280 // Year first block
258 MockBlockNumberProvider::set(YEAR * year);281 MockBlockNumberProvider::set(YEAR * year + 1);
259 Inflation::on_initialize(0);282 Inflation::on_initialize(0);
260 let mut actual_payout = Inflation::block_inflation();283 let mut actual_payout = block_inflation!();
261 assert_eq!(actual_payout, payout_by_year[year as usize]);284 assert_eq!(actual_payout, payout_by_year[year as usize]);
262285
263 // Year second block286 // Year second block
264 MockBlockNumberProvider::set(YEAR * year + 1);287 MockBlockNumberProvider::set(YEAR * year + 2);
265 Inflation::on_initialize(0);288 Inflation::on_initialize(0);
266 actual_payout = Inflation::block_inflation();289 actual_payout = block_inflation!();
267 assert_eq!(actual_payout, payout_by_year[year as usize]);290 assert_eq!(actual_payout, payout_by_year[year as usize]);
268291
269 // Year middle block292 // Year middle block
270 MockBlockNumberProvider::set(year * YEAR + YEAR / 2);293 MockBlockNumberProvider::set(year * YEAR + YEAR / 2);
271 Inflation::on_initialize(0);294 Inflation::on_initialize(0);
272 actual_payout = Inflation::block_inflation();295 actual_payout = block_inflation!();
273 assert_eq!(actual_payout, payout_by_year[year as usize]);296 assert_eq!(actual_payout, payout_by_year[year as usize]);
274297
275 // Year last block298 // Year last block
276 MockBlockNumberProvider::set((year + 1) * YEAR - 1);299 MockBlockNumberProvider::set((year + 1) * YEAR);
277 Inflation::on_initialize(0);300 Inflation::on_initialize(0);
278 actual_payout = Inflation::block_inflation();301 actual_payout = block_inflation!();
279 assert_eq!(actual_payout, payout_by_year[year as usize]);302 assert_eq!(actual_payout, payout_by_year[year as usize]);
280 }303 }
281 });304 });