The distribution of rewards to the gauges works by calling the GaugeController to allocate rewards to all gauges that have weight. Although this process is simple and straightforward, it presents a problem because the execution flow does not transfer any funds.
First, the GaugeController initiates distributeRewards, which calculates the rewards for each gauge based on its weight.
Whenever it calls notifyRewardAmount, the function checks the balance as if funds have already been transferred to the contract. However, since the contract is empty, the condition fails, causing a continuous revert and leading to a Denial of Service (DoS).
No rewards are distributed to gauges.
Core functionality is broken.
Manual review
Ensure that funds are transferred to the gauges before calling notifyRewardAmount.
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.