指南: 如何设计有效NFT发售

  • Paradigm
  • 发布于 2021-10-14 11:26
  • 阅读 57

这篇文章深入探讨了NFT启动过程中用户常见的损害类型,特别是如何通过设计缺陷导致不公平和效率低下。文章分析了真实案例,提出了有效的启动机制的目标,并逐步分解了NFT启动的每个步骤,最后提供了一个参考实现,旨在为社区提供一个可行且公平的NFT启动方案。

大纲

区块链彻底改变了开源软件的筹资方式,但并非一切从一开始就运作顺利。事实上,2016-2018 年间的 ICO 经常是十分糟糕的机制,允许创始人在交付任何产品之前就套现。自那以来我们吸取了很多教训,今天的项目在启动代币并分配给用户以激励使用和去中心化治理之前,都具备一个可用的产品。

NFT 证明是加密货币另一个明显的产品市场契合,但它们也经历着自身的成长痛楚。每个 NFT 的生命始于 NFT 启动(有时也称为铸造或下降)。NFT 启动是新系列首次创建、销售并分发给买家的地方,买家然后决定是持有还是在二级市场上交易。

就像任何首次销售的商品一样,NFT 启动面临着为从未定价的东西定价的挑战。但是与大多数其他销售不同的是,NFT 启动还面临在充满对抗环境(公开区块链)中进行的额外困难。这使得开发者必须设计有效且具有抗剥削性的机制。

本文首先用现实世界的例子来说明那些实际上伤害了用户的启动,从而识别良好启动应满足的目标。接下来,我们将启动的概念拆解为各个步骤,探索每一步的设计空间。最后,我们提供一个参考实现,我们认为这是一个设计良好的启动机制,以供社区使用和构建。

用户伤害的示例

随着时间的推移,我们发现 NFT 启动中的某些设计模式始终导致用户的不良结果。

可利用的公平性

当一个新系列推出时,用户可以通过其智能合约与之互动,随机铸造带有随机属性的 NFT。这些属性通常具有不同的稀缺性,使某些组合比其他组合更罕见、更有价值。例如,只有九个 10,000 个 CryptoPunks 拥有超稀有的“外星人”属性,目前最便宜的一个标价为 35,000 ETH。

尽管不同的人以不同的原因参与铸造,但许多人享受不知道自己将获得什么物品和稀有性的兴奋。从这个意义上说,NFT 铸造只是模拟(例如,交易卡游戏的扩展包)和数字(例如,视频游戏中的战利品箱/箱子)经济中流行的 加粗 gacha 机制的延续。

参与 gacha 游戏的人往往有一个重要的假设:他们从随机分布的物品中抽取,并有实际(尽管很小)机会获得非常稀有的掉落。不幸的是,过去的 NFT 铸造经常未能满足这一假设,造成真正的随机性。在实践中,这使得高度技术和动机充分的一方可以利用铸造并迅速获取一个系列中最稀有的物品,将其从诚实的参与者那里夺取。

采用这种模式,我们分享两个在 NFT 铸造中以这种方式被利用的案例。两个漏洞都依赖相同的两步过程:

  1. 利用者提取系列的元数据,使他们能够按单个稀有度分数表示所有特征的相对频率。利用该分数,他们可以确定系列中最高价值的 NFT。
  2. 利用者然后破坏铸造合约的随机性,只铸造他们想要的稀有、高价值 NFT。

Loot 衍生品与链上元数据利用

最近,一个名为 加粗 Loot 的项目在 NFT 世界中风靡一时。这个看似简单的项目共有 8,000 个由 加粗 chest、加粗 foot、加粗 hand、加粗 head、加粗 neck、加粗 ring、加粗 waist 和 加粗 weapon 等不同稀有度的物品组成的战利品包。

所有物品槽的属性都直接存储在合约中,铸造者接收到一个伪随机包,以包 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

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

以下:红线表示 Anish 在 Twitter 上 公开 了他的稀有度评分,开始抢占可用稀有包的竞赛。

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

