ERC721 — The consequences of poor ERC design & what you can do about it


#1

Originally published at: https://alphawallet.com/cn/the-consequences-of-poor-erc-design-what-you-can-do-about-it/

本文原文作者:Sangalli,AlphaWallet社区译者:余杭


当我以前在澳大利亚最大的银行担任区块链开发人员时,我们不断被提醒软件设计的后果,特别是当创建标准变得普遍时。标准设计后果在区块链中进一步复杂化,因为糟糕的设计不仅会导致安全漏洞,还会导致昂贵的交易和网络拥塞,从而对所涉及的每个人造成严重破坏。

虽然我不再在银行工作,而是致力于创建钱包平台和扩展解决方案,AlphaWallet,我们正面临这个问题,我觉得有必要对此说些什么,特别是在密码开发热潮和发明之后ERC721。

 

ERC721的主要问题
在这篇文章的前言中,我想说这不是对cryptokitties团队或任何设计ERC721的人的个人攻击,而是我认为这是一种批评,我知道这个标准可能是匆忙创建的,因此为了方便起见,最终出现了重大缺陷。

所以下面我编写了为什么你应该避免像ERC721这样的标准和一些解决方案来解决这种情况的原因。

无法获得令牌ID
如果你看一下erc721.org,你会很快发现没有任何功能可以从合同中获取你的令牌ID。

您可能不认为这是一个大问题,但请记住,在erc721中进行转移的唯一方法是引用您的令牌ID,但无法获取令牌ID,甚至无法进行转移。

此外,无法获取您的令牌ID意味着您将很难在任何地方显示您的令牌。

我的代币在哪里?
低效的传输能力
密码学狂热迅速显示了以太坊网络的极限以及ERC721仅逐一实现转移令牌的事实将问题加剧到了新的高度。

这意味着如果您想将20个小猫转移给同一个人,则需要发送20个交易。这是非常糟糕的,因为在大多数情况下,大部分天然气成本来自交易本身,这意味着逐个转移令牌会以指数方式增加网络的成本和负担。

如果他们将余额映射到数组并允许传输这些数组,则可以减轻这种情况。

一般来说效率低下
要获得余额或令牌ID(如果已实施),则需要循环合同中的每个令牌并将它们与您的地址匹配。

在cryptokitties的情况下,这意味着索引超过800k小猫只是为了获得自己的平衡。

这导致像Infura这样的节点服务只是暂停,让用户不再了解他们的实际余额。

如果不解决这些问题会发生什么
但是你肯定可以创建扩展功能来处理标准的任何缺点吗?

虽然您可以扩展功能以包含您想要的任何内容,但您必须记住,人们遵循他们给出的标准,任何遗漏的内容都将被忽略或以主观方式实施。

这意味着无法获得令牌余额的主要缺点将导致巨大的涟漪,因为这些基本功能将不一致(每个人的实现都会有所不同)。

不解决这些问题将导致可伸缩性(传输和平衡查询),采用(缺乏实现的一致性)和支持(无法确定如何正确执行基本功能)的主要问题。

展望未来,我们需要认真思考如何设计我们的标准,因为糟糕的标准可以成为主流。

解决方案
所以在你假设我只是一个负面的南希之前,让我们谈谈我们如何解决这个问题。一般来说,最好只支持处理基本功能的标准,例如查询平衡和完美转移,而不用担心花边和口哨,因为这些可以是扩展。

ERC721未能处理基本功能的事实意味着您应该寻找ERC875,ERC1155或ERC998等替代品;所有这些标准都能够以连贯的方式进行高效的查询和传输,并且可以像ERC721一样进行扩展。如果我们采用其他不可替代的标准来实现这一点,并选择一般的良好ERC,我们可以解决这样的问题。在评估任何ERC时,问问自己:它是否有坚实的基础?

结论
如果您是令牌发行人,请仔细考虑您选择的标准,它将有助于扩展网络并使您的令牌采用更顺畅的过程。

如果您正在考虑采用ERC721等标准或类似标准,请查看其他选择。