The protocol spec clearly states that non-whitelisted users should be able to "buy, update price, cancel listing, list NFT, collect USDC after selling." Only minting is meant to be whitelist-restricted.
But list() has the onlyWhitelisted modifier. Since buy() has no whitelist check (correctly), anyone can purchase an NFT. The problem: after buying, a non-whitelisted user is stuck. They own the NFT but can't put it back on the marketplace.
Likelihood: This hits every non-whitelisted buyer. The protocol is designed for open secondary trading, so this is a common scenario.
Impact: Secondary buyers' investments are locked. They can't resell through the marketplace, killing liquidity and contradicting what the protocol promises.
Alice (whitelisted) mints and lists NFT #1 at 100 USDC.
Bob (not whitelisted) buys it — buy() works fine, Bob now owns the NFT.
Bob wants to resell at 150 USDC. Calls list(1, 150e6).
Reverts: "Only whitelisted users can call this function."
Bob is stuck with an NFT he can't sell on the marketplace.
Remove onlyWhitelisted from list(). The ownerOf check already ensures only the NFT owner can list — no extra access control needed.
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.