卡尔达诺结算层中的领导者选举

这一章描述领导者选举过程。

追随中本聪算法

所述,卡尔达诺结算层使用追随中本聪算法(FTS)来选择领导者。每个当前 epoch 的领导者在当前 epoch 开始的时候,由 FTS 算法计算得出。所以创始区块包含一组领导者列表。领导者的数量和 epoch 的 slot 数量是一致的,这个数量取决于在配置文件中定义的基本安全参数 K

FTS 使用共享种子,该共享种子为上个 epoch 计算的结果:在 MPC 的结果中的一些节点会揭露它们的种子,这些种子的 XOR 就被称为共享种子,实际上共享种子就是一个字符串

股东被选举为领导者的概率与股东持有的币的数量相关。同一个股东可以在同一个 epoch 里面被选举为多个 slot 的领导者。

算法

论文的第11页从以学术角度描述了领导者的选举过程。

节点将所有未花费的输出(utxo)按照一种特定的方法(按字典)进行排序,因此结果是一对 (StakeholderId, Coin) 的有序序列StakeholderId 是股东的 ID(股东的公钥哈希值),Coin 是股东持有币的数量。这里假设 utxo 不是空的

然后节点选择几个在 1系统中 Lovelaces 的数量之间的随机数 i。为了找到第 i 个币的拥有者,节点找到最小的 x,使得这个列表从 xi 的所有币的总数不小于 i(这样第 x 个地址就是第 i 个的拥有者)。

结果是一个非空的 StakeholderId 序列,也就是被选中的股东们的 ID,SlotLeaders 序列保存在节点运行环境中

由于是 P2SH 地址,所以节点不知道是会谁将要给它们发送资金。因此,P2SH 地址可以包含目标地址,该目标地址指明哪些地址应该被视为『拥有』用于 FTS 的基金。