Paradigm: 高效发行 NFT 的设计指南

区块链给开源软件的融资带来了革命性的变化,但并非所有东西在一开始就行得通。事实上,2016—2018年期间的 ICO 经常是严重有问题的机制,它们让创始人在交付任何产品前就能兑现。此后,我们吸取了许多教训,今天的项目在发行和分发代币之前都有一个工作产品,以激励使用和去中心化治理。

NFT 被证明是另一种明确适用于加密货币的产品市场匹配,但它们正在经历自己的成长之痛。每个 NFT 的生命都开始于一次 NFT 发行 (有时也称为铸造或空投)。一次 NFT 发行意味着有新的收藏品被首次创造、出售和分发给买家,他们随后会决定是持有还是在二级市场交易。

就像任何首次销售的商品一样,NFT 的发行面临着为从未有过价格的东西定价的挑战。但与大多数其他东西的销售不同的是,它们还有一个额外的困难,那就是在一个充满独特特性的高度对抗性环境中进行,这些特性已经使缺乏经验的用户难以接近,这个环境就是公共区块链。因此,开发者必须设计出高效而稳健的机制,以防止被破坏。

本文以在现实世界中那些已经伤害了用户利益的 NFT 发行案例开始,以找出好的发行应该满足哪些目标。接下来,我们把发行分解为一个个的步骤,探索每个步骤的设计空间。最后,我们提供一个我们认为是设计良好的发行机制的参考实现,供社区使用和在其基础上构建。

损害用户利益的示例

随着时间的推移,我们已经注意到,NFT 发行的某些设计模式一直给用户带来不良结果。

可被破坏的公平性

当一个新的收藏品推出时,用户可以与其智能合约交互,铸造一个具有随机属性的 NFT。这些属性往往有不同的稀有度,使得有些组合比其他更稀缺和更有价值。例如,10,000 个 CryptoPunk 里只有 9 个有超稀有的“外星人”特性,其中现在在市场上最便宜的一个标价 35,000 个 ETH。

虽然不同人出于各种原因参与铸造,但其中很多人享受不知道他们将得到哪款以及稀有度如何的兴奋感。从这个意义上说,铸造 NFT 只不过是长时间以来在模拟经济 (如集换式卡牌游戏里的增强包) 和数字经济 (如电子游戏的战利品盒/箱) 中受欢迎的扭蛋机制的延续。

参与扭蛋游戏的人往往会做出一个重要的假设:他们从物品的随机分布中抽取,且真的有机会 (尽管很小) 抽到非常稀有的那个。不幸的是,过去的 NFT 铸造经常无法满足这个假设,无法创造真正的随机性。在实践中,这使得熟悉技术和有动机的各方利用铸造为自己谋利,抢夺收藏品中最稀有的那些,使诚实的参与者无法获得。

我们分享这种模式的两个案例,其中 NFT 铸造正是以这种方式被破坏。这两个案例都依赖于相同的两步过程:

  1. 抢夺者提取收藏品的元数据,使它们显示在一个单一稀有度分数中所有属性的相对频数。使用这个分数,他们然后可以确定一个收藏品集里最高价值的 NFT。

  2. 然后,抢夺者打破铸造合约的随机性,以只铸造他们想要的稀有、最高价值的 NFT。

Loot 衍生品以及用链上元数据抢夺 Loot

最近,一个名为 Loot 的项目席卷了 NFT 世界。看似简单,这个项目包含 8,000 个战利品包,由不同稀有度的胸部、足部、手部、头部、颈部、戒指、腰部和武器物品组成。

每个物品槽的所有属性都直接存储在合约里,铸造者获得一个伪随机的战利品包,以包 ID 作为哈希值。虽然只要以太坊存在它们就永久存在,但在链上存储元数据也将 Loot 的伪随机性暴露给抢夺者。他们通过在本地模拟随机化函数,快速抓取了所有 8,000 个包的元数据,获得了整个系列的图片 (也获得了稀有度)。有了这些信息,他们只需要利用合约最后剩下的弱点:能够准确地铸造他们想要的 ID,并只狙击最稀有的包。

但是,尽管破坏很简单,但有理由相信没有人会破坏原始的 Loot。

来源:

https://github.com/Anish-Agnihotri/blog-effective-nft-launches-data/tree/master/01-exploitable-fairness/loot

如果我们观察直到铸造最后战利品包的稀有度,稀有的物品在整个铸造过程的分布是良好的。这表明没有明显的抢夺案例。

关于为什么 Loot 没有被破坏,有两个可能的解释:

  1. 这是一个全新的合约,因此人们还没准备好或缺乏时间发现漏洞

  2. 铸造 Loot 的预期价值并不明确,因为收藏品的价值只会在接下来几天在二级市场爆发。收藏品大概需要 2.5 个小时售完,这一点进一步支持这个假设。

