
什么是随机数(为什么链上随机性难以保证)
随机数是什么:给链上“抽签”用的一串不可预测结果
随机数可以用一句话说明白:它是一种在生成之前谁也猜不到、生成之后大家又能验证没有被动过手脚的“抽签结果”。在链上世界里,随机数最常见的用途是决定“谁中奖、谁先获得资格、哪个 NFT 属性出现、某个任务分配给谁”等等。
用生活类比更直观:你和朋友在一个透明玻璃房里掷骰子。玻璃房意味着所有人都能看到过程(公开可验证),但也意味着你在掷骰子前的一举一动都暴露在别人眼里(难以保密)。区块链就是这种“透明场景”:交易、合约逻辑、区块内容都公开,导致“想要既公开又不可预测”的随机数,天然比线下难。
区块链为什么需要随机性:公平、抗操纵与可验证
区块链的规则是写死在合约里的,合约不会“看人下菜碟”,但它也没有人类的直觉来判断公平,所以需要随机性来做“无偏见的裁判”。如果没有随机数,许多链上行为会变得可被算计:
– 抽签/盲盒:如果结果可预测,懂行的人能提前挑走“好结果”,普通用户永远抽不到。
– 排队与资格:白名单、空投、抢购如果没有随机机制,可能被机器人用更快的提交策略碾压。
– 游戏与对战:如果下一步结果能被预知,玩家可以只在“必胜局”才出手。
链上还多了一层要求:不仅要“随机”,还要“可证明随机”。因为区块链没有一个大家都信任的主持人,随机数必须能让所有人复核:这次抽签不是项目方临时改结果,也不是某个矿工/验证者偷偷动手脚。
为什么链上随机性难以保证:公开环境里总有人能“抢先看”或“动手改”
链上随机性之所以难,核心矛盾就两点:
1)链上数据几乎都公开:很多人会尝试用“区块哈希、区块时间戳、区块高度”等链上信息当随机种子。但这些信息要么在出块时就被看到,要么在一定程度上能被出块者影响。比如有人会把“什么是区块高度(Height 与链的增长关系)”里提到的高度当作抽签依据:高度确实在增长,但它并不等于不可预测的随机源——因为大家都盯着它,且出块节奏有规律,攻击者可以围绕它做准备。
2)出块者/打包者可能拥有“最后一手”:区块由矿工或验证者打包,他们对“哪些交易进这个区块、交易排序、是否延迟出块”等有一定控制力。只要随机数与“区块里的某些内容”相关,出块者就可能通过挑选、延迟或重排来让结果更有利。
把它想成彩票站的摇奖机:如果摇奖机由某个人独自保管,那他只要能决定“什么时候摇、摇之前放不放某些球、摇完是否作废重摇”,就有机会影响结果。链上出块者不一定能完全操纵,但在高价值场景里,“能影响一点点”就足以让攻击者获利。
此外还有一种常见问题来自交易池(mempool):你发起交易后,交易会先在公开的候选队列里等待打包。别人可以提前看到你的交易内容,并做出反应,比如插队、夹击或复制你的操作。这会让一些“先到先得 + 随机分配”的机制变形,随机性被交易排序权稀释。

它影响什么:成功率、费用、体验与“公平感”
链上随机性不可靠,带来的不是“数学不好看”这么简单,而是直接影响普通用户的实际体验:
– 成功率:抽签、铸造、游戏行动等依赖随机结果的操作,可能在你看起来“正常参与”的情况下变成小概率事件,甚至被别人提前算计导致你几乎不可能赢。
– 费用:当大家为了争抢更有利的随机结果而提高出价或频繁重试,链上拥堵会推高 Gas,参与成本上升。你可能会遇到“为了等一个结果,多次提交、多次失败还要付费”的体验。
– 速度与等待:为了防止被操纵,有些机制会引入“先提交后揭示”或延迟开奖,这意味着你要等更多区块才能知道结果。这里也会牵涉到类似“什么是区块确认数(确认次数越多越安全吗)”的直觉:等待更多确认能降低回滚与重组的风险,但并不自动等于随机就更公平,因为操纵可能发生在更早的打包与排序阶段。
– 公平感与信任:当用户发现“总是同一批地址中签”“某些人总能抽到稀有”,即使合约代码公开,也会怀疑随机数来源是否可被影响,进而降低对项目机制的信任。
普通人会遇到的坑:看似随机,其实可预测或可操纵
普通用户在使用链上随机性相关功能时,最常见的坑有四类:
1)把链上公开信息当作随机数:例如用区块时间戳、区块哈希、区块高度拼出来一个“随机值”。这些值看起来复杂,但在链上环境里往往可被提前估计或被出块者轻微影响。
2)开奖时点可被“挑选”:有的机制允许在一个时间窗口内执行开奖。只要执行者能选择“在哪个区块开奖”,就等于可以试探多个结果,挑一个最有利的执行。这在高价值抽奖、稀有道具铸造等场景尤其危险。
3)被交易排序影响结果:如果随机分配与“谁先提交/谁先被打包”挂钩,机器人可以通过更高费用、私有交易通道或更快的广播抢占排序优势。你以为拼手气,实际在拼“谁更会排队”。
4)把“不可预测”误当成“不可作弊”:随机数要同时满足两件事:别人提前猜不到(不可预测),以及任何单方都改不了(不可操纵)。很多方案只做到前者或后者的一部分,结果仍可能被影响。
判断一个链上随机机制是否更靠谱,可以用三句人话自检:结果出来前,任何人能不能提前知道大概会开什么?结果出来时,有没有任何一方能通过“换个区块、换个顺序、换个时机”来改变结果?结果出来后,旁观者能不能独立验证这次抽签没有被篡改?
随机数在链上像“公开场合掷骰子”:公开带来可验证,但也带来可被盯梢与干预。理解这一点,能帮助你在遇到抽签、盲盒、链游掉落等功能时,更清楚自己在和什么规则互动,也更能识别那些“看起来随机、实际上可被拿捏”的设计。



