ETH sent to the faucet becomes permanently locked because no owner-only withdrawal path exists, creating stranded capital risk.
The faucet contract accepts ETH via receive() and fallback() so it can top up the drip balance and absorb donations.
Without a withdrawal routine, excess ETH (or accidental transfers) cannot be recovered, so pausing the drip or exceeding demand traps value indefinitely.
Likelihood:
Top-ups and donations are part of normal maintenance, so ETH regularly accumulates beyond immediate drip needs.
Operational incidents (pause toggles, parameter mistakes) happen, leaving ETH unused with no manual escape hatch.
Impact:
The project’s treasury or community donors lose access to funds, and a redeploy becomes the only way to recover them.
Locked ETH inflates the apparent faucet liability, skewing accounting and potentially triggering insolvency concerns.
Depositing ETH and then attempting to retrieve it in the PoC highlights that the contract exposes no withdrawal path.
Adding the guarded withdrawal function gives operators a safe way to reclaim unused ETH without jeopardizing daily drips.
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.