In the GaugeController, during reward distribution, the _distributeToGauges function does not successfully send tokens to the underlying gauges, preventing users from receiving rewards.
The _distributeToGauges function attempts to distribute rewards by calling IGauge(gauge).notifyRewardAmount(gaugeShare).
However, there is no actual token transfer from GaugeController to the individual gauges.
The notifyRewardAmount function in the IGauge contract checks if amount > periodState.emission but does not receive the tokens, meaning the reward balance remains insufficient.
This results in InsufficientRewardBalance() being reverted, preventing users from claiming rewards.
No Funds in Gauges: The reward tokens are never moved to the gauges, meaning no rewards can be distributed.
Failed Reward Distribution: Users expecting staking rewards will receive nothing due to insufficient balances in the gauges.
Broken Incentive Mechanism: Without proper distribution, the incentive mechanism for staking and governance participation is disrupted.
Manual review
Ensure Token Transfers Before Notification
Before calling notifyRewardAmount, explicitly transfer the reward tokens to each gauge:
This ensures that when notifyRewardAmount is called, the gauge actually has the rewards.
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.