The GaugeController contract calls notifyRewardAmount on gauges but never actually transfers the reward tokens to them first. This causes the gauge's reward distribution to fail due to insufficient balance checks.
In GaugeController.sol, when distributing rewards, the `BaseGauge::notifyRewardAmount` function is called with no actual transfer of the tokens to distribute.
As such, the call to `notifyRewardAmount` would always revert since no tokens are transferred. `notifyRewardAmount` also has no functionality for transferring from the GaugeController, making it very unlikely for the reward distribution to proceed.
Gauges don't actually receive rewards as all reward notifications will revert
Manual review
Add functionality to transfer reward tokens from the to the BaseGauge contract (and indirectly the contracts that inherit it)
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.