lastFaucetDripDay defaults to zero so the first claim always triggers a daily reset, producing inconsistent rate-limit behavior post deployment.
The faucet expects lastFaucetDripDay to track the most recent day boundary so daily claim caps only reset when a full day passes.
Because the variable is never initialized, its zero value causes block.timestamp > lastFaucetDripDay + 1 days to evaluate true immediately after deployment, leading to unexpected resets and skewed counters during the first 24 hours.
Likelihood:
The constructor never sets lastFaucetDripDay, so the very first call to claimFaucetTokens after deployment inevitably hits the reset branch.
Any redeployments or forks repeat the pattern, meaning most production launches will encounter the inconsistency.
Impact:
Day-one analytics are wrong: counters reset midstream, making rate limiting dependent on launch timing rather than true 24-hour windows.
Attackers can schedule claims immediately after deployment to force resets and potentially combine with other timing bugs to exceed caps.
By claiming immediately after deployment the PoC proves the reset block triggers because lastFaucetDripDay starts at zero.
Initializing lastFaucetDripDay in the constructor aligns the first-day behavior with subsequent days and stabilizes rate limits.
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.