浅析ada的选举过程


#1

很多朋友想大概了解一下,作为权益证明的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算法(追踪中本聪算法,是为了向他致敬):

  1. 首先,把系统中所有utxo按确定的方法排好队(比如按字典序,反正不能乱序)。
    每个权益持有人举个牌子,上面写上他持有的权益个数,所有权益持有人就站成了一队;
  2. 然后,把MPC选举的结果字符串作为随机数的种子,在1到系统当前最大的ada发行量(用最小的ada单位,就是lovelace)之间生成随机数。
    假设第一次生成的随机数是100,意思是找到第100个lovelace;
  3. 此时从队列开头数数,找到这第100个lovelace在谁手中。
    第一个持有人有70个lovelace,意味着他的顺序号是1到70,100不在里面,pass掉。第二个持有人有45个lovelace,意味着他的顺序号是71到115,第100个lovelace落在里面,好,他就是第一个slot的leader了。
  4. 重复生成随机数,找寻lovelace拥有人的过程
  5. 最后,就把该epoch所有slot的leader都选好了

FTS算法的结果就是本epoch下的所有slot leader的序列了,当然,一个持有人被多次选中是完全可能的,因为FTS算法的本质就是按照持有权益的比例进行概率随机的。

经过这两个过程后,新的epoch的所有slot都有了自己的leader,一个完整的选举过程就结束了。


#2

谢谢分享!卡尔达诺中国社群是一个互助合作的群体,论坛是我们社群最主要的信息分享平台。


#3

这样high level的介绍是真的好,不需要太多的细节就能让人迅速抓住重点。点赞。


#4

感谢分享 你的解释很好


#5

感谢社区有你。。感谢分享。受教了、。