保证一个合约只能收到一种类型的ERC721 nft

Guarantee a contract can only receive one type of ERC721 nft

为 ERC721 NFT 的 privateSale 创建合约,首先我将一些库存存入实现 onErc721Received(...) 的 privateSale 合约地址 我想保证的是,这个 privateSaleContract 只从一种给定的 NFT 类型(通过其合约地址)接收 ERC721 代币

如何保证?

ERC721 标准定义了两种类型的传递函数:

  • safeTransferFrom() 检查接收者是否是合约 - 如果是,则尝试在接收者上执行 onERC721Received() 函数。
  • 还有一个不应该调用 onERC721Received() 的非安全传递函数 (transferFrom())。

因此任何人都可以使用非安全传输功能向您发送 NFT,而无需调用您合约上的任何功能。这使得这些传输无法阻止。