很多朋友想大概了解一下,作为权益证明的ADA,是如何选出负责出块的节点的。
如果直接去看技术文档,会太深奥和过于细节,这里我把大概过程提炼出来,供大家参考:
关键概念:
- ada的选举和出块流程按时间划分为两个层次:epoch(时代)和slot(时隙),
目前,一个epoch包含21600个slot,每个slot持续20秒,所以一个epoch是5天; - 每个slot最多出1个block(区块),每个epoch中至少50%以上的slot要出块。
- 负责出块的那个节点(账户或地址)被称为那个slot的slot leader(时隙领袖)。
选举slot leaders是ADA权益证明的核心,分为两个步骤:MPC 和 FTS。
假设我们目前位于两个epoch的交接处,刚进入第二个epoch,
第一个步骤
发生在前一个epoch中,称为MPC算法(多方计算算法),目的是得到一个随机产生的、大家都认可的(这就是共识)字符串:
- MPC算法就是常说的选举过程,参与MPC算法的节点就被称为选举人;
- MPC算法的目的就是哪怕出现一些恶意的选举人,选举过程仍然会成功完成。
MPC是ADA使用的共识算法的核心,但是这里就不详细展开MPC了。
第二个步骤
发生在当下这个epoch的开始,叫做FTS算法(追踪中本聪算法,是为了向他致敬):
- 首先,把系统中所有utxo按确定的方法排好队(比如按字典序,反正不能乱序)。
每个权益持有人举个牌子,上面写上他持有的权益个数,所有权益持有人就站成了一队; - 然后,把MPC选举的结果字符串作为随机数的种子,在1到系统当前最大的ada发行量(用最小的ada单位,就是lovelace)之间生成随机数。
假设第一次生成的随机数是100,意思是找到第100个lovelace; - 此时从队列开头数数,找到这第100个lovelace在谁手中。
第一个持有人有70个lovelace,意味着他的顺序号是1到70,100不在里面,pass掉。第二个持有人有45个lovelace,意味着他的顺序号是71到115,第100个lovelace落在里面,好,他就是第一个slot的leader了。 - 重复生成随机数,找寻lovelace拥有人的过程
- 最后,就把该epoch所有slot的leader都选好了
FTS算法的结果就是本epoch下的所有slot leader的序列了,当然,一个持有人被多次选中是完全可能的,因为FTS算法的本质就是按照持有权益的比例进行概率随机的。
经过这两个过程后,新的epoch的所有slot都有了自己的leader,一个完整的选举过程就结束了。