# Configurable params Runtime constants - can be covered with integration tests, as they are fixed in compile time. - will need to check to make sure integration tests covered these params Pallet storage parameters - Make them bounded: `min`, `max`, `maxChangeAbs` - To limit maximum, minimum value, and maximum change on each update. - Similar to `BoundedVec`, bounds are defined as runtime types. Define more new bounded types if needed. Example: ```rust struct BoundedRate<Range, MaxChangeAbs> { rate: Rate, _phantom: PhantomData<(Range, MaxChangeAbs)>, }; enum Error { BelowMin, AboveMax, ExceedMaxChangeAbs, }; impl<Range: Get<(Rate, Rate)>, MaxChangeAbs: Get<Rate>> BoundedRate<Range, MaxChangeAbs> { fn set_rate(new: Rate) -> Result<(), Error> { // check limits // ... } } type FractionalRate = BoundedRate<Get<(Zero, One)>, OneFifth>; // pallet storage pub type Param<T> = StorageValue<_, FractionalRate>; ``` ## Pallet storage params CDP engine - `set_collateral_params`: `Rate`, `Balance` homa - `update_homa_params`: `Rate`, `Balance` - `update_bump_era_params`: `T::BlockNumber` incentives - `update_incentive_rewards`: `Balance` - (deprecated) `update_dex_saving_rewards` - `update_claim_reward_deduction_rates`: `Rate`