governance -> boost -> BoostController.sol -> Line 282
The getBoostMultiplier
function is intended to compute a variable multiplier between MIN_BOOST
and MAX_BOOST
. The boost multiplier calculation is flawed—its math forces it to always return the maximum boost value for any nonzero boost, eliminating any intended variability.
Calculation Issue:
The function computes:
Mathematically, for any nonzero userBoost.amount
, this simplifies to always yield MAX_BOOST
(e.g., 25000 basis points).
Design Flaw:
As a consequence, every user with a nonzero boost is granted the maximum boost multiplier, regardless of their actual contribution or intended weight. This undermines the incentive mechanism.
Economic Disruption:
Because every user ends up receiving the highest possible boost, the designed reward structure becomes distorted. This uniformity can lead to some users being over-rewarded, upsetting the balance of incentives within the protocol.
Fairness Issues:
With the boost system no longer differentiating between users, strategic efforts to optimize boost levels become pointless. This lack of differentiation can discourage active, meaningful participation.
Exploitation:
If everyone gets the maximum multiplier regardless of their actual contribution, there's no incentive to adjust boost levels. This renders any strategic behavior irrelevant, ultimately reducing the protocol's overall efficiency.
For example, if userBoost.amount = 15000
and MAX_BOOST = 25000
:
baseAmount = 15000 * 10000 / 25000 = 6000
Multiplier = 15000 * 10000 / 6000 ≈ 25000
(i.e., always MAX_BOOST).
Test Suite:
To verfiy the vulnerability, the following test deploys a duumy gauge (since the BoostController expects a valid gauge contract address) - please be mindful of this when checking this PoC - (had a lot of trouble getting it to work)
To restore the intended variability, I recommend using a linear interpolation based on a target boost level.
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.