你觉得扔骰子有多难?拿起,放下,看点数——三秒钟搞定。但在一台被设计成「每一步都必须一模一样」的计算机上,扔骰子是世界上最难的事。
老师有没有告诉你,区块链上连「扔骰子」都做不到
2026-08-01 · 🕐 约 6 分钟
由 丢笔哥 发布
区块链是一台绝对诚实的机器——它记录每一笔交易,不能篡改、不能删除。但这种诚实是有代价的:它连「随便」两个字都说不出来。
为什么一台计算机「故意」不能随机
想象一下:你让一万台分布在全球的电脑同时执行同一段程序。如果这段程序里有一个「生成随机数」的指令,每台电脑会生成一个不同的数字——然后整个系统就乱了。因为区块链要求所有节点「算出来的东西必须一模一样」,如果某台电脑「随机」选了3,另一台选了7——它们就达不成共识了。所以,区块链从根子上被设计成「完全确定性」的:同样的代码、同样的输入,永远产生同样的输出。这是它最大的优点——诚实。也是它最大的盲点——它连扔个骰子都做不到。但现实中,大量应用需要随机数:抽奖、选验证节点、分配资源。怎么办?
有人试过用「未来区块」当骰子——结果赔了几千万
最早的「土办法」是把下一个区块的哈希值当成随机数来源。因为没人能提前知道下一个区块的哈希是什么——对吗?对,但有一个致命漏洞:出块的那个矿工(现在叫验证者)可以。他可以在打包区块的时候,悄悄算一下「如果我这样打包,得到的哈希对我有利吗?」如果不有利,他可以调整交易顺序重新打包——直到对自己有利为止。这就像一个赌场的荷官,每次开骰盅前都能偷看一眼点数,如果不满意就再摇一次。2018年,一个叫EOSBet的区块链博彩平台,因为这个漏洞被套走了约20万美元(当时的币价)。攻击者用的不是黑客技术——他只是利用了「出块的人比你先看到骰子」这个简单的逻辑漏洞。
一群陌生人怎么「一起」生一个随机数
既然一个人不行,那让一群人一起生成呢?这就是「分布式随机数」的核心思路。最简单的方法叫「承诺-揭示」协议:每个人先秘密选一个数字,把它的哈希(你可以理解为「加密后的指纹」)公布出来。等所有人都公布完了,再各自揭示自己原来选的数字。把所有人的数字混在一起,算出一个最终结果——这样任何人想作弊,必须同时控制绝大多数参与者。更进一步,密码学家发明了一个叫「可验证随机函数」(VRF)的工具。它就像一个魔法筛子:你扔一次,会得到两个东西——一个随机数,和一个「证明」。这个证明可以让你向全世界证明你扔骰子是诚实的,没有偷偷重扔。Algorand区块链就是靠VRF来选每一轮的出块者,做到了完全随机且可验证。
一个你每天都在用的「随机数」来源
其实,你每天都在接触一个更优雅的解决方案。你的手机密码、银行卡PIN码、微信支付的验证码——它们的「随机性」从哪来?不是从数学公式,是从物理世界。你的手机芯片里有专门收集「环境噪音」的硬件——温度传感器的微小波动、麦克风的底噪、甚至你手指触摸屏幕时的电容变化。这些物理信号是真正随机的——因为大气分子运动本身就是随机的,无可预测。区块链也可以做类似的事:把物理世界的随机信号「喂」给链上的智能合约。Chainlink的VRF服务就是这么做的——它链下生成随机数并附带密码学证明,链上验证。这相当于:你在区块链的「无菌病房」里开了一扇通向真实世界的窗——让真实的「不完美」进来,做完它做不了的事。
这件事告诉你:完美系统的最短板,往往是它最骄傲的地方
区块链教会我们一件比随机数本身更值得记住的事:任何被设计成「绝对不变」的系统,必然在另一个维度上是「绝对无能为力」的。区块链的确定性是它最强大的武器,也正是它最大的软肋。这和生活中很多事情一模一样:一个「从不犯错」的人,往往也是最不善变通的人。一个「绝对安全」的投资,往往意味着收益趋近于零。所以,随机数难题不是一个技术缺陷——它是一个深刻的设计哲学课。你可以把这件事讲给任何一个不关心区块链的人听,他也会点头。
关于丢笔哥
丢笔哥不是一个具体的人——它是一种态度。在信息爆炸的时代,用最直白的语言,把硬核知识讲透。覆盖金融证券、AI 前沿、Web3、东方智慧。
一支笔丢在桌上,一堂课就此开始。
📬 订阅丢笔哥 →📖 继续阅读
🤖 AI 前沿📬 不想错过下一堂丢笔课?
每周一篇硬核科普,用最好玩的方式讲最硬核的知识。
不卖课、不荐股、不画饼。
💬 讨论区