原文:https://wiki.polkadot.network/docs/en/learn-randomness
翻译:PolkaWorld
加入 PolkaWorld 社区,共建 Web 3.0!
波卡作为一条 PoS 链,随机性至关重要。波卡的随机性如何产生?为什么要选择这种方案呢?在本章 wiki 中给出了说明。
Polkadot Wiki 是波卡官方文档,PolkaWorld 目前正在翻译和连载中。
随机性
在权益证明(PoS)区块链中,随机性对于验证人职责的公平且不可预测分配很重要。
计算机并不擅长随机数,因为它们是确定性设备(相同的输入始终会产生相同的输出)。通常大家在计算机上(例如在游戏应用程序中)所说的 “随机数” 实际上是伪随机的。也就是说,它们依赖于用户或其他类的 预言机(预言机)提供的足够随机的种子,例如气象站的大气噪声、你的心律,甚至是熔岩灯,它都可以从中产生一系列看似随机的数字。但是给定相同的种子,将始终生成相同的序列。
然而,这些输入将根据时间和空间而变化,而且不可能将相同的结果输入到全球特定区块链的所有节点中。如果节点获得不同的输入并用它来出块,则会发生分叉。显然,现实世界的无序状态不适合用作区块链随机性的种子。
如今生产环境中有两种主要的解决区块链随机性的方法:RANDAO 和 VRF。Polkadot 使用 VRF。
VRF
可验证随机函数(VRF)是一种数学运算,需要一些输入并产生一个随机数以及该提交者生成该随机数的真实性证明。任何挑战者都可以验证该证明,以确保随机数生成有效。
Polkadot 中使用的 VRF 与 Ouroboros Praos 中使用的 VRF 大致相同。Ouroboros 的随机性对于出块来说是安全的,并且对于 BABE 也运行得很好。它们的不同之处在于,Polkadot 的 VRF 不依赖于中央时钟(问题变成了 “谁控制中央时钟?”),而是取决于它自己的过去结果来确定现在和将来的结果,并且它使用时隙号(sLoot number)作为时钟仿真器来估计时间。
具体操作如下:
时隙(sLoots)是时间的离散单位,长度为六秒。每个时隙可以包含一个块,但也可以不包含一个块。时隙构成了时期(epochs)—— 在Polkadot上,2400个时隙构成了一个时期,即每个时期为 4 小时。
在每个时隙中,每个验证人都会 “掷骰子”。他们执行将以下内容作为输入的函数(VRF):
- 密钥 – 专门为 “掷骰子” 制作的钥匙
- Epoch 随机值 – 上一个(N-2) 之前的 epoch 中各个块的 VRF 值的哈希值,因此过去的随机性会对当前的待确认随机性(N)产生影响
- 时隙数(sLoot number)
输出为两个值:RESULT(随机值)和 PROOF(证明随机值已正确生成的证明)。
然后将 RESULT 与在协议(具体来说是在 Polkadot Host 中)的实现中定义的阈值进行比较。如果该值小于阈值,那么得出此数字的验证人将是该插时隙的可行出块候选者。然后,验证人尝试创建一个块,并将该块与先前获得的 PROOF 和 RESULT 一起提交到网络中。
钓鱼人(fisherman)- 监视网络的收集人和验证人错误行为的节点,将验证中继链区块。由于非法投掷将产生非法区块,并且由于钓鱼人将在验证人产生的每个区块中访问 RESULT 和 PROOF,因此他们很容易自动报告作弊的验证人。
总结一下:在 VRF 下,每个验证人都会为自己掷出一个数字,并根据阈值对其进行检查,如果随机掷出的骰子低于该阈值,则会生成一个区块。观察网络并报告不良行为的钓鱼人事后会验证这些投掷的有效性,并向系统报告任何作弊行为(例如,有人尽管掷出的数量超过阈值,但仍然假装成出块者)。
精明的读者会注意到,由于这种工作方式,某些时隙可能没有验证人作为出块候选者,因为所有验证人候选者的得分都太高而错过了阈值。我们阐明了如何解决此问题,并确保与 Wiki 页面的共识部分 的 Polkadot 出块时间保持几乎一致。
RANDAO
另一种获取链上随机性的方法是以太坊的 RANDAO 方法。RANDAO 要求每个验证人通过对某些种子执行数千个哈希来进行准备。之后验证人在回合中发布最终的哈希值,并且从每个参与者进入游戏中得出随机数。只要一名诚实的验证人参加,随机性就被认为是安全的(在经济上进行攻击不可行)。
RANDAO 可以选择使用 VDF 进行增强。
VDFs
可验证延迟函数( Verifiable Delay Functions )是指即使在并行计算机上也要花费规定时间才能完成的计算。它们产生独特的输出,可以公用共设置独立有效地对其进行验证。通过将 RANDAO 的结果输入 VDF,会引入延迟,从而使任何攻击者企图影响当前随机性的尝试都将过时。
VDF 一般需要通过 ASIC 设备来实现,这类设备需要与其他类的节点分开运行。尽管只有一台就足以保证系统的安全,并且它们将是开源的并且几乎免费分发,但是运行这类设备既不便宜也不受激励,对于选择这种方法的区块链用户而言将产生不必要的摩擦。
扩展资料
- Polkadot 在随机数和抽签上的研究 – 包含了在证明机制之间作出选择的理由:
https://research.web3.foundation/en/latest/polkadot/BABE/Babe.html - 关于 Pokadot 中用到的随机数的讨论 – W3F 研究员讨论波卡中的随机性及其使用场景和假设:
https://github.com/paritytech/ink/issues/57
关注 PolkaWorld
发现Web 3.0 时代新机遇
文章标题:波卡的随机性如何产生?|Polkadot Wiki
文章链接:https://www.btchangqing.cn/218343.html
更新时间:2021年03月25日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。