Description
In claimExpired(), the auto-resolution branch that routes a CORRUPTED registry state to the correct fund-sweep path is gated by a compound condition.
riskWindowStart is set lazily — only the first time a gated entrypoint (stake, withdraw, contributeBonus, or pokeRiskWindow) happens to observe the registry while it is in an active-risk state (UNDER_ATTACK / PROMOTION_REQUESTED). Nothing forces this observation to occur. If the registry transitions NEW_DEPLOYMENT → UNDER_ATTACK → CORRUPTED without anyone calling a gated entrypoint in between, riskWindowStart remains 0 even though the pool is genuinely, terminally corrupted.
Likelihood:
Requires only that no gated entrypoint is called during the registry's time in an active-risk state before it reaches CORRUPTED.
This is plausible by default for low-traffic pools and becomes actively incentivized the moment any staker recognizes the EXPIRED-vs-CORRUPTED payout asymmetry. No sophistication is required — only inaction.
Impact:Likelihood: Requires only that no gated entrypoint is called during the registry's time in an active-risk state before it reaches CORRUPTED. This is plausible by default for low-traffic pools and becomes actively incentivized the moment any staker recognizes the EXPIRED-vs-CORRUPTED payout asymmetry. No sophistication is required — only inaction.
Capital intended for recoveryAddress on a confirmed exploit instead pays out to stakers, undermining the core economic guarantee of the pool — that corrupted agreements sweep funds away from the parties who failed to protect them.
Stop using riskWindowStart == 0 as a gate on whether the CORRUPTED branch executes at all. Route on the terminal registry state alone, and use riskWindowStart == 0 only to decide whether the value needs to be back-filled for downstream bonus-window math:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.