The claimFaucetTokens function is intended to enforce a 3-day cooldown period between claims for each user. However, the logic for resetting the dailyClaimCount to zero is flawed. It checks if (block.timestamp > lastFaucetDripDay + 1 days), which can be true even if less than three days have passed since the user's last claim. A user can claim once, wait just over 24 hours, and claim again. During this second claim, the dailyClaimCount is reset to 0, and then their claim increments it to 1. Since the cooldown check if (block.timestamp < (lastClaimTime[faucetClaimer] + CLAIM_COOLDOWN)) is based on lastClaimTime, a third immediate claim will succeed, bypassing the intended 3-day wait.
Likelihood:
This occurs when a user claims tokens for a second time just after the 24-hour daily reset period has passed.
A user then immediately calls claimFaucetTokens for a third time, before the 3-day cooldown from their second claim has elapsed.
Impact:
The core economic assumption of the faucet—a 3-day cooldown—is broken, allowing users to drain the faucet's token supply much faster than intended.
This undermines the fairness of the token distribution, giving an unfair advantage to users who understand and exploit this flaw.
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.