Normal Behavior
Each user should be able to earn 1 SNOW per week using earnSnow().
The cooldown should be enforced per user, so one user’s action does not affect others.
Issue
The contract uses a single global timer (s_earnTimer) to enforce the weekly cooldown for all users.
This allows any address to mint SNOW repeatedly every week without per-user restriction, and also enables griefing by resetting the timer.
Because s_earnTimer is shared globally:
It does not track per-user cooldown
Any user can mint SNOW once per week forever
Supply inflation is unbounded during the farming period
Likelihood:
Reason 1: earnSnow() is permissionless and callable by anyone
Reason 2: Cooldown enforcement is global, not per user
Reason 3: No cap on how many unique addresses can call earnSnow()
Impact:
Impact 1: Unlimited SNOW can be minted by sybil addresses
Impact 2: Token supply inflation breaks protocol economics
Impact 3: Since SNOW is staked for Snowman NFTs, this leads to NFT inflation
Because the cooldown is global, each address can mint once per week without restriction.
This behavior continues until FARMING_DURATION ends.
Track cooldown per user, not globally.
This ensures:
Each user has an independent cooldown
SNOW minting is rate-limited as intended
Tokenomics remain predictable
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.