GaugeController.sol incorrectly uses the veToken balance of the users as their voting power.
In GaugeController.sol, there is a function called vote that allows VE holders to vote on gauges:
The issue here is that this function uses the veToken balance of the user as the voting power. In VE tokens, voting power and user balance are related but distinct concepts, as voting power is also influenced by the passage of time.
Currently, if a user's lock period has ended, they can still vote.
They can call vote and vote based on their balance as voting power, withdraw their RAAC tokens from veRAAC, transfer those RAAC tokens to another account, lock them again with the new address, call vote again, and essentially vote twice.
This happens because the lock period doesn't affect voting power, as it's based solely on the balance.
Users can double vote.
Manual Review
Use getVotingPower to get the users voting power:
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.