Stakers who keep their deposit through the agreement's attack phase are meant to earn a share of the k=2 time-weighted bonus, and are withdraw-locked for the entire active-risk window (UNDER_ATTACK / PROMOTION_REQUESTED) precisely because that is when they are bearing the risk the bonus rewards.
The bonus, however, is only ever paid when riskWindowStart has been sealed, and riskWindowStart is sealed only by an on-chain pool interaction that observes an active-risk registry state. A terminal-state observation can never seal it retroactively, and there is no incentivized actor that guarantees the seal. If the active-risk window elapses with no stake / claim / pokeRiskWindow call, riskWindowStart stays 0, _bonusShare pays every staker zero, and sweepUnclaimedBonus routes the entire bonus to the sponsor-controlled recoveryAddress — even though the stakers were locked in and bore the full risk.
Likelihood:
Occurs whenever the agreement transits its active-risk window with no pool interaction sealing riskWindowStart — a DAO instantPromote moves UNDER_ATTACK → PRODUCTION with no minimum dwell, and there is no on-chain reward for anyone to spend gas on pokeRiskWindow.
Occurs on the sponsor's behalf: the sponsor funds the bonus and receives it back via recoveryAddress when the seal is missed, so the party that profits has an incentive to keep the active-risk window short and unobserved (moral hazard), while stakers must actively self-defend a payout they already earned.
Impact:
Stakers who were withdraw-locked through the attack window and survived to PRODUCTION receive 0% of the bonus they earned.
100% of the bonus pool is transferred to the sponsor's recoveryAddress, converting stakers' risk premium into a sponsor windfall with no privileged action required.
test/poc/ConfidencePoolPoC.t.sol — both tests pass against the contest repo. The two differ by a single pokeRiskWindow() call, proving the payout depends on an unguaranteed action, not on whether risk occurred.
Seal the risk window from the signal that proves risk occurred, not only from a live active-risk read. Since withdraw is already disabled from UNDER_ATTACK onward, drive the bonus-eligibility seal off the same transition so any locked staker is guaranteed eligibility:
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.