可验证随机函数,用于在共识出块是选择proposer提块人
VRF是Hash(SIG(sk, a))=b,别人无法复现这个过程。但是可以拿b,pk,和中间信息验证b是跟a对应的。
sk 是私钥
pk 是公钥
a 是随机数 ,可以包括块高,上一块的hash等组合
VRF是可验证随机函数(verifiable random function),一方面具有伪随机性,另一方面它还具有可验证性(输出包括一个非交互零知识证明)
- 伪随机性
- 可验证性
-
- VRF的方式是,实现本地抽签,各个节点自己抽签,如果抽中了之后,大家可以很容易地验证这个结果确实是你生成的。
eg. 假设现在是round 10(第10 轮),节点们可能会轮流抽签,以节点自己的私钥sk+ 一个全网都知道的随机数(比如是这轮的轮次10)作为输入,生成了一个随机数(0-100);设置一个条件:100 个节点轮流抽签,谁先抽出来的随机数大于10,就是这一轮的打包者。假设5 号节点抽到了11,可是只有5 号知道其他人不知道,因此他在广播这个随机的同时还需要广播一个零知识证明。通过零知识证明,全网只需要通过5 号的公钥就可以验证,接受5 号为这轮打包者。即别人可以通过b和公钥来验证b和a的对应关系。