src/NFTDealers.sol:118 — mintNft() declared payable
src/NFTDealers.sol:145 — buy() declared payable
Both mintNft and buy are marked payable despite only handling USDC (an ERC20 token) via transferFrom. The payable keyword is only needed for functions that accept native ETH via msg.value. Since these functions never use msg.value and the protocol operates entirely in USDC, the modifier serves no purpose.
If a user accidentally sends ETH with either call, the ETH is accepted by the contract. There is no withdraw or sweep function for ETH anywhere in the contract — only withdrawFees() which transfers USDC. Any ETH sent is permanently locked.
ETH accidentally sent to mintNft() or buy() is permanently stuck in the contract with no recovery mechanism. Removing payable would cause Solidity to automatically reject any ETH sent, protecting users from mistakes at zero cost.
Remove payable from both functions:
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.