RAACMinter
's utilization rate calculation can easily be manipulated to have higher or lower values depending on the exploiter's whish.
The manipulability of this value comes from the fact that it reads directly from state the present values on the pools.
But this values can easily be manipulated to be higher or lower without barely any, or zero cost, to move the emission rate in the desired direction.
The utilization rate, currently is calculated with the following unreliable values:
As it can be seen on the calculateNewEmissionRate()
funciton, if the utilization rate is higher than desired it increases the emission rate, if lower it decreases it.
Any transaction that would honestly update the emission rate can just be front-run with a contract calling in multi-call the RAACMinter::tick()
or RAACMinter::updateEmissionRate()
which are callable by anyone. See here and here.
The multi-call would be structred like so:
Note that there is a delay between emission rate updates, this delay is currently of 1 day. This means that the exploiter could only do this once a day. Yet slowly but surely manipulate the emission rate faking the utilization rate.
The direction of movement of the emission rate can be controlled by anyone. Fortunately there are minimum and maximum emission rate values and time delays between updates, deeming this issue not a high severity one.
Do not compute utilization rate in 1 block. Use an average of the last X blocks or the last X time, so it is harder to manipulate and it truly reflects how the pools are being used.
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.