Normal Behavior: When a seller collects their funds, the protocol should calculate the fee, update the totalFeesCollected accumulator, and send the remaining balance to the seller. The fees should simply remain in the contract's balance until the owner withdraws them.
Specific Issue: The contract explicitly calls usdc.safeTransfer(address(this), fees). Since the USDC is already held by the NFTDealers contract (deposited by the buyer during the buy function), transferring it to itself is redundant.
Likelihood: High
Reason 1: This line is reached in every successful execution of the collection logic.
Impact: Low (Gas)
Impact 1: Wasted Gas. Each call to safeTransfer triggers an external call to the USDC contract, which performs balance checks, updates mapping slots, and emits a Transfer event. This costs approximately 5,000–10,000 gas per call.
Impact 2: Log Noise. It emits unnecessary Transfer events from NFTDealers to NFTDealers, cluttering off-chain indexers.
Remove the self-transfer line entirely. The accounting is already handled by the totalFeesCollected += fees; statement.
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.