此外,由于 More Loot 的供应在膨胀,因此可以合理地预期剥削者会在未来对可用包进行预打分并争先铸造。

Extension Loot

与 More Loot 类似,Extension Loot 由单个地址铸造其中五个最稀有的十个包(所有突出的铸造用红色标记)。独特的是,这些铸造在近乎公开的情况下隐藏,因为剥削者会随着时间和可用包进行分配,然后顺序瞄准稀有包。

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

Meebits 与链下元数据利用

Meebits 是 Larva Labs 创建的 20,000 个独特 3D 角色的高度期待的 NFT 铸造。

Larva Labs 知道精明的用户可以利用一个系列的元数据来计算稀有度并快速获取稀有 NFTs。为了对抗这一点,他们设计了他们的网站,使买家能够在每个 Meebit 被铸造后查看完整的元数据。

虽然网站明确隐藏了未铸造的 Meebits,但有人检查了源代码,发现 Larva Labs 从 IPFS 中提取了元数据。利用这一信息,他们通过提取未铸造的 Meebits 的元数据,即使如此也识别出最理想的 Meebit。

然而,Larvalabs 对于剥削者依然并不简单:与 Loot 不同,用户不能铸造特定的 Meebit ID。相反,链上随机性作为哈希(理论上仍然可以被矿工利用)使得这个特定用户更难以铸造稀有 Meebit。

然而,剥削者知道如何充分利用不利局面。他们 编写了一个合约 来购买 Meebits,查看其 ID,然后“重铸”它们。具体来说,Meebit 合约是一个具有 mint() 函数的 ERC721,该函数返回一个随机 Meebit ID。剥削者的合约会调用 mint,检查返回的 Meebit ID 是否与稀有度列表匹配,如果没有超过某个稀有度分数,则撤回交易( 示例代码)。通过这种技巧,他们每检查一次 ID 只需支付约 0.03 ETH,而不是直接购买每个 Meebit 的 ~2.5 ETH。

尽管攻击者在这一过程中消耗了许多失败的交易及相应的Gas费用,但他们仍获得了大约 400 ETH 的利润。如今,同样的剥削者可以通过 Flashbots 发送他们的交易,并仅在获得所需 ID 时才向矿工支付——使撤销完全免费。

攻击者铸造并出售了 Meebit #16647,该 Meebit 拥有超稀有的“访客”特性。

Gas拍卖

在九月,以太坊的基础Gas费在七个独特的时期超过了 1,250 gwei。令人震惊的是,这七次事件的发生都是因为备受期待的 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,中位数参与者每个 NFT 支付了约 1.49 ETH,而最高 5% 的个人仅在铸造合约中支付了 2.44+ ETH 的Gas费。

The Sevens 铸造期间区块基础费用的快速上升

Gas拍卖的问题不仅在于它们更难使用,还在于通过这种方式“滥用”公共内存池会对所有以太坊用户造成负外部性。它们还迫使用户为同一 NFT 支付不同的金额,导致成千上万次交易因出价不足而失败,给用户造成伤害。

高技能

正如我们之前所见, 以太坊是一个黑暗森林,高级对抗性行为者始终在寻找机会。NFT 铸造,特别是那些买家期望在铸造后在二级市场中获利的稀有铸造,为技术精湛的一方提供了丰厚的机会,以超越平均参与者。

这些参与者直接通过机器和自动化策略与铸造合约互动,通常绕过前端,有时甚至绕过内存池。

TIMEPieces NFT 发布展示了这一行为的典型例子。高级机器人操作员 检查了 nft.time.com 前端源代码,在铸造过程中找到了已部署的铸造合约,并提前几小时建立了机器人。因此,这些机器在铸造中具有重大优势,而该铸造在三分钟内就售罄。等到普通参与者连接他们的钱包并提交交易时,一切已为时已晚。

