The Graduated event is defined but never emitted in the contract. In particular, the graduateAndUpgrade() function, which performs a significant contract upgrade and distributes funds, fails to emit this event, reducing transparency and observability for off-chain systems.
The contract defines an event:
However, this event is never emitted, not even in the critical LevelOne::graduateAndUpgrade() function, which performs a major state transition and contract upgrade.
This is a critical operation that changes the logic contract via UUPS, but it does not emit any event to signal this state transition to external observers.
No functional vulnerability or on-chain risk.
Reduces transparency of major system transitions (like upgrades).
Breaks best practices and limits integration with off-chain tools (e.g. The Graph, indexers, analytics dashboards, or governance tracking systems).
Makes it harder for DApps or users to react to upgrades, increasing operational risk.
Manual code review
Emit the Graduated event after a successful upgrade and before the function completes:
Event not emitted
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.