The README explicitly defines non-whitelisted users as permitted to: "buy, update price, cancel listing, list NFT, collect USDC after selling". Only minting is reserved for whitelisted wallets.
The list() function applies the onlyWhitelisted modifier, which directly contradicts the specification. Any wallet that holds an NFT but is not whitelisted — whether through receiving a transfer, being removed from the whitelist post-mint, or purchasing via an external marketplace — is permanently blocked from listing their NFT.
File: src/NFTDealers.sol
The root cause is the onlyWhitelisted modifier being applied to list() when the protocol specification explicitly reserves that restriction for mintNft() only. The modifier was either copy-pasted from mintNft() without revision or the intended access control was never updated to match the documented actor permissions.
Likelihood:
Any non-whitelisted wallet that receives an NFT via safeTransferFrom or any external transfer immediately encounters this restriction upon attempting to list.
The owner removes a wallet from the whitelist via removeWhitelistedWallet() after the holder has minted — the holder loses the ability to list while retaining their NFT.
Impact:
Non-whitelisted NFT holders are permanently unable to list their NFTs on the protocol, trapping their assets with no recourse through the intended marketplace flow.
The owner gains unilateral and undisclosed power to freeze any holder's ability to sell by removing them from the whitelist, contradicting the documented actor permissions.
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.