if self.collateral.mint_total_supply == 0 as u64 {
return Ok((Rate::zero(),Rate::zero()));
if self.liquidity.borrowed_amount_wads.lt(&Decimal::one()){
return Ok((Rate::one(),Rate::zero()));
let utilization_rate = self.liquidity.utilization_rate()?;
let kink_rate = Rate::try_from(
Decimal::from(self.bonus.kink_util_rate).try_div(Decimal::from(10000 as u64))?
if utilization_rate < kink_rate {
let normalized_rate = utilization_rate.try_div(kink_rate)?;
let min_rate = Rate::from_percent(0);
let rate_range = Rate::from_percent(50);
let mining_rate = normalized_rate.try_mul(rate_range)?.try_add(min_rate)?;
Ok((mining_rate,Rate::one().try_sub(mining_rate)?))
let normalized_rate = utilization_rate
.try_div(Rate::from_percent(100u8).try_sub(kink_rate)?)?;
let min_rate = Rate::from_percent(50);
let rate_range = Rate::from_percent(100u8).try_sub(min_rate)?;
let mining_rate = normalized_rate.try_mul(rate_range)?.try_add(min_rate)?;
Ok((mining_rate,Rate::one().try_sub(mining_rate)?))