Normal behaviour: The organiser can mint an empty memorabilia collection in “pre-launch” mode by passing activateNow = false
, planning to open it later.
Issue: The struct field isActive
is written once during creation and never exposed to any setter. A collection deployed as inactive can never be activated, so every call to redeemMemorabilia()
reverts forever. This bricks the organiser’s inventory, blocks users from spending BEAT, and leaves project revenue/lore items inaccessible.
Likelihood:
Any organiser who deploys a collection with activateNow = false
immediately hits the bug.
No user interaction is required; the revert is deterministic.
Impact:
Users are permanently unable to redeem memorabilia for that collection.
The PoC deploys a memorabilia collection with activateNow = false
, then
immediately calls redeemMemorabilia()
. Because isActive
is never updatable,
the call reverts deterministically with “Collection not active”, proving that
the organiser has no way to launch the collection after creation.
The diff introduces setCollectionActive(uint256 id, bool active)
gated by
onlyOrganizer
. This single function lets the organiser toggle isActive
post-deployment, unbricking pre-launch collections and allowing future pauses
for maintenance or sold-out status.
Low because an organizer can use it with active = true and organizer is trusted.
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.