经过上面的介绍,我们都知道区块链是分布式(去中心化)系统。分布式系统必然面临着一致性问题,各个分布在不同地址的几点如何形成一致的账本,达成一致性的过程我们称之为共识。
分布式系统的共识达成需要依赖可靠的共识算法,共识算法通常解决的是分布式系统中由哪个节点发起提案,以及其他节点如何就这个提案达成一致的问题。通常我们常见的算法有PoW、PoS、DPoS、PBFT
PoW
PoW是英文Proof of Work的缩写,意思就是工作量证明,按你的工作量获取出块权,简单的解释就是所有参与人就产生随机数,这个数在小数某个数时就可以,实际上的算法要复杂的多,采用POW算法的优点是,安全, 完全的去中心化, 可相对的会浪费大量的算力投入到没有实际意义的计算中。
PoS
PoS是Proof of Stake的缩写,意思就是股权证明,按你的股权去获取出块权,简单的说就是你有多少资产就有多少出块的权利,PoS相对于PoW的优点是提高了处理效率,但是往往股权都会越来越集中,被攻击的可能性也会增大,并且过于中心化。
DPoS
DPOS 是英文Delegated Proof of Stake的缩写,意思是委托权益证明,和投票有些相似:在DPoS共识制度下,会选出一定数量的代表,来负责生产区块,这些代表是怎么选出来的,是持有股权的所有人投票选出。DPoS算法比PoS更去中心化一些。
PBFT
PBFT是Practical Byzantine Fault Tolerance的缩写,即:实用拜占庭容错算法。这种算法流程比较复杂,也是在现联盟链中通用的算法,我们在下一篇中详细分析。