首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ERC721有transferFrom和safeTransferFrom?

为什么ERC721有transferFrom和safeTransferFrom?
EN

Ethereum用户
提问于 2021-04-17 04:48:58
回答 2查看 9.1K关注 0票数 8

ERC721有safeTransferFromtransferFrom,如果接收合同的onERC721Received方法没有返回特定的魔术号,safeTransferFrom将抛出。这是为了确保接收合同能够接收令牌,因此它不会永久丢失。

但是,如果没有这张支票,为什么transferFrom也会存在呢?我唯一的猜测是让ERC721与ERC20兼容,后者有一个具有相同签名的transferFrom方法。然而,每个标准中的方法的语义是不同的( ERC20中的uint256是指值,而在ERC721中是指tokenID),因此兼容性似乎有误导性。

我遗漏了什么?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2021-04-17 09:21:35

在最初的Github线721线程中有一个关于保持“不安全”传递函数的解释(来自Dieter,别名"dete",EIP-721的作者之一)的评论:

经过进一步的思考和与@flockonus的讨论,我们建议保持一个简单的(因此也是“不安全的”) transfer()方法。(也就是说,它的工作方式类似于ERC-20,而不是EIP-223)。我们的理由如下:

  • 对于标准来说,更简单总是更好。要求越少,就越难搞砸。(NFT已经够复杂了!)
  • 防止每个可能的用户错误并不是智能契约的工作(它必须防止无效的操作,而不是意外的操作)。特别是,我们试图避免的情况(向不知道如何处理NFT的合同发送NFT)更好地通过钱包软件中的检查和警告提供服务。一个钱包(或其他智能合同界面)将始终能够拥有比智能契约更健壮和动态的检查,并且还能够与用户进行一些“来回”的对话。聪明的合同不等于“这看起来不安全,你确定吗?”对话框!

因此,为了保持更大的灵活性,并使标准尽可能简单,保留了此功能。

票数 9
EN

Ethereum用户

发布于 2022-12-06 06:17:34

ERC721 721溶胶中有一种解释,即呼叫者有责任确认接收者能够接收ERC721,否则他们可能会永久丢失。使用{safeTransferFrom}可防止丢失,但调用方必须理解这会添加一个外部调用,该调用可能会造成重入漏洞。

因此,safeTransferFrom是安全的使用,但可能发生重入.

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/97379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档