claimExpired() is the standard "claim after expiry" entrypoint. Stakers expect to receive principal + bonus.
When called post-expiry with registry=CORRUPTED and riskWindowStart != 0 (after 180-day grace), the function:
Sets outcome = CORRUPTED (bad-faith)
Sets claimsStarted = true (locking outcome)
Returns early WITHOUT paying the caller — even if caller is a staker with eligible stake
The staker's funds are now in corruptedReserve, sweepable only to recoveryAddress via claimCorrupted(). The staker cannot call claimSurvived() (outcome is CORRUPTED) and claimCorrupted() sends to recovery, not to them.
Likelihood:
Auto-CORRUPTED triggers when registry=CORRUPTED, risk window was observed (180-day grace elapsed), and moderator hasn't flagged a different outcome
Stakers naturally call claimExpired() to retrieve funds, unaware it may auto-resolve to CORRUPTED and trap their principal
Impact:
Staker calling claimExpired() loses 100% of principal with no recourse
Funds diverted to recoveryAddress instead of returning to staker
No event emitted to indicate staker funds are now earmarked for recovery
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.