此外,一些参与者 使用 Flashbots 绕过内存池并直接向矿工提交交易。虽然 TIMEPieces 合约限制参与者每个地址铸造最多十个 NFT,但机器人操作员 0x35...ce5 计划提前,分散资金于五个钱包中,并通过单个 Flashbots 打包快速获取了 50 个 NFT。即便支付了 20 ETH 的矿工小费(使他们的平均铸造成本达到每个 NFT 0.5 ETH),该机器人操作员在 NFT 开始在二级市场推出时仍然有近 120 ETH 的潜在利润。

该打包包含来自不同地址的 5 笔铸造交易,绕过了每个地址的铸造限制

此外,由于这一参与者使用了 Flashbots (取消失败交易的成本为零),因此他们未受到我们在前述示例中描述的失败交易的影响。这不同于接近 10,962 名平均技能参与者,他们共计损失了 252.62 ETH(近 800,000 美元)的交易费用,在 100 个区块中进行的 12,743 次撤回尝试中。

Gas低效

一个有效的 NFT 铸造机制对所有参与者来说易于使用——理想情况下步骤少且实施简便。许多使用替代 FCFS 分布模型的铸造常见陷阱在于引入复杂性,增加用户需要进行的链上交易数量。

一个例子是 Jay Pegs Auto Mart 的 $DONA 拍卖,该拍卖在 Miso 平台上进行。尽管该铸造创新了批量拍卖 NFT 分配的机制,并有效展示了公正元数据生成在实践中的表现,但却以牺牲Gas和交易效率为代价。

要参与铸造过程,用户必须在八天内进行至少四次链上交易:

  1. 首先,用户在不知道将获得多少 $DONA 代币(取决于最终清算价格)的情况下,向 Miso 批量拍卖承诺 ETH。
  2. 拍卖结束后,用户必须认领他们的 $DONA 代币。
  3. 在这一点上,所有用户要么拥有太少的代币以铸造 NFT,要么刚好足够,要么拥有太多。根据参加的 1,363 个铸造者,我们发现 273 人太少,0 人刚好,以及 1,090 人太多(超额部分)。
    1. 拥有过少代币的用户需要进行交易从 Sushiswap 获得必要的盈余。
    2. 拥有过多代币的用户可以选择批准 $DONA 代币进行交易,然后通过 Sushiswap 做掉他们的盈余。
  4. 当用户有足够的 $DONA 来铸造 NFT 时,他们可以批准 NFT 合约消费他们的 $DONA,然后烧掉 $DONA 来铸造 NFT。
  5. 最后,元数据将按批次分配给 NFT,且无法单方面揭示自己 NFT 的信息。

虽然该机制努力追求公正,但却使用户的参与变得困难且Gas低效。

独占铸造

NFT 收藏家和爱好者评估一个系列的价值的一种方式是根据其社区的强度。这通常涉及评估持有者之间的代币集中度。理想的系列倾向于有较低的集中度,更倾向于让普通参与者拥有,而不是被大型鲸鱼控股。

不过,在最近的铸造中,开始出现一种新趋势,即引入批量铸造,参与者可以在一次交易中铸造多个代币。通过这种机制,鲸鱼铸造者因较少的Gas开销而被激励铸造多个 NFT。

这一机制的一个例子是 Stoner Cats 发布,这是一个旨在支持米拉·库尼斯及其朋友制作动画短片的可收藏 NFT,允许一次至多铸造 20 个 NFT。考虑到这一功能,89% 的 NFT 都通过批量铸造功能铸造,而近 31% 的 Stoner Cats 以最多 20 个 NFT 的批次铸造。

此外,所有以固定价格销售的 NFT 隐含性地阻止个人以低于清算价格的方式参与。这减少了分配的公平性,使得持有大钱包的人占有优势,尤其考虑到铸造的高成本。

可信操作员

无论是通过集中抽签防止Gas战争,还是通过 Chainlink 提高公平性,常见的权衡是引入第三方的信任假设。一个 NFT 铸造需要依赖的链下基础设施越多,用户必须信赖中心化链下实体的程度就越高。