然而,随着 Loot 的价格不断上涨,一系列像 More Loot 和 Extension Loot 这样的衍生品开始出现,它们大多数只是原始 Loot 合约的小分叉。新的收藏品继承了 Loot 的弱点,但市场价值更高,且得到更多的关注。这对这些收藏品铸造的公平与否产生了很大的影响。

More Loot

将稀有物品的分布与 More Loot 和原始 Loot 之间的铸造时间进行对比,抢夺的证据变得非常明显。仅仅几个区块之后,所有的稀有 NFT 已经被铸造完了,只剩下一些没有价值的给未来的铸造者,他们基本上不知道经验丰富的用户已经抢夺完了这次的发行。

来源 :

https://github.com/Anish-Agnihotri/blog-effective-nft-launches-data/tree/master/01-exploitable-fairness/mLoot

下图:红线指的是当 Anish 在推特上公开他的稀有度得分时,开始争夺稀有包的区块高度。

来源 :

https://github.com/Anish-Agnihotri/blog-effective-nft-launches-data/tree/master/01-exploitable-fairness/mLoot

此外,由于 More Loot 的供应量不断膨胀,因此可以预期抢夺者将对未来可得的包预先评分,并竞相铸造它们。

Extension Loot

与 More Loot 类似,Extension Loot 具有一个单一地址,可以铸造最稀有的 10 个袋子里的 5 个 (所有铸造的 NFT 都以红色标示)。独特的地方在于,这些 NFT 被隐藏在显而易见的地方,因为抢夺者在连续瞄准稀有包之前,会慢慢把它们和可得包分发出去。

Source 来源 :

https://github.com/Anish-Agnihotri/blog-effective-nft-launches-data/tree/master/01-exploitable-fairness/xLoot

Meetbits 以及用链下元数据抢夺 Meebit

Meebits 是由 CryptoPunks 的创造者 Larva Labs 推出的备受期待的 NFT ,拥有 20,000 个独一无二的 3D 人物。

Larva Labs 知道精明的用户可以利用收藏品的元数据来计算稀有度,然后抢夺稀有的 NFT。为了解决这个问题,他们以这样的方式设计他们的网站:他们允许买家看到每个 Meebit 的完整元数据,但仅在 NFT 被铸造完后。

尽管该网站明确隐藏了未铸造的 Meebits,但有人查看源代码,发现 Larva Labs 从 IPFS 上提取元数据。利用这个信息,他们还是搜刮了 IPFS ,提取了未铸造的 Meebits 的元数据,找出了最想要的那些。

然而,Larvalabs 仍然没有让抢夺者轻易实现:不同于 Loot,用户不能铸造特定 Meebit ID 的 NFT。相反,链上的随机性被用作哈希值 (理论上矿工仍然可以利用),使这个特定用户更难以铸造一个稀有的 Meebit。

但是,掠夺者知道如何在糟糕情况下取得最好的结果。他们写了一个购买 Meebits 的合约,查看它们的 ID,然后再“打乱”它们。具体来说,Meebit 合约是一个有 mint() 函数的 ERC721,它会返回一个随机的 Meebit ID。抢夺者的合约可以调用 mint,将返回的 Meebit ID 与它们的稀有度列表进行对比,如果没有超过一定的稀有度分数,就回滚交易 (示例代码)。用这一招,他们只需支付大约 0.03 个 ETH 来查看每个 ID,而不用花大约 2.5 个 ETH 直接购买 Meebit。

尽管攻击者在这个过程中烧了很多失败的交易,因此也会烧掉很多 gas 费用,他们最后获得大约 400 个 ETH 的收益。今天,同样的掠夺者可以通过 Flashbots 的交易捆发送交易,如果得到他们想要的 ID,就给矿工支付费用——使回滚交易完全免费。

攻击者铸造并卖出 Meebit #16647,它具有极其稀有的“访问者”特征。

Gas 竞拍

在 9 月,有 7 个特别时期以太坊每 gas 的基本费用超过了 1,250 gwei。令人震惊的是,这 7 次发生的情况都是因为备受关注的 NFT 发行扰乱了网络。

从左到右:G’EVOLS、The Sevens、Sipher、Galaxy Eggs、Omnimorphs + ArtBlocks Democracity、Galactic Apes 和 King Frogs

大多数这些发行采用的是固定价格、先到先得 (FCFS) 的机制。由于价格低、需求过大,获得这些 NFT 的竞争从合约出售变成了在交易池里的 gas 竞拍。

其中一个例子是 The Sevens NFT 的空投,这是一个备受关注的收藏品集,有 7,000 张以反乌托邦人物为主题的收藏品作为个人头像。由于每张 NFT 的初始价格为 0.07 个 ETH,热心的参与者都赶紧到合约上去铸造。在短短 6 分钟内, gas 价格达到 12,246 gwei 的峰值,仅在合约铸造的 gas 费上面,参与者支付的中位数是每个 NFT 大约 1.49 个 ETH,而最高的 5 % 的人每个 NFT 支付了 2.44 个 ETH。

