--- a/pallets/inflation/src/lib.rs +++ b/pallets/inflation/src/lib.rs @@ -3,23 +3,17 @@ // file 'LICENSE', which is part of this source code package. // -#![recursion_limit = "1024"] +// #![recursion_limit = "1024"] #![cfg_attr(not(feature = "std"), no_std)] -#![allow( - clippy::too_many_arguments, - clippy::unnecessary_mut_passed, - clippy::unused_unit -)] +#[cfg(feature = "runtime-benchmarks")] mod benchmarking; -#[cfg(test)] -mod mock; + #[cfg(test)] mod tests; use frame_support::{ dispatch::{DispatchResult}, - ensure, traits::{Currency, Get}, }; pub use pallet::*; @@ -28,7 +22,7 @@ traits::{BlockNumberProvider} }; -use std::convert::TryInto; +use sp_std::convert::TryInto; type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; @@ -44,12 +38,6 @@ use super::*; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; - - #[pallet::error] - pub enum Error { - /// Inflation has already been initialized - AlreadyInitialized, - } #[pallet::config] pub trait Config: frame_system::Config { @@ -144,17 +132,17 @@ where ::BlockNumber: From { ensure_root(origin)?; - // Ensure inflation has not been yet initialized + // Start inflation if it has not been yet initialized let next_inflation: T::BlockNumber = >::get(); - ensure!(next_inflation == 0u32.into(), Error::::AlreadyInitialized); - - // Recalculate inflation. This can be backdated and will catch up. - Self::recalculate_inflation(inflation_start_relay_block); - let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0); - >::set(inflation_start_relay_block + block_interval.into()); + if next_inflation == 0u32.into() { + // Recalculate inflation. This can be backdated and will catch up. + Self::recalculate_inflation(inflation_start_relay_block); + let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0); + >::set(inflation_start_relay_block + block_interval.into()); - // First time deposit - create Treasury account so that we can call deposit_into_existing everywhere else - T::Currency::deposit_creating(&T::TreasuryAccountId::get(), >::get()); + // First time deposit - create Treasury account so that we can call deposit_into_existing everywhere else + T::Currency::deposit_creating(&T::TreasuryAccountId::get(), >::get()); + } Ok(()) } --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -379,7 +379,7 @@ pallet-unique = { path = '../pallets/unique', default-features = false } up-rpc = { path = "../primitives/rpc", default-features = false } up-evm-mapping = { path = "../primitives/evm-mapping", default-features = false } -pallet-inflation = { path = '../pallets/inflation' } +pallet-inflation = { path = '../pallets/inflation', default-features = false } up-data-structs = { path = '../primitives/data-structs', default-features = false } pallet-common = { default-features = false, path = "../pallets/common" } pallet-fungible = { default-features = false, path = "../pallets/fungible" } --- a/tests/src/inflation.test.ts +++ b/tests/src/inflation.test.ts @@ -5,7 +5,8 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; -import {default as usingApi} from './substrate/substrate-api'; +import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api'; +import privateKey from './substrate/privateKey'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -14,8 +15,15 @@ it('First year inflation is 10%', async () => { await usingApi(async (api) => { - // Start inflation on relay block 1 - await api.tx.inflation.start_inflation(1); + // Make sure non-sudo can't start inflation + const tx = api.tx.inflation.startInflation(1); + const bob = privateKey('//Bob'); + await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected; + + // Start inflation on relay block 1 (Alice is sudo) + const alice = privateKey('//Alice'); + const sudoTx = api.tx.sudo.sudo(tx as any); + await submitTransactionAsync(alice, sudoTx); const blockInterval = (api.consts.inflation.inflationBlockInterval).toBigInt(); const totalIssuanceStart = (await api.query.inflation.startingYearTotalIssuance()).toBigInt();