良好启动的目标

通过观察这些启动并分析人们在实践中遇到的问题,我们现在可以推导出我们认为的 NFT 启动的六个理想属性。我们的列表并不打算完整,但确实是一个开始。

无法利用的公平性: 启动 必须 具备真正的随机性,以确保掠夺性用户不能以牺牲未成熟用户的方式获取最稀有的物品。

无竞速条件: 每当 NFT(或任何商品,实际上)以低于其公平市场价格的方式进行销售时,就会变成维塔利克·布特林所称的 其他手段拍卖。实际上,买家竞争以便使他们的交易尽快被矿工确认,或附加大额贿赂以激励矿工。任何其他手段拍卖都会偏向具有深入知识的区块链参与者,并能使用诸如机器人、Flashbots 或 Eden 等强力工具,甚至可直接与矿工接触。

时区无关: 通常,FCFS 启动在特定块高度上宣布,然后在短时间内售空。无论选择哪个块高度,都会对处于其他时区的人造成不利,造成他们在睡觉或工作时错过机会。 因此,启动不应过短,以便人们可以参与,而不必改变日常生活。

Gas效率: 在链上交易(特别是在以太坊上)是昂贵的,因此一个好的启动应当努力最小化用户需要进行的交易数量。

包容性和 Sybil 阻抗性: 通常,NFT 创建者最好确保发售对多样化持有者开放,即便这导致市场初步低价清算。因为生机勃勃的社区最终驱动了二级市场中该系列的价值。

无信任: 当然,所有这些意味着启动机制应努力保留底层区块链的特性。这意味着它必须在 变成托管或要求过多对操作员的信任假设的情况下,提供上述利益。

模糊性不能作为糟糕设计的借口

大多数启动在理论上都存在一个或多个上述问题,但在实践中,这些问题没有出现的需求不足。这是一个以 安全性为模糊性 的例子。

例如,如果一个新系列被认为市场价值很低,可能不会出现导致内存池中竞价战的竞速条件,也没有动力让掠夺性用户利用它。同样,如果一个新系列的需求过于旺盛,那么可能会迅速售罄,以至于没有时间编写自定义软件进行利用。

尽管来自于需求过少或过多的安全性确实存在,但我们认为应该始终设计其启动机制,以确保其在所有市场条件下都具有抗风险性,尤其是不要依赖于系列迅速售罄作为保护其免受利用的手段。

拆解 NFT 启动

虽然我们现在清楚 我们想要什么 的良好启动,但我们仍然不清楚 如何实现。我们可以慢慢揭示这一过程(或者,正如我们所见,有许多路径)通过拆解实际发生的过程。

每个 NFT 启动本质上由四个步骤构成:

  1. 竞标: 销售开始,用户提交出价给操作员(可以是智能合约)。
  2. 清算: 操作员将收集到的出价与剩余供应匹配,决定清算价格,并选择获胜出价。
  3. 分发: 获胜者可以认领他们新铸造的 NFT(或从操作员处获得)。
  4. 元数据揭示: 操作员揭示 NFT 的属性。

以 Loot 为例。Loot 在区块 13,108,877 上进行了固定价格的 FCFS 销售。该系列的创作者 加粗 dom 在智能合约中将销售价格设定为零,但用户仍需用Gas出价。每个区块,矿工会将新出价与剩余供应进行匹配,以决定谁获胜,谁失败。成功的出价将使用户在同一交易中获得该物品。

大多数用户在收到物品后才了解到其属性。然而,实际上,一个熟练的用户可以在铸造前从智能合约中读取其物品的属性,从而使他们能够迅速获取该系列中的稀有物品。这表明,无论其他步骤是顺序进行还是连续进行,元数据 必须 在物品被购买且确凿结算后方能揭示。

接下来,我们将探讨 NFT 开发者在这四个步骤中所拥有的选择。我们将讨论每个选项对期望效果的影响,过滤出好的设计选择与坏的选择。

阶段 1:竞标