在 the Seven 铸造中,快速上涨的区块基本费用

gas 竞拍的问题不仅仅是它们在使用上更具挑战,而是通过以这种方式“滥用”公共交易池,它们为所有以太坊用户创造了负外部性。他们还迫使用户为同一个 NFT 支付不同的金额,导致成千上万出价不足的交易失败,伤害了用户利益。

高技术门槛

正如我们之前看到的,以太坊是一个黑暗森林,有很多高水平的、敌对的行动者总在寻求机会。NFT 铸造,特别是稀有的那些,买家期望在铸造后能在二级市场获得溢价,这为技术熟练的各方提供了比普通参与者更多有利可图的机会。

这些参与者通过机器人和自动化策略与铸造合约直接交互,往往绕过前端,甚至偶尔绕过交易池。

TIMEPieces NFT 空投是这方面的一个典型例子。高级机器人运行者在开始铸造前查看 nft.time.com 的前端源代码。这样,他们可以提前几个小时在主网找到部署了的铸造合约和建造好的机器人。因此,这些机器人在铸造中有一个显著的优势——三分钟内全部售出。在普通参与者连接钱包和提交交易时,已经太晚了。

此外,有些人使用 Flashbots 绕过交易池,直接提交交易给矿工。虽然 TIMEPieces 的合约限制了参与者每个地址最多铸造 10 个 NFT,机器人运行者 0x35…ce5 提前计划,把资金分到 5 个钱包,在一个 Flashbots 交易捆里抢夺了 50 个 NFT。

这个交易捆包含了 5 个来自不同地址的铸造交易,避开了对每个地址铸造数的限制。

另外,由于这个参与者使用了 Flashbots (使得回滚交易的成本为 0 ),他们并没有遭遇我们在上文例子中的失败交易情况。这不同于接近 10,962 名普通技术水平参与者在 100 个区块的 12,743 笔回滚交易里损失了累计 252.62 个 ETH (近 800,000 美元) 的交易费,因为他们的尝试是失败的。

低 Gas 效率

一个有效的 NFT 铸造机制应该对所有参与者来说都是易于使用的——最好是步骤少,实现简单。对于实现不同于先到先得分发模式的 NFT 铸造,一个常见的问题是会引入复杂性,增加用户必须在链上进行的交易数。

一个例子是 Jay Pegs Auto Mart 在 Miso 上的 $DONA 拍卖。尽管该铸造开创了批量竞拍 NFT 分发方式,并有效展示了元数据生成在实践中的公平性,但它是以牺牲 gas 和交易效率为代价的。

为了参与铸造过程,用户必须在 8 天内至少进行 4 次链上交易:

  1. 首先,用户将 ETH 提交到一个 Miso 的批量拍卖中,而不知道他们会收到多少美元的 $DONA 代币作为交换 (取决于最终的结算价格)

  2. 一旦拍卖结束,用户必须领取他们的 $DONA 代币

  3. 此时,所有用户所处的情况有三种:不够代币铸造一个 NFT、刚好够和有太多代币。基于参与的 1,363 名铸造者的情况,我们发现有 273 名不够代币,0 名刚好够,和 1090 名代币太多 (超过一个代币的零头)。

拥有太少代币的用户将不得不交易,以从 Sushiswap 获得必要的剩余代币。

拥有太多代币的用户可以选择同意用 $DONA 代币做交易,然后通过 Sushiswap 进行交易,卖出他们的盈余。

  1. 当用户有足够的 $DONA 来铸造一个 NFT 时,他们可以同意 NFT 合约花费他们的 $DONA ,然后烧毁他们的 $DONA 以铸造一个 NFT。

  2. 最后,元数据会批量地被分给 NFT,不能披露某一个 NFT 的元数据。

虽然这种机制力求公平,它增加了用户参与的困难,且要消耗很多 gas。

排他的铸造

NFT 收藏者和爱好者评估收藏品价值的一个方法是通过其社区力量。通常情况下,这涉及衡量持有者的代币集中度。理想的收藏品往往集中度低,有利于个人参与者而不是很多巨鲸。

不过,在最近的铸造中,出现了引入批量铸造的新趋势,即参与者可以在单笔交易里铸造多于一个代币。通过这种机制,巨鲸铸造者会受激励,以较少的 gas 开销铸造许多 NFT。

在实践中的一个例子是 Stoner Cat 的空投,这是一个支持制作 Mila Kunis 和朋友们的动画短片的收藏品 NFT 铸造,允许一次铸造多达 20 个 NFT。考虑到这个功能,89% 的 NFT 都通过批量铸造功能铸造,且接近 31% 的 Stoner Cats 是以最多 20 个 NFT 的批量铸造的。