The protocol's documented actor model specifies that the onlyWhitelisted restriction applies exclusively to mintNft. All other user-facing actions — buying, listing, updating price, cancelling a listing, and collecting sale proceeds — are explicitly available to non-whitelisted users as well.
The implementation contradicts this specification. list functions carry onlyWhitelisted modifiers (https://github.com/CodeHawks-Contests/2026-03-NFT-dealers/blob/f34038b7b948d0902ef5ae99e9f1a4964bd3cdb5/src/NFTDealers.sol#L127)that the design does not sanction, locking non-whitelisted users out of operations they are entitled to perform. Most critically, a non-whitelisted user who legitimately purchases an NFT via buy() immediately finds themselves unable to re-list, manage, or monetise that asset through any protocol function.
Likelihood:
buy() is open to all users, so any non-whitelisted address that purchases an NFT will immediately encounter this inconsistency upon attempting any follow-on action. This is a normal, expected usage path, not an edge case.
No malicious intent is required — any regular user who buys before being whitelisted triggers the issue.
Impact:
A non-whitelisted buyer pays full market price for an NFT they cannot re-list, reprice, or collect proceeds from. The asset is economically stranded within the protocol.
The protocol violates its own documented specification, creating a trust and correctness gap that affects any integration or audit relying on the actor model documentation.
If a seller's whitelist status is revoked after listing but before calling collectUsdcFromSelling, their proceeds are permanently locked despite the sale having already occurred legitimately.
Add this to 2026-03-NFT-dealers/test/NFTDealersTest.t.sol,run forge test --match-test testPoC_M04_NonWhitelistedCannotListAfterBuying -vvvv
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.