Algorand中基于VRF的抽签算法深入理解

论文原文:https://dl.acm.org/doi/pdf/10.1145/3132747.3132757

一、算法介绍

此算法要做的事
从一群参选者中选出一些当选者,每一个参选者都事先有一个权重,在区块链系统中通常是账户余额,或者附加其他例如运行时间、在线时间、发起交易数量等指标,来衡量一个节点在分布式系统的参与度、重要度,从而根据这些指标来选出我们想要的某些节点。
达成效果
权重越大的节点,被选中的概率越大。某节点权重为 w w w,实际上对应于它拥有 w w w个小单元。本算法就是在所有的小单元中,选择若干数量的小单元,那么自然地,拥有的小单元越多,被选中的概率就越大了。

二、具体实施

建模

  • 假如所有参选者权重之和为 W W W,也就是总共有 W W W个小单元。
  • 设置一个阈值 τ \tau τ,此阈值代表了要选出的小单元数量,它越大我们最终选出的当选者越多,那么每个小单元被选中的概率为 p = τ W p=\frac{\tau}{W} p=Wτ.
  • 这样一来,对于某个权重为 w w w的节点,选中它所拥有的 k k k个小单元的概率就是 B ( k ; w , p ) = C w k p k ( 1 − p ) w − k B(k;w,p)=C_{w}^kp^k(1-p)^{w-k} B(k;w,p)=Cwkpk(1p)wk,服从二项分布( k k k个被选中, w − k w-k wk个未被选中)

具体的抽签办法
在论文原文中,作者把 [ 0 , 1 ) [0,1) [0,1)区间划分为 w + 1 w+1 w+1个小区间,表示为:
I j = [ ∑ k = 0 j B ( k ; w , p ) ,   ∑ k = 0 j + 1 B ( k ; w , p ) ) ,       j = 0 , 1 , . . . , w I^j = [\sum _{k=0}^jB( k;w,p),\ \sum_{k=0}^{j+1}B( k;w,p)),\ \ \ \ \ j=0,1,...,w Ij=[k=0jB(k;w,p), k=0j+1B(k;w,p)),     j=0,1,...,w
然后通过VRF来生成随机数 h a s h 2 h a s h l e n \frac{hash}{2^{hashlen}} 2hashlenhash,看这个随机数落在第几个区间,就说明对应节点被选中几次。

但上式中,当 j = 0 j=0 j=0时,区间 I 0 I^0 I0的左边界并非为0,所以按照下式写就更完整:

I j = [ 0 , ∑ k = 0 j B ( k ; w , p ) ) ,      j = 0 I j = [ ∑ k = 0 j − 1 B ( k ; w , p ) , ∑ k = 0 j B ( k ; w , p ) ) ,      j = 1 , 2 , . . . w I^j=[0,\sum _{k=0}^jB(k;w,p)),\ \ \ \ j=0\\I^j=[\sum _{k=0}^{j-1}B(k;w,p),\sum _{k=0}^{j}B(k;w,p)),\ \ \ \ j=1,2,...w Ij=[0,k=0jB(k;w,p)),    j=0Ij=[k=0j1B(k;w,p),k=0jB(k;w,p)),    j=1,2,...w

区间的划分如下图示意:

在这里插入图片描述

实际上,第 j j j个区间的长度对应了相应节点被选中 j j j次的概率,即 B ( j ; w , p ) B(j;w,p) B(j;w,p),那么VRF生成的随机数落入第 j j j个区间,就代表此次对该节点的抽签抽中了它 j j j次( j j j个小单元被选中)

三、总结

算法本身不难,对于我这种概率论学得稀里糊涂的,最开始陷入了对二项分布物理意义的理解,一直搞不懂为啥那样分区间,最后画了个图,把每个区间长度看了下才懂,区间的左右边界没有什么实际物理意义,我们能够理解区间长度的意义就好啦~

(而且抱怨一下论文原文怎么就把第一个区间漏掉不写, j = 0 j=0 j=0的时候明明左边界不是0啊喂!)

猜你喜欢

转载自blog.csdn.net/weixin_48288539/article/details/122478555