The standard behavior of minting ERC721 tokens involves using _safeMint()
to ensure that the recipient is capable of handling ERC721 tokens, i.e., it implements the onERC721Received()
interface.
The current implementation uses _mint()
directly, which bypasses this safety check. This can lead to situations where tokens are minted to contracts that cannot handle them, resulting in permanent loss of NFTs.
Likelihood:
This will occur when a user calls fulfillMintRequest()
from a contract that does not implement onERC721Received()
.
More likely in production if dApps or automated agents interact with your contract.
Impact:
The token is minted to a contract that cannot receive ERC721s.
The NFT might become inaccessible and permanently locked.
None
Using _safeMint()
ensures compatibility and prevents accidental loss of tokens.
The `fulfillMintRequest` function is external and anyone can call it. If the protocol uses `_safeMint` instead of `_mint`, this introduces a reentrancy risk. It is better to use `_mint` and the caller is responsible for being able to obtain the token.
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.