The earnSnow() function is designed to allow users to earn 1 Snow token per week, creating a fair distribution mechanism where each user can claim tokens on their own weekly schedule.
The function uses a single global timer (s_earnTimer) shared across all users instead of individual per-user timers, which severely restricts token distribution by allowing only one user globally to earn tokens each week.
Likelihood:
Every user attempting to earn tokens after the first user each week will be blocked by the global timer - so very likely.
The vulnerability occurs automatically from the first earnSnow() call and affects all subsequent users until the next weekly cycle - again high liklihood this happens.
Impact:
Token distribution is reduced by approximately 99% compared to intended design (from N users × 52 weeks to just 52 tokens per year total) - almost grinds the contract to a halt and will severely limit involvement (against the spirit of the contract)
Creates an unfair competitive environment where only the fastest user each week can earn tokens while all others are permanently blocked
Breaks the fundamental tokenomics of the protocol by severely limiting token supply and user participation
Demonstrates that with 3 users over 3 weeks, only 3 tokens are distributed instead of the expected 9 tokens
Shows how the global timer prevents multiple users from earning in the same week
Proves that users cannot earn on their individual schedules as intended
Replace the global timer with individual per-user timers using a mapping
Allow each user to track their own earning schedule independently
Maintain the 1-week cooldown per user while enabling concurrent earning across different users
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.