After a SURVIVED or EXPIRED resolution, unclaimed value is recovered through sweepUnclaimedBonus, which
is designed to move only excess funds (donations, dust) to recoveryAddress while protecting every
staker's entitlement.
To protect entitlements it reserves, for every not-yet-claimed staker, their full principal plus their
owed bonus, and only sweeps the balance above that reserve. The side effect is that a staker who never
claims keeps their principal + bonus locked inside the pool with no upper time bound: claimSurvived
/ claimExpired have no deadline, and — unlike the CORRUPTED path, which bounds recovery at 180 days via
sweepUnclaimedCorrupted — there is no forced distribution or time-bounded sweep of staker-reserved
funds. The reserved value can therefore sit in the contract permanently if the staker abandons the
position.
Contrast with the CORRUPTED path, which does bound the wait:
Likelihood:
Occurs whenever a staker in a resolved SURVIVED/EXPIRED pool never calls claimSurvived /
claimExpired — a lost key, an abandoned position, or a wound-down participant.
Occurs for the full life of the deployed clone: the clone is non-upgradeable and has no admin path to
release a stuck reserve, so the funds stay locked from every other actor's perspective permanently.
Impact:
The abandoned staker's principal + bonus are held in the pool indefinitely; no other actor
(sponsor, moderator, recovery) can ever move them, and there is no cleanup path for the clone.
No loss to other participants and no loss to the abandoning staker themselves (they can still claim at
any future time) — the effect is value permanently at rest plus an inconsistency with the CORRUPTED
path's bounded recovery, which is why this is Low rather than a fund-loss issue.
test/audit/LowFindingsPoC.t.sol::testL03_nonClaimerReserveHeldIndefinitely (passes). Alice claims, Bob
never does; even 10 years later sweepUnclaimedBonus reverts NothingToSweep because Bob's principal +
bonus stay fully reserved, yet Bob can still claim them at any time:
Run:
Give SURVIVED/EXPIRED reserves the same bounded recovery the CORRUPTED path already has: after a long
abandonment window measured from resolution, let anyone sweep still-unclaimed staker reserves to
recoveryAddress (or document explicitly that these reserves are intentionally held forever).
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.