Low-1: MESSAGE_TYPEHASH's inline comment says it's "used for EIP-712 compliant message signing," and getMessageHash is public specifically to support that. The type string doesn't match the EIP-712 spec for the real struct, so standards-compliant signing tools derive a different digest than this contract expects.
Low-2: buySnow is a designed dual-payment function (ETH or WETH). The else branch never checks msg.value == 0 before pulling the full WETH fee, so a nonzero-but-wrong msg.value gets silently charged on top, with no refund.
Likelihood:
Low-1 only manifests once a spec-compliant EIP-712 client is used against the contract — not exploitable in isolation today.
Low-2 requires a specific caller mistake (stale wallet value, miscalculated front-end), not ordinary correct usage.
Impact:
Low-1: no funds at risk; the contract stays usable via its own self-referential getMessageHash, but silently rejects any standards-compliant signature and contradicts its own "EIP-712 compliant" comment.
Low-2: no protocol funds at risk and not exploitable against a third party — the stray ETH stays in the contract (later swept by the collector) but the payer has no way to recover their own overpayment.
The two hashes differ, so any client deriving the typehash from the real struct (not this contract's own getter) produces a signature _isValidSignature rejects. Low-2 is a direct read of the else branch above — no msg.value == 0 guard precedes the WETH pull, confirmed by manual trace of buySnow's branch logic (also exercised incidentally by the separately-submitted global-earn-timer PoC, which calls buySnow(0) and observes it execute with msg.value == 0 and no revert).
Low-1: fix the type string to exactly match the struct's spec-correct encodeType:
Low-2: reject any stray msg.value before pulling the WETH fee, instead of silently accepting both:
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.