buySnow() uses an if/else: if msg.value exactly equals the fee, it mints via ETH. Otherwise it falls through to the WETH path regardless of what msg.value was sent. A user sending some ETH that doesn't match the exact fee pays both ETH (now trapped forever) and WETH. Additionally, calling with msg.value = 0 and amount = 0 passes the == check (both 0), mints nothing, but resets the global timer
Likelihood:
Any user who miscalculates the exact ETH amount, or sends ETH while intending the WETH path, will lose their ETH permanently. Common user error scenario.
Impact:
Permanent loss of user ETH with no recovery mechanism. The contract has no receive()/fallback() and no withdrawal function for mistakenly sent ETH (though collectFee() sends address(this).balance).
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.