一、系统模型

Tendermint 中有几个重要概念:

需要注意,Tendermint 判断的是投票权比例,而不是节点数量。一个拥有 30% 投票权的验证者,其影响力相当于总投票权的 30%。

二、Proposer 如何产生

Proposer 不是通过临时选举产生的,而是通过确定性的加权轮询算法产生。

每个验证者都有一个 ProposerPriority。简化后的算法如下:

1. 每轮:priority += votingPower
2. 选择 priority 最大的验证者作为 Proposer
3. 被选中的验证者:priority -= 总投票权

假设验证者集合为:

验证者 投票权
A 5
B 3
C 2

初始优先级均为 0:

第 1 轮增加后:A=5,B=3,C=2
选择 A,A 减去总投票权 10
结果:A=-5,B=3,C=2

第 2 轮增加后:A=0,B=6,C=4
选择 B
结果:A=0,B=-4,C=4

第 3 轮增加后:A=5,B=-1,C=6
选择 C

因此,投票权越大,成为 Proposer 的频率越高,但不会因为投票权最大就永远担任 Proposer。

由于所有节点拥有相同的验证者集合、投票权和优先级状态,所以能够独立计算出相同的 Proposer,不需要额外执行一次选举共识。