The GaugeController's voting mechanism miscalculates user voting power by using static token balances instead of time-decayed voting power, enabling users to retain full voting weight indefinitely regardless of lock duration.
When a user wants to make changes to a specific guage's weight, they call the following function:
The veRAACToken
contract implements time-decayed voting power through getVotingPower()
, but the GaugeController incorrectly uses the static balanceOf()
method. This returns the raw token amount without accounting for voting power decay over the lock duration.
This violates the protocol's core governance mechanism where voting power should diminish as locks approach expiration.
Users can maintain maximum voting power longer than what the protocol intends. The protocols intends for the votes to decay over the duration of the lock.
Manual review
Replace balanceOf with proper voting power calculation:
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.