与使用RANDAO(可能通过VDF增强)的以太坊相反,在Polkadot中,可验证的随机函数(VRF)用于洗牌验证器并为某些时隙选择潜在的区块提议者。随机性来自哪里,即随机性是如何工作的?
可验证的随机函数是以伪代码表示的函数,如下所示:
(RESULT, PROOF) = VRF(SECRET, INPUT)
即,对于某些秘密和某些输入(可以公开),结果为RESULT
和PROOF
的元组,其中PROOF
可以由外部观察者用来验证VRF RESULT
的合法性]。
换句话说,进行“ VRF滚动”会得到一个随机数,并证明您获得了该随机数,而不仅仅是选择了它。
每个验证器的每个插槽(大约每6秒钟)将运行VRF功能。 SECRET
将是其VRF密钥,VRF密钥是仅用于此目的的特殊密钥,由验证者生成并保密。 INPUT
或者是来自创世块的特定值(如果链中存在少于2个纪元),或者是过去2个纪元中所有VRF结果的哈希值。]
一旦验证者执行了VRF,就将RESULT
与协议定义的THRESHOLD
值进行比较。如果RESULT
小于THRESHOLD
,则验证器是该时隙的有效块提议者候选者。否则,验证程序将跳过该插槽。
这意味着可能有多个验证者正在为插槽生成候选块,在这种情况下,只要其他节点上拾取的块位于链上最多的那个块上根据GRANDPA finality小工具最近确定的区块。在这种情况下也可能没有插槽的区块生产者,在这种情况下,AURA共识将接管。 AURA共识基本上是一个后备,它为每个块选择一个随机验证器。它与BABE并行运行,并且仅在插槽没有块生成器的情况下才重要,否则它将被忽略。