These contracts (BaseGauge
, GaugeController
) use veToken.balanceOf()
instead of getVotingPower()
. This ignores lock expiration decay, leading to incorrect boost and voting power calculations.
The use of balanceOf()
instead of getVotingPower()
creates significant calculation discrepancies in the protocol.
In BaseGauge.sol#_applyBoost
In GaugeController.sol#vote
Economic Impact:
Boost calculations provide wrong multipliers
Reward distributions become inequitable
Incentive mechanisms fail to reward lock duration
Protocol revenue sharing becomes imbalanced
Users have no incentive to lock longer
Manual
Replace the instances of balanceOf
with getVotingPower(account, block.timestamp)
to reflect actual 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.