# 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`