在这一阶段,操作员从用户那里收集出价(即购买请求)。

持续与顺序清算

在其他事情发生之前,操作员必须决定他们是否想让竞标和清算在同一阶段或两个不重叠的阶段中进行。

任何 FCFS 固定价格销售(到目前为止大多数 NFT 启动都是),是持续清算的一个例子。每个区块,矿工查看出价并将其与剩余供应进行清算。这个机制存在几个问题:如果操作员高估了 NFT 的清算价格,物品则定价过高可能无法售出;如果操作员低估清算价格,物品则定价过低,用户则以速度(谁获得了对区块空间的最直接访问)或Gas价格(谁能支付给矿工更高的费用)进行竞争。正如讨论的,这将导致大量未成功交易导致的损失,并极大地偏向更为熟练的参与者。如果必须如此,前者还可以通过将所有用户交易路由至 Flashbots RPC 来缓解,并让拍卖在没有失败交易成本的环境中进行。

选择第二个选项,竞标与清算将在两个不重叠的阶段中进行。在实践中,操作员会首先收集所有出价,然后将其与可用供应进行匹配,以公平的价格清算市场。这种方法包含了批量拍卖或抽奖机制。这种方法的一个例子是 Jay Pegs Auto Mart,用户在清算市场前有一周的时间提交出价。

顺序方法具有几个与我们目标一致的好处:

  1. 无竞速条件:用户有充足时间提交其出价,结果由用户愿意支付的价格决定,而不是通过其速度或技巧。
  2. 无时区干扰:此方式尊重那些在其他时区工作或生活的人的参与。

此外,因不存在Gas拍卖,因此其他网络用户没有负面外部性。

然而,这种方法也有缺点,如需要额外的链上交易(依拍卖设计而异)或减少参与者的乐趣,因为他们现在必须等待更长时间。我们建议不要让竞标周期过长以减轻后者的担忧,大概不再超过 48 小时。

链上与链下竞标

在决定了是持续还是顺序清算后,下一个选择是用户是在链上还是链下提交出价。

正如我们将看到的,今天的启动通常在链上收集出价,因为这样最简单,从而有效地让矿工清算获胜的出价,使其余出价失败。如果我们假设网络本身是无审查的,那么确保没有有效出价会在销售中被遗漏的保证也相当强大。

但是,也可以在链下收集出价。在此过程中,用户使用他们的私钥签署一个信息,该信息包含他们的链上地址、希望购买的代币或票证数量、他们的最高价格等。然后,他们将此消息发送给操作员,而不在链上执行,使用他们的签名来证明有效性。

操作员然后可以使用这些出价按链下的方式清算市场,或者将获胜出价打包提交给合约进行链上执行。不论哪种选择,操作员都需要信任以确保正确的出价执行。

这最后一种方法结合了链下出价收集与链上获胜者选择的鲁棒性、Gas效率和灵活性。用户唯一需要信任的就是操作员不会在链上提交出价时遗漏任何出价——这是一个相对微弱的假设。

谁允许竞标

第三个决策是允许谁竞标,以及出价多少。如在 包容性和 Sybil 阻抗性 的目标中讨论的,项目可能希望确保一个多样化的用户集合购买他们的物品。为此,他们可能会限制具有特定特征的用户可以购买的物品数量,或者专门为现有 NFT 社区的持有者保留物品。

当竞标在链下进行时,类似 KYC 的规则也很容易实现——你只需要求用户在允许他们提交签名之前提供某些信息证明。当在链上进行 KYC 时,情况则更为复杂,但一些像 Gitcoin 的隐私保护的 身份证明 这样的倡议正在取得进展。

即使一个项目不希望进行任何形式的 KYC,他们仍然可以采取措施来确保一美元获得的代币数量在大用户和小用户之间相同。当合约允许用户在同一交易中购买或认领多个 NFT 时,通常会违反这一原则,因为鲸鱼能够跨越更多代币分摊Gas费用,从而比小用户每代币支付更少的金额。为了缓解这个问题,通常给每个地址或每笔交易限额是个不错的选择。

