Unclaimed bonus reserves should approximate the remaining payable bonus liability. For low-decimal or zero-decimal tokens, individual bonus shares can round to zero while sweepUnclaimedBonus() still reserves the entire aggregate unclaimed bonus. A Sybil can leave one tiny principal claim outstanding and keep the bonus unavailable to recovery.
Individual bonus shares floor down:
The sweep path reserves the aggregate bonus that has not been claimed:
For a zero-decimal token with many one-unit stakers, every individual bonus share can round to zero. After all but one Sybil claims, claimedBonus remains zero, so the sweep still reserves the entire snapshotTotalBonus even though the last staker's rounded bonus entitlement is also zero.
The bonus remains unavailable to recovery while one tiny principal claim remains outstanding.
The attacker can keep the bonus hostage indefinitely by never claiming the final one-unit principal.
Reserve the exact remaining rounded bonus liability instead of the aggregate unclaimed bonus.
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.
The contest is complete and the rewards are being distributed.