Normal behaviour: Outgoing ETH transfers to users (sellers, refunded bidders) should succeed, or there should be a reliable and user-friendly mechanism to recover funds.
Issue: When an external transfer fails, _payout it silently increments failedTransferCredits[recipient]. If recipients are contracts that cannot accept ETH (or forget to withdraw), funds may remain inaccessible indefinitely.
Likelihood:
When recipient is a contract with a reverting fallback or deliberately rejects ETH transfers.
When recipients are unaware or forget to invoke withdrawAllFailedCredits, leaving credits unclaimed.
Impact:
Real ETH belonging to users becomes stuck in the contract or practically inaccessible, leading to financial loss and trust damage.
High-severity because user funds are affected.
Notes about mitigation:
Emitting an event improves discoverability so recipients and monitoring services can react.
Optionally providing a pull-based withdrawal path with clear UI instructions and event logs reduces the chance of funds being forgotten. The require(success) approach prevents silent credits but can block flows — choose based on user experience goals.
placeBid emits AuctionSettled even though the auction hasn’t ended, causing misleading event logs.
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.