On a SURVIVED outcome, stakers are meant to receive their principal plus a share of the sponsor's bonus — the premium for having locked capital through the risk period.
Bonus entitlement is gated on riskWindowStart != 0, which is set only if the pool observes the registry in an active-risk state on-chain during the window — not by the risk actually occurring. If a real UNDER_ATTACK interval elapses with no pool interaction, riskWindowStart stays 0, _bonusShare returns 0 for every staker, and sweepUnclaimedBonus sends the whole bonus to the sponsor's recoveryAddress — even though stakers' capital was locked and un-exitable throughout the real risk.
Likelihood: Low — occurs when an UNDER_ATTACK interval elapses with no staker or watcher calling pokeRiskWindow() (or any observing entrypoint); no attacker can force it, and any single costless poke prevents it.
Impact: Low — stakers who bore real, locked risk get zero premium; the bonus is misallocated to the sponsor (recoveryAddress). Value is conserved and principal is safe, but the premium is permanently forfeited.
On unmodified contracts (project fixture, standard ERC20, registry driven via its normal setter), Alice stakes and a bonus is funded; the registry enters UNDER_ATTACK (her withdraw() reverts — capital locked) with no interaction; it survives to PRODUCTION and is flagged SURVIVED with riskWindowStart still 0. Alice then receives principal only, and the full bonus is swept to the sponsor. (A contrast run with a single pokeRiskWindow() during the window instead pays Alice the bonus.)
When riskWindowStart == 0 at resolution but stakers exist, distribute the bonus amount-weighted among them instead of returning 0 (and remove the matching sweep-to-sponsor path). Preferably, seal riskWindowStart from a registry-provided active-risk timestamp so entitlement never depends on live observation.
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.