difftreelog
Fix imflation unit tests
in: master
1 file changed
pallets/inflation/src/tests.rsdiffbeforeafterboth3use crate as pallet_inflation;3use crate as pallet_inflation;445use 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>;201821const YEAR: u64 = 2_629_800;19const YEAR: u64 = 5_259_600; // 6-second blocks20 // const YEAR: u64 = 2_629_800; // 12-second blocks21 // Expected 100-block inflation for year 1 is 100 * 100_000_000 / YEAR = FIRST_YEAR_BLOCK_INFLATION22const FIRST_YEAR_BLOCK_INFLATION: u64 = 1901;222323parameter_types! {24parameter_types! {24 pub const ExistentialDeposit: u64 = 1;25 pub const ExistentialDeposit: u64 = 1;110 .into()111 .into()111}112}113114macro_rules! block_inflation {115 // Block inflation doesn't have any argumets116 () => {117 // Return BlockInflation state variable current value118 <pallet_inflation::BlockInflation<Test>>::get()119 };120}121122#[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);128129 // BlockInflation should be set after inflation is started130 // first inflation deposit should be equal to BlockInflation131 MockBlockNumberProvider::set(1);132133 assert_eq!(block_inflation!(), 0);134 });135}112136113#[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);120144121 // BlockInflation should be set after 1st block and145 // BlockInflation should be set after inflation is started122 // first inflation deposit should be equal to BlockInflation146 // first inflation deposit should be equal to BlockInflation123 MockBlockNumberProvider::set(1);147 MockBlockNumberProvider::set(1);148149 // Start inflation as sudo124 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 = 3803127 assert_eq!(Inflation::block_inflation(), 3803);152 assert_eq!(153 Balances::free_balance(1234) - initial_issuance,154 block_inflation!()155 );156157 // Trigger inflation158 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);175176 // Start inflation as sudo143 Inflation::on_initialize(0);177 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));144178145 // Next inflation deposit happens when block is multiple of InflationBlockInterval179 // Next inflation deposit happens when block is greater then or equal to NextInflationBlock146 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);206207 // Start inflation as sudo175 Inflation::on_initialize(0);208 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));176209177 // 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 accordingly212 // Inflation is set to start in block 1, so first iteration is block 101179 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 );187221188 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 == 1951226 let expecter_year_2_inflation: u64 = (initial_issuance227 + 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. equality193 });230 });194}231}195196#[test]197fn inflation_in_1_to_9_years() {198 new_test_ext().execute_with(|| {199 // Total issuance = 1_000_000_000200 let initial_issuance: u64 = 1_000_000_000;201202 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);206207 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();212213 // 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 inflation215 assert!(block_inflation_year_before > block_inflation_year_after);216 }217 });218}219232220#[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);241242 // Start inflation as sudo243 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));244245 // Let inflation catch up246 for _year in 1..=9 {228 Inflation::on_initialize(0);247 Inflation::on_initialize(0);248 }229249230 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!();235255236 // Assert that next year inflation is equal to previous year inflation256 // Assert that next year inflation is equal to previous year inflation237 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);275276 // Start inflation as sudo277 assert_ok!(Inflation::start_inflation(RawOrigin::Root.into(), 1));255278256 for year in 0..=10 {279 for year in 0..=10 {257 // Year first block280 // Year first block258 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]);262285263 // Year second block286 // Year second block264 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]);268291269 // Year middle block292 // Year middle block270 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]);274297275 // Year last block298 // Year last block276 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 });