User can bypass NFT balance check by transferring out minted NFT to other address, and minting again
collectPresent function uses balanceOf(msg.sender) > 0 to prevent user from collecting multiple presents. This is not safe, because user can transfer minted NFT to other addresses, and then call collectPresent function to get another NFT.
User with status nice or extra nice can collect multiple NFTs without limit.
Foundry
Using a mapping to store historical minting actions, can check that mapping instead of NFT balance of user before minting.
Relying on balanceOf > 0 in collectPresent() allows the msg.sender to send their present to another address and then collect again.
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.