Normal behavior:
First-time claimers receive Sepolia ETH, bounded by a per-day cap tracked by dailyDrips, which resets once per day.
Issue:
When the caller is not eligible for ETH (already claimed) or when ETH drips are paused, the code sets dailyDrips to 0. This lets subsequent first-time claimers restart the day’s counter, bypassing the daily cap and allowing excess ETH distribution.
Likelihood:
Occurs whenever a non-first-time claimer calls claimFaucetTokens() after at least one ETH drip has occurred that day.
Occurs whenever ETH drips are paused and any claimer calls claimFaucetTokens().
Impact:
The daily ETH cap (dailySepEthCap) is effectively bypassed; more ETH than intended can be dispensed in a single day.
Coordinated or scripted calls can repeatedly reset dailyDrips, accelerating ETH depletion from the contract.
Explanation:
The second call by repeater executes the else branch and resets dailyDrips to 0, undoing prior accounting. This makes the system treat the day as if no ETH was dripped, allowing another first-timer to receive ETH beyond the intended daily cap.
Rationale: dailyDrips denotes cumulative ETH dripped for the current day and should only reset when the day changes (already handled via currentDay > lastDripDay). Resetting it for non-first-time claimers or during paused states breaks the cap invariant.
Optional hardening:
Add an invariant test to assert dailyDrips <= dailySepEthCap across all call paths within a day.
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.