# 
NFT 发行：有效“作弊”与反作弊指南

By [Punk](https://paragraph.com/@omnitrove) · 2021-12-05

---

正如 Paradigm 的《设计有效的NFT发布指南》中所述，NFT 发布对普通用户来说往往是不公平的。Hasu 和 Anish Agnihotri 提到了几个潜在隐患，资深用户从中可以获得优势，并从创作者和其他收藏家那里获取价值。

一个常见的设计错误就是 Hasu 和 Anish Agnihotri 所说的“可利用的公平性”。对于 NFT 买家来说，乐趣之一在于“gacha游戏（扭蛋游戏）”的体验感：买家可能会入手一个普通的 NFT，而幸运的话，可能会得到一个具有稀有特征的 NFT，其售价可能比普通同类产品高出几倍。公平起见， NFT 应该是随机铸造的。然而，资深用户一直在寻找各类方法增加铸造或购买到稀有 NFT 的几率。

我们已经开发和安装了一些工具，以便在购买 NFT 时获得优势。这种做法绝非例外；我们观察到一些买家已经使用这类工具几个月了，最近还出现了很多付费服务提供商，如 traitsniper.com。今天，我们将开源我们的工具，介绍使用方法，以及如何检测别人是否使用类似的方法在 NFT 发布中获得优势。

我们推出的作弊工具的工作原理是在普通用户可以获得元数据之前找到元数据，然后在铸币过程中利用元数据获得更多的稀有 NFT，或者在元数据上传到 OpenSea 之前购买尚未公开的 NFT。类似的作弊行为也可以由项目内部人员进行。

我们检测到很多采取类似方法的作弊行为，接下来会介绍一些实例。我们希望通过提高对这种策略的意识，促使 NFT 社区对 NFT 发布提出有保障的公平性要求。

**如何使用工具在NFT发布中作弊**

第1步：获取元数据

首先，你需要找到目标藏品的代币元数据。检查代币的 URI，看它是否指向一个有元数据的 IPFS 页面或网站。如果是，我们提供一个名为 pulling.py 的脚本，输入合同地址，可以迅速获取一个 NFT 收藏品的所有元数据。

我们的 pulling 脚本将 ERC-721 合同地址作为输入项，然后快速检索元数据

如果你能在首次销售完成之前找到元数据，那就很有利了：只需直接进行第二步，确定哪些NFT值得铸造，然后尝试铸造。

我们已经发现各项目用来隐藏元数据的许多不同机制。最常见的做法是隐藏元数据，NFT 发行完成后，再在项目网站上更新元数据。在其他情况下，元数据被存储在 IPFS 上，并通过改变基础代币 URI 来更新。我们通过查询 OpenSea 的 API 或者搜索 testnets 和 Arweave 成功找到过被泄露的元数据。在这些地方，开发者偶尔会泄露他们元数据的 IPFS 哈希值。即使这种方法没有产生元数据，也可以提供其他有价值的参考。

一位资深用户介绍了他们在一个 NFT 项目启动前的分析过程。（本例中没有元数据泄露）

有时我们无法找到完整的元数据，但能找到泄露的图像。在这种情况下，我们只是用一个 “for”循环来下载所有图片，手动查看这些图片，寻找我们了解的稀有特征。

一个简单的 for 循环可以用来在铸币和/或披露之前搜集泄露的 NFT 图像

我们还观察到这样的例子：我们无法找到泄露的元数据，但其他人仍然能在铸币中获得优势。对此有许多可能的解释。一种解释是我们无法找到公开泄露的元数据，但其他人找到了。另一种是内部人员掌握了信息——内部人员可能与项目直接相关，也可能是托管项目元数据的第三方。

第2步：计算稀有度

NFT价格和稀有度之间有很强的关联性。最广泛使用的 NFT 稀有度网站是 rarity.tools，他们使用同样的算法来生成几乎所有藏品的稀有度排名。

最近出售的200个 MekaVerse NFT 的销售价格与稀有度等级相关。(截至10/20/2021)

rarity.py 工具使用步骤1的元数据作为输入，然后输出藏品包含的每个 NFT 的稀有度评分和等级。

需要注意的一点是，稀有度评分方法的确略有不同；对于某些藏品，rarity.tools 采取“特征数量”作为属性，但对于其他藏品则不采用。有些藏品有自定义的稀有度评分标准，就需要单独进行检索。知道了一个藏品系列中每个 NFT 的稀有度，就可以继续进行第三步。

_注意：我们并不喜欢 rarity.tools 的排名方法，会另有文章讨论。_

我们注意到，在 NFT 夏季的早期，很多我们认为异常幸运的 NFT 铸造者/购买者并没有使用计算出来的稀有度评分。相反，我们认为他们只是简单地检索元数据，并寻找具有某一种极其罕见特征的 NFT，而不是因为组合了多种一般罕见特征而罕见的 NFT。随着时间的推移，我们注意到一些买家开始计算稀有度评分。

第3步：造币或购买

现在你有了整个藏品的稀有度数据，是时候购买了。如果藏品仍处于铸币阶段，那么你可以尝试铸造你已知的稀有 NFT。要做到这一点，可以手动检查 Etherscan，或者更好的方法是，编写一个机器人，获得上一个被铸造的 NFT 的代币 ID。当下一个被铸造的 NFT 是你想要的，只需要发送你的铸造交易。参考铸币的速度，既可以手动完成，也可能需要使用一个机器人，精准把控交易时间。

由于大多数发行允许批量铸造，你可能需要铸造多个普通的 NFT 来抢到一个稀有的 NFT。某些情况下，你也可能在同一笔交易中，找到多个罕见的 NFT，特别是当 NFT 并非随机发放的时候。

一位异常幸运用户铸造了5个 BlazedCats。第5个是罕见的，售价可以轻松抵消其他4个的成本

因为你清楚可以从稀有 NFT 中获利，所以你甚至可以以低于铸造成本的价格来出售其他 NFT。

还有一个例子：有人使用智能合约，加上 Flashbots，以保证只铸造稀有 NFT。

第4步：预告前的狙击

即使 NFT 发布的铸币阶段已经结束，或者你没能获得泄露的元数据，仍然可以在 NFT 发布的下一个阶段获得优势。许多项目在铸币结束后披露元数据。然而，在元数据变得可用和 OpenSea 完成更新之间有一个延迟。在这期间，你可以迅速运行我们提供的脚本，以获得元数据和稀有度评分，并购买披露之前上市销售的任何稀有 NFT。

检测 “异常幸运”的NFT买家

我们的工具也可以用来检测我们称之为 “异常幸运”的买家。要做到这一点，你需要 NFT 藏品的稀有度数据，以及买家铸造的 NFT 列表。

我们已经在 github 上提供了一些项目的稀有度数据，你也可以使用我们的工具来获得其他项目的稀有度数据。

一旦有了稀有度数据，下一步就是为藏品收集造币数据，如 find\_minting\_data.ipynb 所示。它将提供给你一个数据库，其中包括每个账户铸造的每个 NFT，以及它的稀有度等级。

每个收藏品都是不同的，可能需要调整你使用的统计测试，但我们已经提供了一些基本的工具和数据来帮助你。

一个好的开始是在铸币数据库上运行一个 Kolmogorov-Smirnov（K-S）测试——我们在ks\_test.ipynb 中有一个例子。

我们的 K-S 测试试图排除的“无效假设”情况是用户随机铸造 NFTs。K-S测试检查一个用户铸造的所有 NFT 的稀有度等级是否可能来自均匀分布。在某些情况下，例如 NFT 不是随机分布的，或者部分收藏品是赠与的而不是铸造的，概率会变得更加复杂，可能需要生成合成数据集，其中包括一个账户有机会购买的 NFT。

上图显示了一个异常幸运用户（红色）

和一个普通用户（蓝色）所铸造的 DogeX NFT 的稀有度等级

我们的 K-S 测试代码将运行每个在一个藏品系列中铸造多个 NFT 的账户，并输出一些关于幸运账户的数据。我们的代码也可以被修改，以识别在元数据披露之前购买了铸币的 NFT 账户。

铸造 DogeX NFT 的两个最幸运账户的输出示例

蓝点代表 DogeX 收藏中的每个 NFT。黑点代表由一个异常幸运的账户铸造的 DogeX NFTs

这些统计测试的输出是有细微差别的。1E-5的p值并不能保证一个账户有诈骗行为——如果是在几十万个账户中寻找，我们会期望偶尔发现有幸运儿。(另一方面，1E-22的p值...)

我们还仔细研究了NFT社区成员声称某个账户诈骗的几个例子，发现被指控的账户只是稍稍有点幸运（1%或0.1%的发生概率，没有额外的非统计或链外证据）。

如果NFT收集本身不是真正的随机，K-S检验也可能给出低p值。反过来说，一个账户没有异常的低概率也不意味着一个账户没有诈骗。事实上，我们有信心，我们使用的大多数账户不会被任何统计测试所识别，而且我们绝对不是唯一聪明到不被发现的人。

**更多计策**

我们用我们的脚本仔细观察了许多 NFT 空投。大多数没有显示出异常的迹象，可能是以公平的方式执行的（虽然并不能证明）。然而，在我们的研究过程中，我们观察到其他几种类型的异常。

性状的非随机分布

正如 Hasu 和 Anish Agnihotri 所暗示的那样，我们还观察到许多 NFT 收藏品的稀有度并不是随机分布的。在某些情况下，这意味着老练的买家可以增加他们铸造稀有 NFT 的几率，即使他们不能保证他们能收到的确切数量，因为铸造工作的进行速度很快。

---

*Originally published on [Punk](https://paragraph.com/@omnitrove/nft)*
