The vote
function in GaugeController
allows users to allocate their voting power to a gauge. However, the function does not reduce a user’s available voting power after they have voted. This allows users to vote with their full voting power on multiple gauges simultaneously, effectively duplicating their influence and manipulating the reward distribution.
When a user votes, their voting power (veRAACToken.balanceOf(msg.sender)) is checked. However, this balance is not deducted or locked when voting, meaning the user can vote for multiple gauges with their full voting power each time. This allows a single voter to:
Vote with WEIGHT_PRECISION
on multiple gauges.
Influence multiple liquidity pools far beyond their actual veRAAC holdings.
Manipulate gauge rewards, directing an unfair amount of incentives toward certain pools.
Gauge rewards can be manipulated, allowing a malicious actor to redirect emissions unfairly.
Manual
Introduce a mechanism to track used voting power per user and ensure they cannot exceed their total balance.
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.