the BaseGauge.sol::voteDirection() function incorrectly uses raw veToken balance instead of actual voting power for weighting user votes, undermining the vote-escrow tokenomics for directional voting. Additionally, users whose locks have expired can continue to keep voting on key protocol decisions despite having zero voting power.
In BaseGauge.sol::voteDirection() function determines voting influence using:
The function uses the raw balanceOf() value from the veRAACToken.sol contract instead of getting the proper time-weighted voting power.
Additionally, if a user's lock has expired (therefore they should have 0 voting power), but they do not withdraw their veRaacTokens, they can still vote in the protocol.
Although this is identical to the bug found in GaugeController.sol, This is a separate issue as it affects directional voting rather than gauge weight voting.
High-
Direction voting weights ignore lock duration, breaking vote-escrow incentives
Users with short-term locks have disproportionate influence over directional votes
Users can continue to impact the protocol after their voting power has ended
High - Affects every directional vote cast through BaseGauge implementations.
Use the getVotingPower() function instead:
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.