The boostState.minBoost
is set to an excessively high value (1e18
), which leads to an underflow
during boost calculations, causing the calculation to revert. As such, all reward-based functions are rendered unusable.
In the constructor()
of the BaseGauge
contract, the following lines initialize the boost
parameters:
Now, in _applyBoost()
function which applies boost multiplier to base weight, the following exist:
The above called calculateBoost()
function from the BoostCalculator
library performs the following calculation:
This subtraction will yield a negative value, leading to an underflow
error, which will cause the transaction to revert.
Issue Rationale:
The earned()
function is used to update the state.rewards
for a particular user during rewards update.
It invokes getUserWeight()
to get the user's current weight including boost:
Since this function relies on the _applyBoost()
, the whole rewards update will revert.
DoS in reward based functions:
The updateReward()
modifier is responsible for updating rewards for a user before executing some functions. This is used in stake()
, withdraw()
and getReward()
.
As such, since this modifier propagates down to the _applyBoost()
which has the underflow
issue, these functions will always revert during execution preventing users from accessing them.
Manual Review
Update the initialization value for boostState.minBoost
as follows:
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.