竞标成本

此外,操作员必须决定用户何时需要为代币支付——与出价一起支付,还是在市场清算后?

在后者情况下,用户仅在竞标阶段“保留”代币,市场清算后,他们可以在特定时间窗口内完成购买。一个采用此方法的项目,结合链下竞标,是 Parallel。虽然在市场较为安静的时候这一方法运作良好,但当需求非常高时,这一模式可能会演變为一种竞速条件,用户想要花费代币以保留尽可能多的代币,因为这并无任何费用。

为了缓解竞速条件的问题,出价本身应该与成本相关。这里的最佳解决方案是让用户只有在锁定资金与同一地址的智能合约后才能提交出价。之后,操作员可以决定是否在出价失败时退还资金(类似于交易所的限价单)或保留出价(类似未支付的抽奖票)。

竞标粒度

最后,必须决定希望用户表达出价的颗粒度。在存在输掉出价的情况下(因为需求超过供应),还必须决定什么算是赢家和输家。这里有三种可行的选择:

“愚笨”批次拍卖: 人们款待一笔 ETH,而没有进一步指示。在清算阶段,收集到的物品数量与总承诺 ETH 金额进行划分,每个人都收取以 ERC-20 形式的分数代币,稍后可兑换为 ERC-721 NFT。Jay Pegs Auto Mart 使用了这一方法,具有没有失败出价的好处。然而,它的缺点在于需要额外的三层链上交易——两层是出售或购买代币以达到一定的数量(例如获取一个“完整”的 ERC-20)和一层用于兑换 NFT。最重要的是,这一方法不允许买家根据他们想要的特定数量代币的价格来出价——这是几乎每个市场都能期待的功能。

“智能”批次拍卖: 一种相似但可以说更好的方法是 SpankChain 在其 ICO 时早些年使用的. 与 Jay Peg 不同,SpankChain 收集出价,允许具体阐明代币数量及每个代币的价格。拍卖阶段结束后,他们在链下计算执行价格,并将其与获胜出标一起提交到智能合约,允许获胜者退出 SPANK,未能获胜者退出其 ETH。该方法的缺点在于匹配所有出价的计算复杂度非常高,不能在链上执行,因此需要对操作员的信任。

抽奖: 最后,可以以抽奖的方式进行,其中用户通过购买抽奖票或预留权出价。赢家将从所有票的池中随机选择。通过这种方式,用户要么获得完整的代币,要么一无所得,节省了 Jay Peg 的 $DONA 需要的三笔额外交易。这也包括了无法负担完整 NFT 的小钱包用户。然而,这会将随机性引入销售中,对于某些用户来说显然是一个优点,而对于其他用户而言则可能不是。

阶段 2:清算

在此阶段,操作员(或代表他们的人)将出价与可用供应进行匹配,决定谁可以购买物品,谁不能。

链上与链下清算

最后一个主要交叉口是选择谁从所有出价中挑选赢家。在 FCFS 模型中,由矿工进行清算,这种方式从多个方面来看都存在问题。

在 Jay Peg 的清算机制中,计算复杂度刚好足够,能够无需信任的完全在链上进行。

在 SpankChain 的模型中,赢家完全在链下挑选。虽然出价者无法超出期望价格报价(智能合约确保这一点),但他们依然需要信任操作员,不会把他们推向最大支出价格,类似于去中心化交易所上的三明治攻击。

抽奖方案是最容易清算的,因为所有你需要的只是一个随机数(例如,来自 Chainlink VRF)。然而,随机性要求也引入了另一种信任假设:产生这种随机性的任何人可能会对自己的出价有利,而无法对其他出价一样。这与赢家出价仅为最高出价的情况是不同的。

阶段 3:分发

清算后,操作员必须铸造代币,将其送到用户手中,以及如合同如此规定的退还任何失败出价。这一步通常全部关于Gas效率和防止竞速条件。

