Users are intended to claim faucet tokens every 3 days and SepEth exactly once in their lifetime.
Current implementation enforces a single cooldown for the entire claimFaucetTokens() function.
If a user claims tokens but the SepEth is unavailable (e.g., contract balance too low or daily limit reached), the function still updates the token cooldown.
Likelihood:
The cooldown for tokens is applied globally in the claim function, unintentionally blocking the user from claiming the available SepEth until the cooldown expires. Which will occur every time a user claim and the contract has no SepEth or has reached its limit.
This is prone to keep on repeating if even after the 3 days, the contract has reached limit or has no SepEth.
Impact:
The user cannot claim their one-time SepEth immediately after it becomes available.
They are forced to wait until the token cooldown expires (3 days) before they can claim the SepEth, violating the intended “claim SepEth any time once” behavior.
This can cause loss of user funds or frustration since the one-time SepEth may be missed due to timing.
For this POC, you need to modify the setUp() to set the dailly limit to 0.01 ether just for ease of reaching the daily limit.
Separate SepEth claim logic from token cooldown
Track SepEth claim status independently using a hasClaimedSepEth mapping
Only enforce the 3-day cooldown for token claims, not for SepEth.
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.