在NFT市场上工作,我不允许直接传输,只允许通过本合同的自定义函数createSale()进行传输。
我就是这样来的:
function onERC721Received( address operator, address from, uint256 tokenId,bytes calldata data ) external override returns (bytes4) {
if(msg.sender != address(this) && tx.origin == operator) revert("direct transfer not allowed"); //disallow direct transfers
emit NFTReceived(operator, from, tokenId, 1, "ERC721", data);
return IERC721Receiver.onERC721Received.selector;
}到目前为止,它似乎是有效的,我所做的大量测试似乎还不错。
然而,
发布于 2022-11-28 16:34:58
我认为唯一可能的问题是,onERC721Received回调只在safeTransferFrom用于传输ERC721时才被调用。如果使用transferFrom,那么直接传输是可能的。因此,我认为这份明智的合同应该得到发展,事实上,直接转让仍然是可能的。
https://ethereum.stackexchange.com/questions/140009
复制相似问题