Expected behavior:
Each first-time user should receive a small Sepolia ETH drip the first time they claim tokens — while ensuring the faucet remains sustainable for future users.
Actual behavior:
The current logic uses a permanent flag:mapping(address => bool) private hasClaimedEth;
Once hasClaimedEth[user] is set to true, that user never receives ETH again, even if:
1.they’ve waited through multiple 3-day claim cycles,
2.the faucet’s ETH balance has been replenished, or
3the daily ETH drip cap has reset.
This creates permanent exclusion, and may prevent fair distribution if users lose or rotate wallets.
Likelihood
1 High — This will affect all legitimate users over time.
2.Occurs naturally in normal operation.
Impact
1.Reduced usability: Users can never get ETH again even across long test periods.
2.Poor UX for testers: Faucet may become unusable for returning users who need fresh gas.
3.Operational inefficiency: Owners must manually top up or whitelist new addresses to continue testing.
Explanation
The test uses vm.warp(...) to advance time past the 3-day cooldown so that subsequent claimFaucetTokens() calls succeed in terms of token cooldown, but not ETH, which this PoC demonstrates.
The test funds the faucet initially and later calls the owner-only refillSepEth(...) to show that even after replenishing ETH, the user remains ineligible because the hasClaimedEth flag never resets.
Explanation:
This change resets hasClaimedEth eligibility after the claim cooldown or a new faucet day. It prevents permanent exclusion and ensures sustainable, fair gas distribution for testnet users while maintaining protection against spam
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.