分叉和共识
第一个概念,叫做 consensus,中文叫做共识,就是大家对一个事件,都同意,不光是发生了事件 A 和 B,而且事件 A 先于事件 B 的顺序,都一致认同。
第二个概念,叫做 consensus finality,就是终极共识。意思就是我们在做下一个决定之前,现有这个决定必须是终极的,不能改变的。
第三个概念是分叉,fork。比特币采取的 pow,原理就是在进行哈希碰撞,那么在这个过程中,基本上会出现几个人同一时间达到哈希碰撞的结果。那么 pow 其实是没有终结共识的,一旦出现共识分叉,比特币原则是最长链获胜。 那么短的分叉,就会被放弃。但是在理论上,如果有一帮人,决定就是将这个短分叉持续下去,那么真正的两条链就分出来了,当然事实上大家没有这样做。
第四个概念,就是软分叉,soft fork,就是这个分叉,其实不是共识分歧产生的,而是软件升级导致未升级和已升级软件,还是可以交流。
第五个概念叫做硬分叉,hard fork,就是软件升级之后,已升级和未升级软件之间不兼容。鸡犬之声相闻老死不相往来,这个就是大家通常听到的分叉。
底层共识
底层共识一般是两个阶段,
● 第一个阶段:就是有人提出共识的倡议;
● 第二个阶段:就是大家验证节点对这个倡议进行投票认可,认可完了,共识就形成了。
现在以太坊的共识是POW,大家称为挖矿,挖矿的共识倡议就是猜那个数字,猜出来的矿工就全网广播,其他矿工就用哈希验证,如果验证正确就达成了共识。
POS也是需要以上这两个步骤(POS 不挖矿)。但是这里有一点点区别,就是在提出倡议的机制上面,有两种技术路线:
● 第一种叫做基于链的倡议,就是点币PeerCoin和黑币BlackCoin这些,基本方法就是模拟挖矿的办法,
用一个伪随机数,去发给共识提议的点;然后第二阶段,验证的决定,就看谁的币多,谁的声音最大。
●另一条路子,就是基于BFT算法模式的倡议。
这个主要是tendermint开始做,现在小V的Casper也是切换到这条路了。
BFT是几十年研究的成果了。
它的基本特点,就是每一次共识达成的结果, 都是终极共识,不会发生任何分歧。
POW 的话,比如比特币,有时候会发生两个共识产生,就是两条链平行发展,要等6个区块,
大家矿工自动去最长的那个挖。
以太坊为啥有麻烦呢?
是因为他们想从POW转为POS,中间至少要分两步走:
第一步,就是仍然让现在的POW挖矿来提出共识倡议,但是让新的POS机制来做共识确认;
第二阶段,再把共识倡议这部分转换过来——那么当共识倡议继续进行,但是共识达成这里出不来,就比较麻烦了。