# 如何设计一个公平的链下开盒系统

By [CamelMan-骆驼哥](https://paragraph.com/@camelman) · 2023-05-22

---

### 1\. 盲盒不能盲开

NFT项目中，开盲盒是非常关键的一个步骤，这一步决定了我们每个人手中的NFT的稀缺性。一段时间以来，我观察了n多NFT项目，开盒的权限，大多数简单粗暴的交给了项目方，许多优秀的项目方，采用了直播或者录屏的方式进行开图，没品的项目方往往还暗箱操作，把稀有NFT占为己有。

其实，无论是直播开盒，还是项目方代为操作，这种集中化的操作都给项目方留下了太多的作弊空间。因为项目方不能提前公布图片，事后却无法提供第三方或分布式的验证。

业界开盒大体分为两个思路，一个是一次性链下开盒，另一个是一边mint一边开盒的链上开盒，这两种方案都可以从游戏规则上堵住项目方作弊的可能，增加透明度，公平性和去中心化，做一个公平的盲盒开盒系统。

受[湾区茶馆Mesh Beatles社区](https://twitter.com/awsbclub_cn)委托，本文仅讲述了如何设计这套链下开盲盒的算法，如有问题和建议，欢迎各界朋友和同行到[本CXO twitter](https://twitter.com/jameslidx)下留言交流

### 2\. 一次性链下开盒的整体思路

一次性链下开盒需要解决如下几个关键点

*   图片文件不可以篡改，并且编号不可以随便编，但是图片本身还是要保密的
    
*   抽奖种子必须是随机产生的，并且要足够随机
    
*   抽奖算法必须是公开的
    
*   整个过程是所有人都可以验证的，抽奖过程直播不直播无所为，任何人都可以抽奖，任何人都可以验证，
    

### 3\. 实现思路说明

3.1 保证图像文件不可以篡改

保证图像文件的不可以篡改，可以通过计算文件的sha256算法来保证，即使整个图片多了一个像素，文件的hash也会大不相同。如下图所示，文件的编号和图片可以忽略不计。

对所有文件进行hash之后，对hash进行排序，并对文件hash的进行最终的hash汇总，计算出文件合集的hash root.

这个过程中，项目方无须向社区公布图片，只需要提前公布给社区一个hash root就可以。这一个hash root就能保证整个合集不可以被修改，编号是固定的，而且不需要公布图片。项目开盒以后，任何人都可以重新下载图片，然后按照上面的算法验证文件是不是项目方是否使用了公布的图片文件。

![保证图片文件不可以篡改](https://storage.googleapis.com/papyrus_images/aa0cf3a31d7bebd233b6684c93d4160837f4a19680be23d8638f84a4a73d21d7.png)

保证图片文件不可以篡改

3.2 种子必须要有足够的随机性

所有抽奖程序的核心是随机种子，除非使用专门硬件设备，否则种子都是伪随机的。为了保证有足够的伪造成本，可以采用为了一段时间的BTC某一个出块hash作为随机种子。对于一般的项目来说，能为了抽奖结果，花巨资影响BTC出块的概率很小。但是如果你的项目就是非常有价值，也可以采用连续10个块的hash作为种子，能连续出保证自己出10个块的费用，绝对不止100亿美金，因为一般交易所充币和大额转账，也就6个区块。

BTC出块的hash, 很多BTC浏览器都能找到，[blockstream](https://blockstream.info/)就是其中的一个。

![随机种子是关键](https://storage.googleapis.com/papyrus_images/9dafdc9cb623b72bb4a3c67b31442b582fa674dd33f354d6b80fa337206ee605.png)

随机种子是关键

3.3 抽奖的程序必须是可验证的

抽奖程序最好是开源的，并且文件必须是可以验证的。开奖之前，程序一定要定型，并且对程序进行sha256验证，把hash结果公布出去，这样所有人验证的时候，保证使用的是绝对一样的文件。

![Open Source](https://storage.googleapis.com/papyrus_images/5dfb6024b06aadfc4c063090974a29a1e10c7bb6bb12ae4bc9982d23b8b424ee.png)

Open Source

3.4 抽奖结果和抽奖过程

只有上面的3点作对，已经全面封堵了任何人作弊的可能。所有人都用一样的程序，采用一样的随机种子，运行中通用的数据之上，所有人的结果必然是只有一个。

至于抽奖过程，是否有人当场验证，是不是直播，都没有关系。但是从运营的角度来说，直播可能更容易烘托气氛。

### 4\. 潜在的问题

虽然上面的过程能消除项目方作弊，但是NFT开盒永远要考虑的第二个大玩家就是科学家和脚本先生。

如果数据已经公布出来(例如我们社区现在的项目，图已经全部铭刻到Ordinals上面了), BTC hash所有人都会第一时间知道。

如果抽奖程序在抽奖之前开源，科学家必然会第一时间知道那些挂单是稀有NFT, 第一时间用脚本扫掉。如果抽奖程序周会开源，又给项目方内部人员扫地板提供了可能。

这是一个两难的问题，我思来想去找不到好的策略，只能提醒开奖之前挂单的朋友，是有稀有品种在开盒瞬间被秒的风险。

### 5 结束语

这个算法，算是抛砖引玉吧，实际运营中可以根据这个思路灵活改变。希望能和更多的项目一道，在公平公开公证的思路一下，也欢迎大家对文中的观点，多多指教，到在下[twitter](https://twitter.com/jameslidx)下留言讨论。后面的算法和数据，我们也会开源出来，能给整个NFT和Ordinals做一点点能做的事情。

总得说来，NFT项目，社区共识是重中之重，甚至比画像是不是好看，智能合约写得牛逼，对社区来说都重要。

玩NFT, 我们是认真的！

---

*Originally published on [CamelMan-骆驼哥](https://paragraph.com/@camelman/ZIiNmDJZcXW3b4MITbqI)*
