原文:https://wiki.polkadot.network/docs/en/learn-randomness 翻译:PolkaWorld 加入 PolkaWorld 社区,共建 Web 3.0! 波卡作为一条 PoS 链,随机性至关重要。波卡的随机性如何产生?为什么要选择这种方案呢?在本章 wiki 中给出了说明。Polkadot Wiki 是波卡官方文档,PolkaWorld 目前正在翻译和连载中。随机性 在权益证明(PoS)区块链中,随机性对于验证人职责的公平且不可预测分配很重要。 计算机并不擅长随机数,因为它们是确定性设备(相同的输入始终会产生相同的输出)。通常大家在计算机上(例如在游戏应用程序中)所说的 “随机数” 实际上是伪随机的。也就是说,它们依赖于用户或其他类型的 Oracle(预言机)提供的足够随机的种子,例如气象站的大气噪声、你的心律,甚至是熔岩灯,它都可以从中产生一系列看似随机的数字。但是给定相同的种子,将始终生成相同的序列。 然而,这些输入将根据时间和空间而变化,而且不可能将相同的结果输入到全球特定区块链的所有节点中。如果节点获得不同的输入并用它来出块,则会发生分叉。显然,现实世界的无序状态不适合用作区块链随机性的种子。 如今生产环境中有两种主要的解决区块链随机性的方法:RANDAO 和 VRF。Polkadot 使用 VRF。 VRF 可验证随机函数(VRF)是一种数学运算,需要一些输入并产生一个随机数以及该提交者生成该随机数的真实性证明。任何挑战者都可以验证该证明,以确保随机数生成有效。 Polkadot 中使用的 VRF 与 Ouroboros Praos 中使用的 VRF 大致相同。Ouroboros 的随机性对于出块来说是安全的,并且对于 BABE 也运行得很好。它们的不同之处在于,Polkadot 的 VRF 不依赖于中央时钟(问题变成了 “谁控制中央时钟?”),而是取决于它自己的过去结果来确定现在和将来的结果,并且它使用时隙号(slot number)作为时钟仿真器来估计时间。 具体操作如下: 时隙(slots)是时间的离散单位,长度为六秒。每个时隙可以包含一个块,但也可以不包含一个块。时隙构成了时期(epochs)—— 在Polkadot上,2400个时隙构成了一个时期,即每个时期为 4 小时。 在每个时隙中,每个验证人都会 “掷骰子”。他们执行将以下内容作为输入的函数(VRF): 密钥 - 专门为 “掷骰子” 制作的钥匙Epoch 随机值 - 上一个(N-2) 之前的 epoch 中各个块的 VRF 值的哈希值,因此过去的随机性会对当前的待确认随机性(N)产生影响时隙数(slot number)输出为两个值:RESULT(随机值)和 PROOF(证明随机值已正确生成的证明)。 (责任编辑:admin) |