The claimFaucetTokens() function uses an incorrect comparison operator (<= instead of <) when checking if the contract has sufficient tokens. This prevents the last faucetDrip amount of tokens from ever being claimed, effectively locking those tokens in the contract permanently.
Users should be able to claim tokens as long as the contract balance is greater than or equal to faucetDrip. The last user should be able to claim when balanceOf(address(this)) == faucetDrip.
The function reverts when balanceOf(address(this)) == faucetDrip, preventing the last claim even though there are exactly enough tokens available. This leaves faucetDrip amount of tokens permanently locked in the contract.
The balance check on line 175 uses the wrong comparison operator:
Problem Analysis:
If contract has 1000 tokens and faucetDrip = 1000 tokens
Condition: 1000 <= 1000 evaluates to true
Function reverts even though there are exactly enough tokens for one more claim
The 1000 tokens become permanently locked
Medium impact because:
Permanent token lock: The last faucetDrip amount of tokens can never be claimed
Wasted resources: Tokens that should be distributed remain locked
Unfair to users: One user is denied their rightful claim
Reduced utility: The faucet cannot fully distribute its token supply
Owner intervention required: Owner must mint new tokens or users lose access
High likelihood because:
Happens every time the contract balance reaches exactly faucetDrip
Inevitable in normal operation as tokens are claimed
No workaround available for users
Affects every deployment of this contract
Change the comparison operator from <= to <:
The fix ensures that:
Complete distribution: All tokens can be claimed, including the last faucetDrip amount
Correct logic: Reverts only when balance is truly insufficient (< faucetDrip)
No locked tokens: No tokens remain permanently locked in the contract
Fair access: The last eligible user can successfully claim their tokens
Proper validation: Still prevents claims when there aren't enough tokens available
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.