The protocol implements a tiered fee structure: 1% for prices up to 1,000 USDC, 3% for up to 10,000 USDC, and 5% above 10,000 USDC. USDC uses 6 decimal places, so 10_000 USDC = 10_000e6 = 10_000_000_000.
Listing.price is declared as uint32, whose maximum value is 4,294,967,295 (~4294 USDC with 6 decimals). This is less than MID_FEE_THRESHOLD (10_000e6 = 10_000_000_000), making the HIGH_FEE_BPS (5%) tier permanently unreachable. Furthermore, list() and updatePrice() accept uint32 _price, silently truncating any value above uint32.max passed by the caller. The marketplace cannot support NFT sales above ~4294 USDC.
Likelihood:
This is a constant design flaw present from deployment — it affects every listing on the platform from day one.
Any seller trying to list an NFT for more than ~4294 USDC is silently limited or reverted, depending on how the caller encodes the value.
Impact:
The marketplace cannot support high-value NFT sales above ~4294 USDC, severely limiting the platform's use case.
The 5% fee tier is permanently dead code — the protocol consistently under-collects fees on all sales in the 1000–4294 USDC range (charged 3% instead of up to 5%).
Paste this function inside NFTDealersTest in test/NFTDealersTest.t.sol and run:
forge test --match-test testPoC_Uint32PriceHighFeeTierUnreachable -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.