The GaugeController::_updateGaugeWeight
function incorrectly scales voting power contributions due to mismatched decimal precision. The calculation uses WEIGHT_PRECISION
(1e4) to scale votes while votingPower
comes from an ERC20 token with 18 decimals. This results in gauge weights being inflated by 1e18, distorting reward distribution calculations.
User with 1.0 veRAAC (1e18) votes 100% (10000 basis points) for a gauge
_updateGaugeWeight
calculates:
Gauge weight becomes 1e18 instead of expected 1e4 precision value
Subsequent reward calculations use this inflated weight
Test showing the issue:
High severity - Directly impacts reward distribution math causing:
Overweight gauges to receive disproportionate rewards
Total weight summation becomes astronomically large
Protocol emissions distribution fundamentally broken
Add decimal normalization:
Implement weight ceilings:
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.