Value leaves the contract without the finality latch being set, creating a window where the moderator can re-flag against a deflated snapshot. When combined with a CORRUPTED re-flag, this permanently reduces the whitehat's bounty entitlement.
claimsStarted is a one-way latch (I-6) that locks the moderator's re-flag window once any post-resolution value movement occurs. Every claim function sets it. This ensures the moderator cannot re-flag after stakers have relied on the current outcome to claim funds.
sweepUnclaimedBonus is the ONLY value-moving function that does NOT set claimsStarted (line 503-505 comment: "Intentionally does NOT set claimsStarted"). The rationale is to prevent a 1-wei donation from blocking the moderator's re-flag window. However, this means the moderator can re-flag after a sweep. When riskWindowStart == 0, the entire bonus sweeps and totalBonus is decremented — the re-flag then captures deflated state. Totals are conserved (no double-spend), but when combined with a re-flag to CORRUPTED good-faith, the whitehat's bountyEntitlement is permanently reduced (see M-2).
Likelihood:
Impact:
Forge output:
Setting claimsStarted = true in sweepUnclaimedBonus closes the re-flag window whenever value leaves the contract, preventing the moderator from re-snapshotting against a deflated totalBonus. This is the simplest fix but changes the documented design trade-off around 1-wei donation griefing.
Alternatively, document that the moderator must verify no sweep occurred before re-flagging.
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.