The BaseGauge::_applyBoost function divides by 1e18 instead of the WEIGHT_PRECISION (10000) basis points when applying the boost multiplier, causing user rewards to be reduced to zero. This effectively breaks the reward distribution mechanism for all users.
The _applyBoost function incorrectly divides the boost calculation by 1e18 instead of using the basis point precision (10000):
The boost value returned from `BoostCalculator::calculateBoost` is in basis points (10000 = 1x, 25000 = 2.5x), but dividing by 1e18 reduces any reasonable boosted value to 0.
The BaseGauge::earned function relies on the value returned by this function. As it returns 0, it will lead to complete loss of user earned rewards
POC
User has veToken balance worth the maximum boost
_applyBoost is called with user as account and baseWeight = 5000
BoostCalculator::calculateBoost returns boost = 25000 (2.5x)
Final calculation: (5000 * 25000) / 1e18 = 0
User receives no rewards
To use foundry in the codebase, follow the hardhat guide here: Foundry-Hardhat hybrid integration by Nomic foundation
The incorrect divisor completely breaks the reward distribution mechanism as all users receive 0 rewards. The boost mechanism becomes non-functional and protocol incentives fail to work as intended
Manual review, foundry test suite
Change the divisor to match basis points:
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.