buy() and mintNft() are USDC-denominated functions but both are marked payble. The protocol silently accepts any ETH sent alongside the call, but ETH is permanently locked with no recovery path.
Likelihood: High
Scripts, aggregators, and front-ends that build multicall bundles often forward the full msg.value to every sub-call, so a user transacting through such an interface will silently lose ETH without any error.
Impact: High
Any ETH sent to either functions is irrecoverable as there is no withdrawal path. Also, the calls succeed, so neither the sender nor monitoring tooling will detect the fund loss from the transaction receipt.
Remove payable from both functions. Neither accepts ETH; the keyword serves no purpose and actively creates a fund-loss vector.
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.