论文原文: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)=Cwk