The protocol is exchanging NFTs with ERC20 USDC tokens and not with the native blockchain tokens.
With buy() function being payable, this function accepts msg.value. There could be innocent users that transfer token value to this function and the amount is lost forever.
Likelihood:
A user calls buy() or mintNft() with msg.value set. In that case, both his value and USDC balance will be deducted and transfer to the protocol smart contract.
Impact:
Incorrect behavior and innocent buyers could forever lose the native token balance they transfer when making buy() call.
There is also no withdraw() function in the smart contract to withdraw the transferred native balance. So they are forever lost.
The user directly transfer native blockchain token when calling buy() function and lose its value forever.
Remove the payable from the two functions mintNft() and buy(). Of course we can also add a withdraw function for the owner to withdraw native token balance and left the payable intact. But this is not fair to users who carelessly transfer native balance to the contract.
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.