The GaugeController::vote
function permits users to allocate 100% voting weight to multiple gauges simultaneously. This occurs because the contract tracks individual gauge votes without validating the cumulative weight across all gauges a user has voted for. As a result, the getTotalWeight
calculation becomes inflated, distorting reward distributions.
User with 1000 veRAAC votes for Gauge A with 100% weight (10000 basis points)
Same user votes for Gauge B with 100% weight (10000 basis points)
Both gauges receive full 1000 weight contribution from the user
Total system weight becomes 2000 instead of correct 1000
Relevant code snippet:
Test case demonstrating the issue:
High Severity - Enables vote weight inflation through existing gauges, diluting legitimate rewards. While gauge creation requires admin privileges, any multi-gauge environment allows users to distort reward calculations proportionally to the number of available gauges. With just 2 active gauges:
Track cumulative user votes:
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.