立即与间隔结算

如果操作员希望防止用户同时认领,从而导致Gas费用飙升,他们可以重用来自清算过程的随机性,以便人们分批认领。这解决了一种集体行动问题,因为用户最好不要同时认领。仍然,想要了解他们的元数据以及在二级市场上首次出售的好奇心可能仍会创造出迅速竞争的情况。话虽如此,间隔结算也会增加用户的等待时间。

认领与接受代币

分发时提到的唯一其他问题是用户是否必须自行认领代币,还是操作员可以随时间将其发送给他们。后者是间隔结算的变体,但还有一个附加的优点,即用户无需执行任何操作。前面提到的 Parallel 发布就是使用这一方法,用户在最初支付 NFT 时仅需添加“交付费”。

阶段 4:元数据揭示

最后,一旦代币分发后,可以揭示其元数据。在 NFT 启动的四个阶段中,这一步 必须 放在最后。它的过程也不能是共享的最后一步(例如,将支付、分发和揭示合并到同一交易中,如 Meebit 所做),因为通过重新铸造具有糟糕属性的项目,便可以通过撤销交易进行进一步的剥削。在支付与揭示之间必须至少间隔一块区块,才能使重新铸造成为不可能,尽管你还可以选择增加该间隔以保护重组。

何时揭示元数据

现在我们已明确了铸造 NFT 与揭示元数据不能在同一交易中进行,接下来就要提出何时揭示元数据的问题。这不仅对公平性重要,用户体验和Gas效率也发挥着作用。一般来说有三种选择:

全系列揭示: 在全系列揭示中,操作员在所有 NFT 被铸造完成后,才揭示元数据。这种方法高度Gas高效,仅需生成一个随机数,再将其用于打乱票据 ID 元数据,且用户无需再进行其他操作。

然而,这也有显著的缺点。 用户必须等待所有 NFT铸造完成才能查看其代币元数据。如果规定了揭示元数据的上限,例如 24 小时,则有些用户可能仍然无法及时铸造,从而导致系列没有售罄。

按 NFT 揭示: 为了改善全系列揭示的用户体验,操作员也可以允许用户按 NFT 向其揭露任意性。这更具吸引力,因为用户可以在购买后不久“打开”他们的物品。这也允许“未开启”物品在二级市场上交易(如卡牌游戏 MTG 中十分流行)。

尽管如此,这种方法需要求用户执行额外的链上交易,例如调用 Chainlink VRF 并将随机数应用于他们的 NFT。即使对于不急于揭示或对交易未开启物品不感兴趣的用户,这也是不可避免的。

批量揭示: 作为一种潜在的折中,我们提出了批量揭示的概念。在此方法中,用户拥有无限制的时间铸造,但若愿意也可以在下一个区块中揭示他们的物品。每当请求新的随机数时,自动揭示所有正在铸造与待分配物品的元数据,几乎以相同的、恒定的成本来实现。

因此,高时间偏好的用户有选择支付额外链上交易以揭示元数据的灵活性,而这也有利于在他们之前的所有用户。如果没有用户选择揭示,操作员也可以根据某个时间表进行此操作,例如每个小时一次。#### 随机性的来源

在决定何时揭示之后,剩下的问题是从哪里获取随机性。我们建议的两个选项是使用 Chainlink VRF 或 commit-reveal 方案

使用前者,你可以按需访问链上可验证的随机来源。使用任何揭示机制,你可以调用 Chainlink 请求随机性,一旦满足,就可以将随机生成的数字用作元数据计算的输入。这将确保每个 NFT 的随机化。

使用后者,操作员可以在销售之前创建一个随机数(用于完全揭示)或多个随机数(用于每个 NFT 或批量揭示),并预先承诺其哈希。一旦 NFT 已被铸造,操作员可以揭示这些数字,任何人都可以通过哈希验证其真实性。尽管如此,这种方法仍然需要对操作员的信任,以确保他们不会利用对随机数的特权洞察来铸造最佳的 NFT。为了减少对信任的需求,我们建议在铸造顺序中仍然进行一些独立的随机化。

