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