BaseGauge.sol incorrectly uses the veToken balance of the users as their voting power when voting on direction.
In BaseGauge.sol, there is a function called voteDirection that allows veToken holders to vote on direction:
The issue here is that this function uses the veToken balance of the user as the voting power rather than the actual voting power. In VE tokens, voting power and user balance are 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 voteDirection 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 voteDirection 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.