此外,对于链下元数据,操作员可以选择承诺完整元数据的哈希(所有 NFT 的属性 ID 对)。这确保元数据在铸造过程中是预先确定的,并且未被改变。尽管如此,仍需在铸造顺序中进行独立的随机化,以防止操作员利用其对顺序和属性的知识。

我们的参考实现

我们提供了一个 参考实现,我们认为它在所有属性之间取得了良好的平衡,并且易于理解和调节。

竞标:在我们的实现中,用户可以通过购买抽奖票来进行竞标。抽奖的持续时间由操作员决定(我们建议 24-48 小时)。每张票的价格包括Gas费以及操作员指定的每个 NFT 的价格。后者充当“保证金”,在市场清算后退还给所有未中标的票。通过三种方式实现 Sybil 抵抗:每次交易的Gas费、锁定资金的资本成本以及每个地址的最大票数。

清算:一旦竞标期结束,必须从所有票池中抽取一个等于可用 NFT 数量的获胜者。首先,任何人都可以调用 collectEntropy() 从 Chainlink VRF 获取一个随机数。这个随机性被用于 'shuffleEntries()',该函数实现了 Fisher-Yates 洗牌。任何人都可以调用此函数,确保活跃性,并使Gas费用可以社会化(例如,由鲸鱼来支付)。

分配:所有获胜者抽取之后,用户可以在无限期内从他们的获胜票中索取 NFT,并在他们的未中标票上获得退款。这两者都在同一交易中完成。操作员现在可以开始提取获胜票的收益。

元数据揭示:用户在索取后可以在一个区块后揭示他们的 NFT 元数据。任何人都可以请求一个新的随机数,该随机数会自动揭示所有已铸造且待分配的项目的元数据。这允许那些时间偏好较高的用户支付以立即揭示,但惠及所有用户。

结论

在本文中,我们给出了现实世界的例子,表明设计不良的 NFT 启动会导致用户的次优结果。但是,当我们清晰定义目标并花时间拆解启动真正需要的步骤时,许多设计变得可能——几乎所有设计都比我们今天习惯的固定价格、先到先得、造成网络拥堵的销售要好。

如果你从本文中只记住一件事,请记住这三条规则:

  • 不可利用的公平性是具有随机元数据的 NFT 启动最重要的属性。 使用强大的随机性,永远不要在 NFT 被购买和结算之前揭示其元数据。
  • 竞争条件会伤害用户,无论是参加铸造的用户还是不参与的用户。 使用顺序竞标和清算(例如,一场抽奖或批量拍卖)来解决这个问题。
  • 从第一分钟开始考虑成本效率。 问问是否当前在链上发生的任何步骤也可以在链下进行,以为你的用户节省费用。链下步骤可以包括竞标,但也可以包括市场清算,前提是用户能对操作员建立一定程度的信任。考虑在揭示阶段进行批量处理。

我们希望看到 NFT 开发者开始尝试这些想法,从而在实践中带来不同种类的启动。最后,我们想对那些与 NFT 社区分享建议,帮助改善启动质量的人们表示感谢:

  • Vitalik——他的固定价格先到先得销售问题解释
  • FairDrop——分享他们的公平抽奖概念验证设计
  • dotta——关于构建强大前端的建议
  • Jay Pegs Auto MartSpankChain——演示新颖的拍卖方法
  • Parallel——展示链下抽奖的最佳实践
  • 0xmons——关于设计公平启动的建议和工具

我们是否遗漏了其他好的主题、概念或启动?请通过 Twitter 联系我们 @hasufl@_anishagnihotri,以便我们能够共同提升这个资源。

致谢:Robert Miller (Flashbots), Dom Hofmann

  • 原文链接: paradigm.xyz/2021/10/a-g...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Paradigm
Paradigm
Paradigm 是一家研究驱动型技术投资公司 https://www.paradigm.xyz/