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