Normal behavior: when the moderator flags a good-faith CORRUPTED outcome, the named attacker receives an exclusive CORRUPTED_CLAIM_WINDOW of 180 days to claim the full pool bounty. After this window, anyone can sweep the unclaimed corrupted funds to recoveryAddress.
Normal behavior: the contract stores several timestamps as uint32, and pool expiry is bounded by type(uint32).max.
Specific issue: flagOutcome() computes corruptedClaimDeadline as uint32(_firstGoodFaithCorruptedAt + CORRUPTED_CLAIM_WINDOW). When the first good-faith corrupted flag occurs within 180 days of type(uint32).max, this addition exceeds the uint32 range and truncates into the past.
Specific issue: once the deadline wraps into the past, claimAttackerBounty() immediately reverts with ClaimWindowExpired, while sweepUnclaimedCorrupted() immediately becomes callable. This contradicts the documented 180-day exclusive bounty window.
Likelihood:
A pool remains valid near the uint32 timestamp ceiling, which the contract otherwise supports by allowing expiry <= type(uint32).max.
The moderator flags a good-faith CORRUPTED outcome within 180 days of type(uint32).max.
The named attacker tries to claim after the wrapped deadline has already been stored in the past.
Impact:
The named good-faith attacker loses the documented 180-day exclusive bounty window.
The pool can be swept to recoveryAddress immediately instead of remaining reserved for the attacker.
The code behavior diverges from docs/DESIGN.md, which states that the pool is reserved for the named whitehat for CORRUPTED_CLAIM_WINDOW.
Or reject good-faith corrupted flags that cannot preserve the full claim window:
Using uint64 or uint256 for corrupted claim timestamps is preferable because it preserves the full documented claim window without adding boundary-case policy logic.
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.