Description:
The attendPerformance() function uses a global lastCheckIn mapping that applies a 1-hour cooldown across ALL performances. This creates a systemic vulnerability where users can farm rewards from multiple performances with only a single 1-hour wait, rather than per-performance cooldowns.
Attack Vector:
User attends Performance A → receives 10 BEAT (base) × multiplier
User waits 1 hour (global cooldown)
User attends Performance B → receives 10 BEAT (base) × multiplier
Repeat across all performances
Risk + Impact
With 10 performances: 100+ BEAT per hour
With VIP pass (2x): 200+ BEAT per hour
With BACKSTAGE pass (3x): 300+ BEAT per hour
Root Cause:
lastCheckIn is a global mapping (line 30) rather than per-performance tracking.
Proof of Concept
Recommended Mitigation
Use per-performance cooldown tracking: mapping(uint256 => mapping(address => uint256)) public lastCheckInByPerformance;
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.