The earnSnow() function is intended to reward users with 1 whole Snow token per week. However, it calls _mint(msg.sender, 1), which mints only 1 wei (10⁻¹⁸ of a token) because the contract uses the standard 18-decimal representation.
The buySnow() function correctly uses full precision (e.g., amount * 1e18 or a uint256 already in wei), confirming that the codebase operates in 18-decimal units. The earnSnow() path is inconsistent with this convention, indicating a missing * 1e18 multiplier rather than an intentional design choice.
Likelihood:
Every single call to earnSnow() triggers this code path — there is no conditional or edge case required.
The discrepancy with buySnow()'s use of 1e18 scaling makes the omission clearly unintentional.
Impact:
Users receive 1 wei (≈ $0.00) instead of 1 whole Snow token from the free weekly claim, rendering the earnSnow() incentive economically meaningless.
If the token's value proposition or marketing promises "1 Snow per week free," this is a direct violation of stated user expectations and could constitute a misleading claim.
Calling exploit() demonstrates that earnSnow() credits exactly 1 wei to the caller's balance. The expected reward is 1e18 (one whole token at 18 decimals). The 18-order-of-magnitude gap confirms the missing multiplier.
Adding the 1e18 multiplier aligns earnSnow() with the 18-decimal convention used throughout the rest of the contract (as seen in buySnow()). This ensures users receive 1 whole Snow token as intended.
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.