Polkadot 的 VRF 如何实现随机性来洗牌验证者?

How does Polkadot's VRF achieve randomness to shuffle validators?

与使用 RANDAO(可能通过 VDF 增强)的以太坊相反,在 Polkadot 中,可验证随机函数 (VRF) 用于洗牌某些插槽的验证器和 select 潜在区块提议者。随机性从何而来,即随机性具体是如何发挥作用的?

可验证的随机函数是一个可以用伪代码表示的函数:

(RESULT, PROOF) = VRF(SECRET, INPUT)

也就是说,对于一些秘密和一些输入(可以是public),结果是RESULTPROOF的元组,其中PROOF可以被外部观察者用来验证 VRF RESULT.

的合法性

换句话说,生成一个 "VRF roll" 会产生一个随机数,并证明您得到了那个随机数,而不是随意选择它。

每个时隙(大约每 6 秒)每个验证者都会 运行 VRF 函数。 SECRET 将是他们的 VRF 密钥,一个仅用于此的特殊密钥,由验证器生成并保密。如果链中存在少于 2 个纪元,INPUT 是来自创世块的特定值,或者是过去 2 个纪元中所有 VRF 结果的哈希值。

一旦验证者执行了 VRF,RESULT 将与协议定义的 THRESHOLD 值进行比较。如果 RESULT 小于 THRESHOLD,则验证者是该时隙的有效区块提议者候选者。否则,验证器将跳过该时隙。

这意味着可能有多个验证者正在为一个时隙生成候选块,在这种情况下,只要在链上,其他节点选择的块就会占上风根据 GRANDPA finality gadget 使用最新的最终块。一个插槽不存在块生产者的情况也是可能的,在这种情况下,AURA 共识将接管。 AURA 共识基本上是一种回退,它为每个区块选择一个随机验证器。它 运行 与 BABE 并行,并且仅在插槽没有块生产者时才重要,否则将被忽略。