每一个区块链产品,本身就是一个微型社会,一个由网络节点组成的自适应组织,这个组织的运行由共识机制来规范。共识机制是可编程的利益转移规则,吸引人们参与其中,组成安全网络,并有序运行。
在IOST目前版本的PoB机制中,区块生产委员会拥有17个席位,每10分钟换届一次。每次换届时Servi值最高的17个节点入选委员会,轮流打包区块并获得奖励。节点每次入选委员会都会消耗Servi,未入选的节点就相对有更多Servi,在下次换届时有更大的机会入选委员会。在此机制下,一天内就可能有上百个节点入选过委员会。
在PoB机制中,成为备选节点的准入门槛更低,更多社区成员可以参与竞选。同时,通过高频率的换届,大部分备选节点都有资格入选,委员会的流动性非常高,去中心化程度远高于EOS采用的基于少量超级节点和备选节点的DPoS机制,实现了更好的社区自治,同时也保障了更高的安全性。
概述
IOST设计的PoB是一个比DPoS更去中心化的选举方案,并且具有相同的扩展性。在本文中,我们希望用最简单清晰的文字描述PoB如何运行。
我们希望设计一个选举方案,使得大部分节点都有资格参与到区块生产中,而不是只有头部的少数节点进行区块生产。但是,被投Token*越多的节点仍然拥有更大的机会生产区块。
*被投Token:在IOST网络中,社区成员通过抵押Token获得投票权。目前版本中,1Token=1票。
为了达到这个目的,我们并不直接采用投票结果作为选举结果,而是引入了一个积分体系——Servi来决定委员会成员。
成为备选节点
出于对网络安全的基本保证,PoB中对于区块生产者依然设有一个基本门槛。在目前版本中,只要获得超过全网0.1%的Token投票,就可以向区块链网络发送一笔特定交易并成为备选节点,参与区块生产委员会的竞选。
Servi获取与选举
虽然投票结果并不直接决定委员会成员,但是备选节点的Servi获取速率与投票结果是成正比的。
在目前版本中,每届委员会我们将选出17名委员会成员,每轮选举分为三步:
1. 社区成员抵押Token并投票,备选节点会得到与被投Token等量的Servi。
2. Servi值前17名的备选节点被选为这轮的委员会成员,负责下一个时间周期的区块生产。
3. 所有入选委员会的17个节点,最后一名的Servi值清零,其他节点扣除等量的Servi值。
在目前版本中,选举的时间周期为10分钟,也就是说在IOST网络中,每10分钟委员会就会进行一次换届。
样例
假设现在我们的规则是从5个备选节点选出3个进入委员会,5个备选节点A、B、C、D、E当前获得的票数从高到低分别为10、8、5、4、1,假设他们的票数在这段时间内保持不变。
在第一轮选举中,5个备选节点的Servi值分别为A(10)、B(8)、C(5)、D(4)、E(1)(接下来用[10, 8, 5, 4, 1]表示)。这时A、B、C的Servi值最高,成为委员会成员,同时他们都被扣除排名末位的C的Servi值,即本届委员会的最低Servi值——5。D、E的Servi值保持不变,Servi值情况变为[5, 3, 0, 4, 1]。
在第二轮选举中,Servi值在第一轮结束([5, 3, 0, 4, 1])的基础上再次加上这些节点当前的获投票数([10, 8, 5, 4, 1]),变为[15, 11, 5, 8, 2]。这时A、B、D成为Servi值最高的备选节点,所以这届委员会成员为A、B、D,同时A、B、D都被扣除D的Servi值——8,Servi值情况变为[7, 3, 5, 0, 2]。
在第三轮选举中,Servi值情况变为[17, 11, 10, 4, 3],这时又是A、B、C组成委员会。
在第九轮选举中,Servi值情况分别为[26, 8, 5, 12, 9],只获得1票的备选节点E会第一次入选委员会,委员会成员为A、D、E。
其他细节
1. 如果有多个备选节点的Servi值并列第17名,会优先选择更早成为备选节点的节点,实际运行中这种情况会很少见。
2. 在完成选举之后,我们选用委员会成员轮流生产区块的方案,也就是在一个时间周期内无论委员会成员的Servi值多少,生产区块的权利相等,对所有入选成员都是公平的。
3. 显然,在大部分情况下,获投票数排名第一位的节点总是会被选入委员会。为此我们设置了一个Servi值上限,Servi值不能超过被投Token数的10倍。
4. 备选节点需要在每6个选举周期(也就是1小时)内发送一笔特定的验证交易证明节点在线,如果没有,那么他将失去所有获投票数并失去备选节点资格。
5. 如果委员会成员在一个时间周期内没有生产区块,那么同样,他将失去所有获投票数并失去备选节点资格。
6. 投票所用的Token需要7天才能赎回,一个备选节点失去资格时也一样,也就意味着发生以上两种情况的节点无法很容易地马上再次参选。
结论
我们通过引入一个积分体系——Servi来完成更去中心化的选举,并且最终节点生产区块数量的比例会接近于获投票数的比例。同时由于它还是一个选举方案,因此拥有较高的可扩展性。
我们依然持续在优化这个方案,如果有好的建议,欢迎发邮件到[email protected]与IOST研发团队联系。同时也可以到IOST开发者社区invite.iost.io与我们的开发者直接进行交流。
-END-