collectUsdcFromSelling is a No-Op — Fees Are Not Segregated
collectUsdcFromSelling is intended to separate the fee portion from the seller's proceeds and hold fees within the contract for later withdrawal by the owner.
The function calls usdc.safeTransfer(address(this), fees), which transfers USDC from the contract to itself ,a no-op that wastes gas. Fees are tracked only via the totalFeesCollected counter with no actual token segregation, meaning withdrawFees() depends entirely on the contract having sufficient USDC balance.
Likelihood:
Every call to collectUsdcFromSelling executes the self-transfer — this is not conditional and occurs on 100% of collection calls
Impact:
Gas waste on every collection (unnecessary ERC20 transfer + event emission)
totalFeesCollected can inflate beyond actual available balance (especially combined with NM-001/NM-002), causing withdrawFees() to revert
Creates a false impression of fee segregation — fees share the same pool as user collateral and proceeds
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.