When a user calls claimFaucetTokens()
, the faucet should allow a transfer as long as its token balance is at least one full drip (faucetDrip
). If the balance is exactly equal to faucetDrip
, the claim should succeed and empty the faucet.
The contract checks balanceOf(address(this)) <= faucetDrip
and reverts in that case. This off‑by‑one condition blocks claims when the faucet balance is exactly faucetDrip
, permanently stranding one full drip in the contract and causing an unexpected “insufficient balance” revert for users.
Likelihood: Low
In normal operation, repeated claims reduce the faucet’s balance in steps of faucetDrip
, so it regularly reaches exactly faucetDrip
.
At that point, the next claimant will always hit this condition and revert, even though a full drip is available.
Impact: Low
Last‑drip lock: One full drip becomes permanently undistributable (“dust lock” at one‑drip granularity).
User experience degradation: Eligible claimers receive an unexpected InsufficientContractBalance
revert and the operator may need manual intervention (e.g., mint/burn/top‑up) to continue distribution.
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.