# 上帝在Web3掷骰子吗?

By [sallygu.eth](https://paragraph.com/@sallygu) · 2022-05-15

---

> **“We are all fooled by randomness” —— Nicholas Taleb**

随机 & 命运
=======

如果现在有一群极其富有但极其无聊的的比特币巨鲸，决定每年共同拿出1000个比特币举办一次俄罗斯转盘。他们会准备一把左轮手枪，在可装6发子弹的弹夹中只装入一颗子弹，然后对准你的脑袋扣动扳机。

每次扣动扳机所产生的结果可以视为一种平行宇宙。由此在这个单一事件下，总共有对应着6种不同结局的平行宇宙，每种平行宇宙产生的概率相同。

这其中的5个平行宇宙会使你一夜暴富，甚至荣登《Forbes》封面。而剩下的唯一一个平行宇宙则会让你死相难看，贻笑大方。

\*\*那么你愿意参与这个赌局吗？\*\*愿意参与一届？两届？还是每年都来碰碰运气？

玩这个游戏需要勇气，当然也需要动一些脑筋。83%是一个很高的胜率，确定性达到83%的事情在生活中也并不多见。但如果有些贪婪的傻瓜选择一直玩下去，那20年后他们中的绝大多数应该都可以在报纸的讣闻一栏找到。

在这个假设的俄罗斯转盘游戏里，规则制定得非常清楚，赔率可以计算，风险也可以衡量，所有条件信息都已提前披露。但在现实世界中，我们往往面临的都是非对称信息的动态博弈(Asymmetric Information Game Theory)。

**左右我们命运的并不是一把左轮手枪，或是一副扑克牌。我们不知道有多少弹夹中有多少枚子弹，也不知道这副牌有多少花色。在无限多重平行宇宙和无穷大的风险条件下，我们的命运不可预知。**

而这正昭示着我们生活在一个充满随机的世界中。

如费曼所言，自然界允许我们计算的只是概率。一旦我们具备了计算“概率振幅”的超能力，我们就可以成为先知，预测甚至改变未来。换句话说，**谁掌握了随机性，谁就拿到了命运的骰子，成为了上帝。**

![](https://storage.googleapis.com/papyrus_images/84576b55712514e0eaa5f91f45439662215757cd54dd4633ccdd33ef61212be9.png)

随机 & 安全
=======

将这种思维平移至加密世界中，生成随机数的机器就可以被视为是传达上帝神谕的使者。也正是因为扮演着这样的角色，预言机(oracle)才由此得名。[过去的文章中](https://mp.weixin.qq.com/s?__biz=MzUzNjk5MzI5Nw==&mid=2247489604&idx=1&sn=8f4f50f6ba9a2629d6ccb6dd52c1e7a0&chksm=faec933acd9b1a2c789c096095a9d635a7d5176b97b82005293b9633b98c8dd2434c82cb5c92#rd)，我们已经指出**由于区块链系统的透明性，其链上生成的一切算法、输入、输出都会被暴露给系统参与者。因此在链上直接生成的随机序列实际是可以被预测的。**

一些典型的链上随机数生成方法，比如未来区块哈希，都存在很大的作弊空间和安全漏洞。举一个简单的例子，如果矿工在玩一个博彩游戏，这个游戏的中奖金额是10ETH，而区块奖励的金额却只有3ETH，那么矿工当然有明显动机去作弊。他可以通过丢弃和不发布区块来影响随机序列的生成(Block Withholding Attacks)，从而为自己赢得在游戏中优势。这相当于是**你和矿工打同样一局扑克，但人家可以换底牌。**

而如果将这种可以被篡改和预测的伪随机序列应用到web3各个场景中，我们不难想象其背后的巨大安全风险和不公平性：**一旦黑客或攻击者找到随机算法，并测算出了随机序列的初始输入值，那么无论是NFT的空投发放，GameFi中的极品装备爆出，还是用户个人钱包的私钥地址生成，都有可能被操纵和篡改。**

那究竟怎样的随机数才是真正可信和安全的呢？

这里我们就需要先对随机数的分类做一个简单了解。

![](https://storage.googleapis.com/papyrus_images/c5ead4fe3f6bafc30207a3872fa60b77590398e64722efb78050df2a07a03085.png)

一般地，我们将随机数分成两种：**真随机数（True Random Number, 后简称TRN)和伪随机数（Pseudo-Random Number，后简称PRN）** 其中，伪随机数又可以被细分为：弱伪随机数和强伪随机数。

正如 "伪 "这个词所暗示的那样，伪随机数不是真正的随机。所有在区块链上生成的随机数也都是“伪”的。本质上，**PRN是计算机软件根据既定的数学公式和算法指令所输出的看似随机的数字序列，需要外部输入一个初始值来充当seed。**

并且和许多人天然的认知相反，计算机其实很难被用来生成一些偶然的条件，因为它本身就是可预测的设备。元器件是确定的，线路是预设的，代码和算法命令是明确的，在种种固定的外界条件下，我们完全可以通过某些途径（正如上文提到的作弊方式）定位出序列结果。而能够被算出的结果，emm怎么不算……伪随机呢？

真正的TRN，是从噪音，混乱现象，量子随机过程等物理现象中提取出来随机性，引入计算机才得以生成的。直白一点讲，就是**把链下的一个大骰子接到了计算机。**

![TRN Mechanism](https://storage.googleapis.com/papyrus_images/4767b6e2bd896e72074eb37f9d9d96b0a08a5416e88e52289716f10dc784ac29.png)

TRN Mechanism

在性质上，**TRN需要同时具备随机性，不可预测性和不可重现性**三重特质：

*   随机性：数列完全杂乱无章，不存在统计学偏差，但不代表不会被看穿
    
*   不可预测性：在知道过去数列的前提下，依然无法预测接下来生成的数列
    
*   不可重现性：无法重现完全相同的数列，除非将原本的数列保存下来
    

强PRN只具备前两者，而弱PRN只具备随机性这一个性质，很容易被看穿。

![The Comparison of TRN and PRN](https://storage.googleapis.com/papyrus_images/6a7a9023213681ca6700d660b4b0f591423510ce6dfde913a73e67bd3cf60d7e.png)

The Comparison of TRN and PRN

我们说一个随机数可信，安全，最起码的就是指它不会被看穿。因此具有不可预测性的TRN和强PRN都可以被用作可信随机数引入智能合约。\*\*弱PRN是不能被应用到比如生成密钥，生成口令密码等等密码学相关的场景中的。

至于如何生成可信安全的随机数，目前来看最直接高效的方法就是\*\*通过预言机链接外部API并生成加密认证。**比如Chainlink的**可验证随机函数（VRF）**服务，就是通过在测试网络中接入外部API，**[**比如利用大气现象生成随机数的Random.org**](http://xn--Random-9p3j357bmxax77dtpi9qfo3ryza484f19eje54xin5jhtxb.org)**，再用公钥和智能合约的seed来验证生成的强PRN，然后将其传输至智能合约。再比如，API3是选择通过和澳大利亚国立大学（ANU）量子光学团队合作，为dApp和Web3各类产品提供**量子随机数生成（QRNG）\*\*服务，将其基于量子现象的生成TRN验证上链交付给请求者。根据其白皮书的相关论述，QRNG能在最大程度上防止女巫攻击，并且这一功能完全免费使用。

随机 & Web3
=========

在理解了可信随机数的定义和来源之后，我们来谈谈一个更实际的问题：随机数在web3到底有什么用？

**事实上，随机数几乎在所有Web3的场景和用例中都不可或缺。**

![](https://storage.googleapis.com/papyrus_images/9bcb5ee561f603b6fb5357d0e9cf7864ef039fbe5c12e62aae8deede68da105a.png)

GameFi
------

在游戏中需要用到概率分配得情况比比皆是。典型地，在RPG游戏中，有些角色非常稀有，具有罕见的属性，而有些角色就极为平常。通常越是稀有的角色，就价值越高，越能帮助用户获得高额的经济回报。比如Axie，每个精灵角色都有六个组成部分，每个部分都有不同的属性和能力。游戏厂商想要为用户创造个性化的游戏体验，就必须把角色的分配机制做好，把分配概率设置得尽量公平。

在PVP对战中，玩家获胜的几率和赢得奖赏的多少都取决于他们在对战中被分配到的对手。如果游戏配对机制不公平，很有可能直接导致玩家的流失。在世界探索类游戏中，玩家在探索地图过程中获得稀有物品和装备的几率也需要一个保证公平的概率模型。在卡牌类游戏中，玩家使用卡牌的顺序很大程度上充当着比赛的胜负手。在射击类游戏中，射击的命中率，角色复活地点的选择都会对玩家的游戏体验造成一定影响。

上述提到的种种游戏归根结底，本质都是需要**通过注入一定的不可预测性来增强游戏的可玩度**。而不可预测性的产生，就必然需要引入可信的随机数。

NFT
---

和GameFi中角色属性具有不同构成一样，NFT的细节也由不同的属性组成。比如BAYC的NFT，就包括背景、衣着、耳饰、眼睛、毛发、帽子和嘴七个不同的属性。而属性的稀有度实际就决定了该NFT的价值。对于稀有度分配和属性总量上限的制定，都可以通过利用可信随机数来解决。

![BAYC Property Categories](https://storage.googleapis.com/papyrus_images/05714eda0dcc0c0e3d83f9d2b89ebc0d7891530081f9a85c672fa80dc5c489d9.png)

BAYC Property Categories

此外，随着越来越多NFT社区的建立和成长，项目方也经常会在达成某些里程碑时或是特殊节日里，通过发放随机的NFT空投奖励来激发成员的忠诚和活跃度。而空投哪些地址，怎样保证空投的公平性，都是需要项目方谨慎地根据一定发放机制来执行。可信随机数在这类情景下就可以被视为一种良好的解决方案。事实上如今大部分NFT的空投激励活动也都是集成Chainlink VRF等服务开展的。

DeFi
----

类似Olympus这样的DeFi协议和算法稳定币协议中，其质押机制通常会设有变基质押（rebase）流程来解决份额稀释问题，或是激励特定的市场行为，比如保持算稳的价格锚定。而rebase机制一个“敏感性”很强的变量就是rebase的周期时间。设定的rebase周期时间如果长期不变，就很可能会被短期套利者利用。因此rebase机制设计可以应用可信随机数，来决定一个变更调整的大致周期。 在一些创新型的Yield Farming协议中，其奖励机制也会引入一定的波动性来提高用户的参与度。参与度高贡献大的用户的年化收益率会区别于普通或是参与度较低的用户。因而资金池中奖励大小的分配和收益幅度的增减，都会需要使用随机数来调节和建立模式。

DAO
---

在DAO的治理过程中经常需要成员为组织做出一些关键决策。而一个庞大的DAO社区，往往可能通过设立董事会等核心管理层来更高效地执行日常决策。而这些董事会和管理人员的选择和增补，会需要一个公平透明的机制来进行决策。引入可信随机数对于这类机制的设立可以被认为是一个最好和最便捷的选择。 此外，在一些涉及到大量资金管理或是专门进行投资的DAO中，随机数也可以被用来提高DAO成员身份认证系统的安全性，防止黑客或恶意攻击者逆向工程身份认证过程，保证DAO内资金库的安全。

L1共识机制中VRF的运用
-------------

新型公链需要面对的一个很大问题就是分片（shard）后安全性的降低。在未分片前，网络中所有的验证者共同验证所有交易，但在分片后，这些验证者被平均分配到每个分片上的进行验证，这就使得每个分片被fork（51%攻击）的几率大大提升。解决这个安全性问题的一个良好方案就是让攻击者无法提前知道每个分片的验证者是谁，而这就需要引入一定的随机性和不可预测性。NEAR就是通过VRF服务对验证者进行随机分配，从而隐藏验证者具体验证的分片信息。

![Source: NEAR Nightshard protoco](https://storage.googleapis.com/papyrus_images/416e35e561f9f2ffde0121f820a376e592c4245f8549bf73474a81ecac2782cb.png)

Source: NEAR Nightshard protoco

写在最后
====

随机性之所以令人着迷，是因为它意味着不确定，意味着一种可能性。可能性能为我们带来希望，也会为我们带来恐惧。所以决定论与非决定论的争执绵延至今，而上帝究竟掷不掷骰子其实也没有那么重要。

也许世间万物都在无可挽回地走向大数定律，也许所有宿命般的相识都不过是概率上的偶然，也许你、我、他都只是在Web3随机漫步的傻瓜。

但不知道答案，总是比得到一个错误的答案有意思的多。正如卡洛·罗威利在书中提到的那样：**“What’s nonapparent is much vaster than what’s apparent”。**

**保持愚蠢，敬畏随机。**

---

*Originally published on [sallygu.eth](https://paragraph.com/@sallygu/web3-2)*
