The protocol's design gives players "90 days to claim before the manager takes a cut." That deadline is never enforced in claimCut():
claimCut() has no time check and no closed-state check, and closePot() never zeroes a player's playersToRewards entry. So a player who missed the 90-day window can still call claimCut() after closePot() has run and settled the distribution. This contradicts the spec and corrupts the post-close accounting: the close already computed manager and claimant cuts assuming the final state, then a late claimer pulls their original reward out of the remaining balance, taking funds the close earmarked for the manager / in-time claimants.
Likelihood: Medium - any registered player who did not claim before close can do this; it requires no special privilege, only that the Pot still holds enough balance.
Impact: Medium - breaks the settled distribution and lets late claimers extract funds that should have been forfeited, at the expense of the manager cut and in-time claimants (and can revert/DoS other late claims once the balance is drained).
No one claims in time; the owner closes the Pot; player1 then still claims 500 after the close. Runnable Foundry test (drop into test/TestMyCut.t.sol):
Run forge test --mt test_PoC_claimAfterCloseNoDeadline -vv; it passes, proving a claim succeeds after the Pot is closed.
Enforce the claim window in claimCut() and block claims once the Pot is closed:
Additionally finalize the Pot on close (set a closed flag / zero remainingRewards) so no claims are possible afterward.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.