The EggVault contract is designed to store ERC721 tokens (NFT eggs), but it does not implement the IERC721Receiver interface, which includes the critical onERC721Received() function. This function is required for contracts to properly receive ERC721 tokens. Currently, the protocol uses transferFrom() instead of safeTransferFrom() in the depositEggToVault() function, which bypasses the safety check and will lead to a successful transfer of the NFT to the contract address, causing it to get stuck there.
1) A user deposits an NFT into the EggVault using the current depositEggToVault() function that uses transferFrom()
2) The deposit succeeds because transferFrom() doesn't check for proper receiver implementation
3) NFT is locked in EggVault contract
NFTs transferred into the EggVault contract will be permanently locked there with no possibility of transferring them out.
Implement the IERC721Receiver interface and onERC721Received() function in the EggVault contract
NFTs are transferred to contracts without onERC721Received implementation.
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.