follow the Satoshi
follow-the-satoshi算法是李启威在2012年发明的,算法的原理非常简单:将所有的权益组成一棵Merkletree,其形式是非叶子节点的权重为左右子树的权重之和,叶子节点的权重即为某个权益所有者的权益值。然后根据随机数在左右子树中进行选择。
例如上图选择:
- 随机数是65,左边权益是50,那么65>50所以选择右边
- 执行伪随机得到20,左边权益37,20<37,选择左边
- 执行伪随机得到15,左边权益27,15<27,选择左边,所以最终选择出A4作为这一轮的stakeholder。
构建
通过质押或其他方式产生一组满足一定条件(达到一定质押比例)的Stakeholder作为叶子节点,其质押量作为其权重,用于构建一个Merkle树。,将Stakeholder作为叶子节点,其质押量作为其权重,用于构建一个Merkle树。
pub fn create_merkle_tree(stakeholders: Vec<Stakeholder>) -> Vec<Arc<Node>> {
let mut tree: Vec<Arc<Node>> = Vec::new();
tree.resize(stakeholders.len() * 2,Arc::new(Node::default()));
pr