The protocol defines two distinct phases: a preparation phase (pre-reveal) where only whitelisting is allowed, and a revealed phase where minting, listing, and trading become active.
list() is missing the onlyWhenRevealed modifier, allowing whitelisted users to create listings during the preparation phase. This violates the protocol's stated phase separation and allows the secondary market to be active before the collection is officially revealed.
Likelihood:
Any whitelisted user who holds an NFT (e.g. received via transfer before reveal) can call list() during the preparation phase.
The missing modifier is not blocked by any other guard in the function.
Impact:
The secondary market can be active before the collection is revealed, breaking the protocol's intended phase separation.
Early listings may front-run the reveal, giving certain users an unfair advantage over others.
Owner deploys the contract and whitelists Alice. Collection is not yet revealed.
Alice receives an NFT via transfer during the preparation phase.
Alice calls list() — no revert. The listing is created and active before reveal.
Other users cannot mint yet (onlyWhenRevealed blocks them), but Alice's listing is already live on the secondary market.
Add onlyWhenRevealed to list() to match the behavior of mintNft() and enforce the protocol's phase separation.
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.
The contest is complete and the rewards are being distributed.