The buySnow function's conditional logic causes users who send partial ETH to have their ETH stuck in the contract while also being charged the full WETH amount.
The buySnow function should clearly separate ETH and WETH payment paths. Users should pay either the exact ETH amount or the WETH amount, but not a combination.
The function checks if msg.value equals the required fee; if not, it attempts a WETH transfer. A user sending partial ETH will have their ETH accepted AND be charged WETH, with the ETH remaining stuck in the contract.
Likelihood:MEDIUM
Reason 1 :Users sending incorrect ETH amounts accidentally will trigger this
Reason 2:UI bugs or user errors in calculating exact amounts cause stuck funds
Impact:MEDIUM
Impact 1:Users pay more than intended (partial ETH + full WETH)
Impact 2: ETH becomes stuck until collector withdraws
This test shows a user accidentally sending half the required ETH. The transaction doesn't revert but instead falls through to the WETH path. The user ends up paying both the partial ETH (which stays in the contract) and the full WETH amount, effectively double-paying.
Separate the function into two distinct functions for ETH and WETH payments. This eliminates ambiguity and ensures users explicitly choose their payment method, preventing accidental double-payments or stuck funds.
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.