calculateBorrowRate
is used to calculate the usage rate.
This usageRate is then used to calculate the usageIndex which determines interest paid by borrowers. The higher the usageRate, the higher the usagIndex and subsequently the interest for borrowers.
Let's look at calculations inside the calculateBorrowRate()
function.
If we look at the second branch it correctly increases rates when utilization is greater than the optimal, since the goal is to disincentivize borrowing activities to bring utilization closer back to optimal. However, the first branch that is triggered when utilization is lesser or equal to the optimal, also increases the rate, which yet again disincentivizes borrowing even more, since there's already not enough borrowing activity. Additionally, rates are also increased when utilization is at the optimal rate, while they should stay the same as the balance has already been reached and there's no need to disrupt it with rate changes.
Calculations of borrow rates do not align with the intentions of the protocol to reach optimal rate. When the protocol needs to incentivize borrowing activity due to utilization being lesser than the optimal one, the rates are increased which dicentivizes borrowing activity. When the utilization is at the optimal rate, new rate changes are going to result in changes in borrowing activity which will drive the utilization rate away from the optimal one.
When the utilization rate is lesser than the optimal, rates should decrease. When utilization is at the optimal rate, no rate changes should be made.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.