Tendermint之不分叉

比特币和以太坊都是会分叉的,比特币造成分叉后,非主链的出块节点没有任何收益,

以太坊引入了叔块的概念,分叉后非主链的区块被认为是叔块,给予一部分奖励

Tendermint号称不分叉,那么它是如何做到的呢。Tendermint是POS+BFT共识

https://www.jianshu.com/p/763264fa3bef

看了这篇文章刚开始没明白,后面想了一下记录一下:

Assume that at most -1/3 of the voting power of validators is byzantine. If a validator commits block B at 
round R, it's because it saw +2/3 of precommits at round R. This implies that 1/3+ of honest nodes are still 
locked at round R' > R. These locked validators will remain locked until they see a PoLC at R' > R, but this 
won't happen because 1/3+ are locked and honest, so at most -2/3 are available to vote for anything other 
than B.

大意是如果小于1/3节点是拜占庭节点(必须的了,如果大于等于1/3,那么共识就没法达成了)。当validator commit了区块B,那么表示有大于2/3的节点在R轮投了precommit,这表示至少有大于1/3节点(大于1/3节点哪儿来的呢,就是大于2/3减去小于1/3,为什么是这么算呢,有人说不是有大于2/3的节点投了precommit那么这些人不都是诚实节点吗,当然不是了,拜占庭节点的意思它工作随性,有时候正确有时候失败,假设这个时候所有的拜占庭节点正确的工作了,所以都算在在+2/3节点内,所以这么算了)被lock在了R`>R。如果这个时候有针对同一区块高度的投票,那么由于这+1/3节点被lock在了R轮,所以不会有+2/3的节点投prevote,也就不会在同一高度达成一个新的共识区块,所以就不会分叉。


如果有朋友读过代码,知道lock的block是在节点commit的时候解锁(就是lockblock置空,那么自身的节点高度+1),那么此时还是成立的。节点高度+1和lock了block的效果一样,都不会基于已经共识的高度再有+2/3的prevote投票的

所以Tendermint不分叉是基于它是BFT共识,然后加上LockedBlock共同完成。

(LockedBlock的意思是在precommit阶段把已经达成+2/3prevote的块锁住,赋值给LockedBlock)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值