The SNX rewards are earned each period based on reward and duration as specified in the notifyRewardAmount()
function.
The contract will output more rewards than it receives.
Therefore if all stakers call getReward()
the contract will not have enough SNX balance to transfer out all the rewards and some stakers may not receive any rewards.
We recommend enforcing each period start exactly at the end of the previous period.
- Sigma Prime Unipool Finding 4
- Timing/DoS
- Medium Severity
- Stakers -> getReward()
- SNX Deficit -> No Rewards
- No Gap Between Periods
- Youtube Reference
- Medium Risk severity finding from Sigma Prime's Audit of Synthetix Unipool