### Inflation formula improvements - [ ] set `ideal_stake` (perquintill) through governance (`root_track`), instead of using the number of parachain slots to calculate - [ ] set `max_annual_inflation` (perquintill) through governance (`root_track`) - [ ] set `min_annual_inflation` (perquintill) through governance (`root_track`) - [ ] set `falloff` (perquintill) through governance (`root_track`) - [ ] set `max_staking_rewards` (perquintill) through governance (`root_track`) - [ ] all values should default to the current ones ### Current implementation: ```rust! pub fn era_payout( total_staked: Balance, total_stakable: Balance, max_annual_inflation: Perquintill, period_fraction: Perquintill, auctioned_slots: u64, ) -> (Balance, Balance) { use pallet_staking_reward_fn::compute_inflation; use sp_runtime::traits::Saturating; let min_annual_inflation = Perquintill::from_rational(25u64, 1000u64); let delta_annual_inflation = max_annual_inflation.saturating_sub(min_annual_inflation); // 30% reserved for up to 60 slots. let auction_proportion = Perquintill::from_rational(auctioned_slots.min(60), 200u64); // Therefore the ideal amount at stake (as a percentage of total issuance) is 75% less the // amount that we expect to be taken up with auctions. let ideal_stake = Perquintill::from_percent(75).saturating_sub(auction_proportion); let stake = Perquintill::from_rational(total_staked, total_stakable); let falloff = Perquintill::from_percent(5); let adjustment = compute_inflation(stake, ideal_stake, falloff); let staking_inflation = min_annual_inflation.saturating_add(delta_annual_inflation * adjustment); let max_payout = period_fraction * max_annual_inflation * total_stakable; let staking_payout = (period_fraction * staking_inflation) * total_stakable; let rest = max_payout.saturating_sub(staking_payout); let other_issuance = total_stakable.saturating_sub(total_staked); if total_staked > other_issuance { let _cap_rest = Perquintill::from_rational(other_issuance, total_staked) * staking_payout; // We don't do anything with this, but if we wanted to, we could introduce a cap on the // treasury amount with: `rest = rest.min(cap_rest);` } (staking_payout, rest) } ```