在我们之前的博客文章中,我们讨论了推动一个更好的不可替代令牌(NFT)标准的理由。之后,在与更多NFT社区合作之后,不少项目与个人加入到我们的行列,支持NFT合约标准化(也称为可区分资产登记,或DARs)。这是一个巨大的进步,我个人对我们取得的进展感到非常高兴。最终,最新版本的721标准将解决我们确定的每一个问题:OpenZeppelin团队正计划着一旦他们就如何最好地实现这些更改达成共识,就将在其下一个版本中添加这些我们所建议的改进。因此,我们决定撤回最初的821提案。
新ERC721标准的性能
工作组在过去几周内讨论了对原ERC721标准所提议的各种改进的优点。我们一直在讨论不同的安全方法、命名约定、不同执行方式的效率限制以及许多其他技术细节。一些讨论中的要点如下:
添加“approveAll”方法
这是一个非常广泛的单一需求的改进,它可以节省大量的油费并免去许多由于必须单独授权每一个资产转移而引发的烦恼。我们已经决定将这个新方法称为setApprovalForAll(address beneficiary, bool approval),其他选项:
authorizeOperator(address)
approveAll(address, bool)
approveAll(address)
disapproveAll(address)
deauthorizeOperator(address)
setOperatorAuthorization(address, bool).
我们的决定考虑到:
命名的模式设置了一种方法,它在最后取一个bool参数。
approveAll是最受欢迎的,但是没有足够的共识来避免有这种基本功能的两个函数。
避免引入操作者概念,这将混淆批准一个地址代表你移动任何资产的结果。
我们使用approveAll还有一个额外的好处,将来DARs的部分升级将会更容易创建。
包括一个安全传递函数
经过长时间的讨论后,更新的标准中包含了一个名为safeTransferFrom(addressfrom, address to, uint assetId, bytes data)的函数,目的是提供类erc223保护,防止资产损失。这条在我的愿望清单上是很高的,尽管决定使用回调来实现仍然有一些缺点,比如重新部署多重签名钱包。在一个理想的世界中,如果有一个更加成熟的ERC820标准,我们更倾向于使用一个外部查找的解决方案。
简化转移操作
以前,721标准有三种转移资产的方式:transfer, transferFrom, 以及 takeOwnership。
transfer(address to, uint assetId) 只能由所有者调用。
transferFrom(address from, address to, uintassetId) 只能由经过批准的操作者来调用,而不是所有者。
takeOwnership(uint assetId) 只能由经过批准的操作人员调用。
这是为了使721与ERC20接口相似,但对NFTs来说,只有一个函数是实际需要的:transferFrom(addressfrom, address to, uint assetId)。在此之前,我们对所有传输方法中对地址的需求都表示高度怀疑,但我们意识到,地址的存在是防止出现前置或交易的重新排序所必需的。同样,如果你拥有该资产,这就不成问题。你即得到所有者的批准,可以移动任何资产,或者说你已经被授权移动特定资产;如果你有移动资产的授权,那么该方法调用也应该有效。
包含元数据
这段探讨没有得到应有的重视,这很可能是由于实现这一目标有多么困难,尤其在格式大爆发和缺乏一种将信息附加到某一特定令牌上的标准的情况下。关于如何协商名称、翻译、图片的不同格式,许多问题仍然存在。我们还需要弄清楚如何利用现有的关于浏览器图像兼容性和标准化的知识,以及这些机制是如何工作的(例如,我们是否应该包括不同优化目标或特定格式以针对不同平台的不同像素密度?)。工作组确定了一个可选的扩展,允许实现指向特定的URI以获取任何必要的元数据。
共识的重要性
就我个人而言,我在这个过程中吸取了三个非常重要的教训。
没有分歧比达成完全一致更为重要:问“有人对X的特征有什么评论吗?”和问“每个人都能接受选择Y方式的决定吗?”是非常不同的。你可以从源自IETF的这个优秀的作品中读到更多关于共识的重要性:https://tools.ietf.org/html/rfc7282第二节
同样以上作品也解释到,任何妥协都必须是一种技术妥协,而不是一种情感上的妥协,或者说是一种“人与人之间的谈判”的妥协。更为可取的说法是“通过添加这个特性,我们可以从每笔转账中节省大量的油费,但是我们将打破向后的兼容性”而不是“我的团队承认允许特性X,所以我们认为将包括功能Y作为交换是公平的”。
我也学到了很多关于在一个标准机构中工作的人,他们都有不同的观点(和动机)。特别是,我了解到每一个微小的改变都必须被考虑周全地提出,因为即使是很小的改变也能极大地增加达成共识所需的工作量,这正是由于对每个参与者都需要付出的沟通和认知负荷。
向前迈进
我们近期看到了大量使用NFTs的分布式应用(dApps),所以更要尽快开发这个标准以避免进一步的碎片化,这非常重要。我们在1月初的821标准的倡议很快就取得了进展,我们在1月底与IDEO团队和0x团队的会议,EthDenver会议,以及2月的gitter对话里都得到了积极响应。
我们的团队非常高兴地重构了从821到新721标准的命名约定,我们期待未来会产生更少的执行碎片,以及一个能包含可互动操作钱包、游戏、交易所和NFT游戏的生态系统。
请随时跟进Decentraland项目开发的最新动态!与我们保持联系:
加入我们的电报官方中文社区:
https://t.me/decentraland_cn
加入我们的官方电报群:
https://t.me/decentralandTG
关注我们的微博动态:
https://weibo.com/decentraland
加入我们的QQ群:Decentraland中国官方社区
加入我们的社区聊天Rocket Chat:
https://chat.decentraland.org
关注我们的Medium博客:
https://blog.decentraland.org
订阅我们的优酷频道:
https://i.youku.com/decentraland
加入我们的邮件列表:https://decentraland.org
关注我们的Twitter账号:
https://twitter.com/decentraland
领取专属 10元无门槛券
私享最新 技术干货