Root + Impact
The Snow contract's weekly free-claim function earnSnow() is supposed to mint one full Snow token (10¹⁸ wei) to the caller every week. Instead it mints the bare integer 1, which is a single wei — a billion billion times smaller than intended. Every user who calls earnSnow() gets essentially nothing, breaking the entire free-Snow feature of the protocol.
The @> line mints exactly 1 wei. The constructor and buySnow() both work with values scaled to 10 ** 18 (see s_buyFee = _buyFee * PRECISION), so a user who buys 1 Snow token receives 10 ** 18 wei but a user who claims free receives only 1 wei — a 10¹⁸ discrepancy.
Likelihood: High — every earnSnow() call triggers it; no special conditions needed.
Impact: High — the free weekly Snow feature is the protocol's core acquisition loop; it is rendered useless.
The PoC deploys a fresh Snow contract, calls earnSnow() once, and shows the balance is 1 wei. The final assertion against 10 ** 18 reverts, proving the bug.
Replace the bare 1 with 10 ** 18 (one full token). This matches the scale used everywhere else in the contract (s_buyFee = _buyFee * PRECISION, PRECISION = 10 ** 18). No other code needs to change — buySnow() already mints amount in token units, so earnSnow() minting 10 ** 18 wei is consistent.
.
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.