Tendermint 的验证人轮换的特别设计

Tendermint 以加权的轮询方式在验证者集合,即如新区块的提出者们中循环产生。一个验证者和其委托人抵押的权益越多,它就有更多的权重,并且相应地它就会被更多的选为领导者。具体来说明一下,如果一个验证者和另一个验证者有着同样的权重,它们都会被协议以同样的次数选中。

对于这个算法如何工作的

最简单的解释如下:

  1. 验证者的权重被设置
  2. 验证者被选择,轮到验证者来提议一个区块
  3. 权重被重新计算,在本轮结束后减少一定数量的权重
  4. 随着每一轮的进行,权重按照投票权利的相应比例逐渐递增
  5. 再一次选择验证者

实际对应的代码实现:

https://github.com/tendermint/tendermint/blob/master/types/validator_set.go#L50

因为协议可以很明确地选择区块的提案人,鉴于你知道验证者集合和每个验证者的投票权重,你可以在x, x + 1,…,x + n 轮次中准确地计算出谁会是下一个区块的提案者。

一个有效的哨兵节点架构将保证验证人节点的IP不被暴露出来,同时可以组织其他节点与验证人节点连接。 这样可以混淆验证人节点的真实位置。

也就是说,哨兵节点的架构是可选择的。验证人有责任维护一个抗攻击的全节点。 这是我们根据经济激励做出的额外假设。 假设是,验证人会希望采取所有预防措施,以保持容错,保持高可用,并最终在保持在共识过程中发挥其作用。 因为如果他们不这样做,他们会因为长期离线被强制剔除出验证人集合。

猜你喜欢

转载自blog.csdn.net/sinat_34070003/article/details/81163469