Normal behavior: The faucet should allow a user to claim tokens as long as the contract holds at least one full drip amount (faucetDrip). When the contract balance is exactly equal to faucetDrip, the last claimant should be able to withdraw that amount and reduce the contract balance to zero.
Specific issue: The contract currently reverts when the contract balance is equal to faucetDrip because it uses <= instead of < in the balance check. As a result, the final valid claim is blocked and a full drip worth of tokens can become permanently stuck in the faucet.
Likelihood:
The condition occurs whenever the faucet balance reaches the exact drip amount after prior claims or administrative burns/mints, which is a normal terminal state as tokens are consumed.
Routine operations (multiple users claiming over time) will eventually leave the faucet with exactly one drip amount remaining; when that happens, claims become impossible until the owner tops up the contract.
Impact:
The last full drip becomes unrecoverable by normal claimers, effectively locking tokens in the contract until the owner intervenes.
Loss of expected user experience and trust: the faucet will appear to hold tokens but refuse to dispense the final drip, potentially causing confusion and administrative overhead.
Explanation: This PoC simulates the faucet being reduced to exactly one faucetDrip unit. The test shows that calling claimFaucetTokens() reverts with InsufficientContractBalance, preventing the rightful final claim. The expected correct behavior is a successful claim that reduces the faucet balance to zero.
Change the comparison to require the contract hold strictly less than the drip amount to revert — allowing claims when the contract balance is exactly equal to faucetDrip.
Short explanation: Using < lets the last valid claim succeed when the contract balance equals the drip amount, preventing tokens from being stuck.
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.