如果没有修改智能合约中使用随机性的方式,不要将Loot的代码用于新项目。 Loot的智能合约有一个设计限制(或者说是一个安全漏洞),影响着初始代币分配的公平性。而那些使用Loot代码的新项目也存在这个漏洞。 本文不是要贬低Loot或任何相关公司,而是意在: 1.通过减少信息不对称,营造NFT的公平竞争环境; 2.减少程序错误或设计模式的继续扩散,以防将用户置于风险中。 Loot是一个由8000个代币组成的NFT集合,称为Bags。97%的NFT可由公众铸造,除了Gas费之外没有其他费用。 智能合约包含随机化和渲染层、逻辑层,允许它生成对应于任何代币ID的SVG。 每个Bag有8项属性,每一项都在智能合约上随机生成一个分值。分值越高,物品的名称可变性越强,物品也就更加稀有。
那么问题出在哪里呢? Bag的内容是根据其代币ID确定的——这意味着在最初的代币分配之前或分配期间的任何节点,只要通过阅读智能合约,任何人都可以轻而易举地提前计算出整个Bag的供应量(包括稀有度量)。 由于claim()函数将代币ID作为一个参数,所以很容易从收藏品中挑选出最稀有的物品,并赶在其他人之前立即将其铸造完成。 如果合同代码在最初发行时是公开的,就会使得Loot和类似的项目很容易被游戏化。 事实上,Loot和其大多数模仿者都把使用Etherscan作为他们的造币UI,这要求源代码在Etherscan上经过验证。 公司已经确认,以下项目的初始发行版对上述的造币操作是开放的。Loot、Bloot、More Loot、n、CHAR 0...... 这是个非详尽的列表,在写这篇文章时,我还没有发现任何其他对此开放的项目。 最令人担忧的是,这种游戏性会导致普通用户和内行或具有技术知识的用户之间产生的结果存在显著差距。 漏洞1 More Loot是Loot的创造者dhof发布的Loot后续产品,截至本文写作时仅发布几个小时,从More Loot的链上数据中就可以明显地发现这一漏洞产生的影响。 上图显示了More Loot Bags可供铸币与实际铸币之间的分布差异。它包括目前该系列中超过130万个Bag的 "greatness "分数。 如果铸币是随机的,我们期望这些分布是一致的。 恰恰相反,我们可以清楚地看到,虽然绝大多数的购买是 "盲目的",但有一小部分的交易是利用合同,只对最稀有的Bag铸币。 (责任编辑:admin) |