ERC721有safeTransferFrom和transferFrom,如果接收合同的onERC721Received方法没有返回特定的魔术号,safeTransferFrom将抛出。这是为了确保接收合同能够接收令牌,因此它不会永久丢失。
但是,如果没有这张支票,为什么transferFrom也会存在呢?我唯一的猜测是让ERC721与ERC20兼容,后者有一个具有相同签名的transferFrom方法。然而,每个标准中的方法的语义是不同的( ERC20中的uint256是指值,而在ERC721中是指tokenID),因此兼容性似乎有误导性。
我遗漏了什么?
发布于 2021-04-17 09:21:35
在最初的Github线721线程中有一个关于保持“不安全”传递函数的解释(来自Dieter,别名"dete",EIP-721的作者之一)的评论:
经过进一步的思考和与@flockonus的讨论,我们建议保持一个简单的(因此也是“不安全的”) transfer()方法。(也就是说,它的工作方式类似于ERC-20,而不是EIP-223)。我们的理由如下:
因此,为了保持更大的灵活性,并使标准尽可能简单,保留了此功能。
发布于 2022-12-06 06:17:34
ERC721 721溶胶中有一种解释,即呼叫者有责任确认接收者能够接收ERC721,否则他们可能会永久丢失。使用{safeTransferFrom}可防止丢失,但调用方必须理解这会添加一个外部调用,该调用可能会造成重入漏洞。
因此,safeTransferFrom是安全的使用,但可能发生重入.
https://ethereum.stackexchange.com/questions/97379
复制相似问题