The GivingThanks contract lacks withdrawal mechanisms, which can result in ETH being permanently locked in the contract if sent through direct transfers or failed transactions.
The contract:
Has no withdraw function
No fallback/receive functions
No emergency ETH recovery mechanism
Lacks admin functions to rescue stuck funds
ETH can be permanently locked in contract
No way to recover mistakenly sent funds
Admin/owner cannot rescue funds
Potential loss of user funds through failed transactions
Force-sent ETH via selfdestruct remains trapped
Manual code review
Foundry testing framework
Custom test demonstrating stuck ETH:
Add withdraw function with access control:
Add receive function to handle direct transfers:
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.