sweepUnclaimedBonus intentionally skips claimsStarted to keep the moderator's re-flag window
open. When riskWindowStart == 0 it also decrements totalBonus to zero. On a subsequent
re-flag to good-faith CORRUPTED, flagOutcome re-snapshots snapshotTotalBonus = totalBonus,
reading zero. bountyEntitlement becomes snapshotTotalStaked + 0 instead of
snapshotTotalStaked + B, permanently stranding bonus B at recoveryAddress and contradicting
DESIGN.md §12's guarantee that the entire pool is the attacker's bounty.
Likelihood:
riskWindowStart stays zero if no pool interaction occurred during UNDER_ATTACK; pokeRiskWindow cannot retroactively seal it because _isActiveRiskState(CORRUPTED) is false.
Moderator incorrectly flagging SURVIVED on a CORRUPTED registry is the exact mistake DESIGN.md §4 acknowledges the re-flag window exists to correct.
sweepUnclaimedBonus is permissionless; the sponsor controls recoveryAddress and receives B directly, giving them financial incentive to call it the moment the wrong flag lands.
Impact:
The named whitehat receives only snapshotTotalStaked instead of the full snapshotTotalStaked + snapshotTotalBonus. Bonus B is permanently transferred to the sponsor's recoveryAddress with no recovery path.
Alice and Bob stake 150 total; Carol contributes 40 bonus. Registry reaches CORRUPTED with
riskWindowStart == 0. Moderator flags SURVIVED; sponsor sweeps the 40-token bonus to
recoveryAddress, zeroing totalBonus. Moderator corrects to good-faith CORRUPTED but the
re-snapshot reads totalBonus = 0, so bountyEntitlement is 150 instead of 190. Attacker
receives 150; sponsor keeps 40.
On a re-flag, keep the existing snapshotTotalBonus instead of re-reading totalBonus.
Stakes and sums can legitimately change between flags, but totalBonus can only be depleted
by a sweep that bypasses claimsStarted, so it must not be re-read on correction.
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.