The GaugeController contract fails to implement the documented vote delay mechanism, allowing users to vote multiple times without any time restriction between votes. This contradicts the documentation which states "Minimum vote delay for manipulation prevention" is used.
The GaugeController's documentation explicitly states that a vote delay is used for manipulation prevention. However, the vote()
function reveals no implementation of this delay mechanism, despite having defined constants VOTE_DELAY
, MIN_VOTE_DELAY
, and MAX_VOTE_DELAY
.
This means users can vote multiple times in rapid succession or even within the same transaction, which breaks the intended security mechanism.
The absence of vote delay enables:
Vote manipulation through rapid successive votes
Unfair distribution of rewards through quick weight shifts between gauges
Undermining of the entire voting mechanism's integrity
This represents a HIGH severity issue as it:
Breaks a core security mechanism
Enables direct economic manipulation
Affects the main protocol functionality (reward distribution)
Could result in significant financial losses
Manual review
Add the following test case to the test/unit/core/governance/gauges/GaugeController.test.js
file:
Implement the vote delay check in the vote function:
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.