NFTDealers::list() accepts _price as a uint32, the maximum listable price remains below the threshold required to enter the 5% fee tier, making the highest fee bracket unreachable in practice.
The intended behavior is that the protocol should be able to apply all three fee tiers defined by its economic model (1%, 3%, and 5%) depending on the resale price chosen by the user.
The issue is that list() restricts _price to uint32, which caps the maximum possible value at 4,294,967,295, or approximately 4294.967295 USDC with 6 decimals. That cap is below MID_FEE_THRESHOLD = 10_000e6, which is the minimum threshold required for the protocol to apply the 5% fee tier. As a result, the highest fee bracket can never be reached and the fee model is effectively truncated.
Likelihood: High
The issue is deterministic and follows directly from the data type chosen for _price.
No special conditions or rare scenarios are required for it to occur.
Impact: Low
The 5% fee tier can never be applied, leaving part of the protocol’s fee model inoperative.
This also artificially limits the resale price range the market can support.
The following test shows that the maximum value representable by uint32 is still below the minimum threshold required to enter the 5% fee tier.
Change the listing price type to uint256 across the full listing flow so the protocol can support the entire resale range
required to apply all three fee tiers correctly.
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.