transfer
in withdraw() — Potential Stuck EtherNormal behaviour: withdraw()
should reliably forward the contract’s ETH balance to the given target
address.
Issue: The implementation uses Solidity’s transfer
, which forwards only 2 300 gas. If target
is a smart-contract wallet (e.g. Gnosis Safe) or any contract with a non-trivial fallback, the call will revert, locking funds in the FestivalPass
contract.
Likelihood:
Project treasury may eventually migrate to a multisig that requires >2 300 gas for its fallback.
Many modern wallet contracts already exceed the stipend, so the issue surfaces in routine use.
Impact:
ETH accumulated from pass sales can become permanently stuck until a code upgrade.
Creates an operational DoS and reputational damage if withdrawals fail at a critical moment.
Additionally, emit the FundsWithdrawn
event to keep on-chain accounting transparent.
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.