Expected Behavior:
The burnFaucetTokens() function should allow the owner to burn only a specific amount of tokens that belong to the faucet’s internal reserves, while leaving enough supply to serve faucet users.
Actual Behavior:
The function currently transfers the entire faucet balance to the owner before burning the requested amount.
This means that if the owner passes a smaller _amountToBurn, the remaining tokens stay in the owner’s wallet — effectively removing them from the faucet’s circulation permanently.
Root Cause:
The entire contract’s balance is transferred to the owner before burning a portion.
This breaks the faucet’s token supply integrity, since any unburned tokens stay with the owner instead of returning to the faucet.
Likelihood
High: This function is owner-only but highly likely to occur, since it is part of maintenance and may be misused during manual burning or rebalancing.
Impact
1.Faucet becomes depleted of tokens, making further user claims impossible.
2.The owner unintentionally holds excess unburned tokens.
3.Creates a centralization risk where faucet funds depend on the owner returning tokens manually.
Explanation:
The faucet ends up with zero tokens even though only 10 ether was burned proving the entire supply is transferred first, leaving the faucet empty.
Explanation
Removes the redundant _transfer call that empties the faucet.
Burns directly from the contract’s own balance, preserving remaining supply for future claims.
Adds an event to improve visibility of burned amounts.
Prevents accidental depletion or misallocation of faucet reserves.
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.