区块链从其开放程度上来讲,可以分为公有链,联盟链和私有链。
从不可能三角看三种链的特性:
公有链:去中心化程度最高,但效率不及联盟链和私有链。
联盟链:系统半开放,去中心化程度比公链低,但是效率较高。
私有链:系统封闭,外界无法参与,效率和安全性较高。但和中心化的系统没有本质区别。
目前来看区块链技术难以同时兼顾好安全、高效、去中心化这三个方面,所以在实际的商业应用中,要根据不同的应用场景需要来进行选择。
市面上区块链分类:
POW(工作量证明机制):
通俗来讲就是所有人都用计算机硬件,同时计算同一道数学难题,谁先算出来,谁就获得生成区块的权利。所以掌握的机器算力越高,收益越多。
第一个采用POW共识机制的是比特币。 后面也有不少POW的链实际是基于比特币的开源代码做了些调整后发出来的。
POS(权益证明机制):
和POW依靠算力不一样,POS生成区块是根据拥有权益多少来决定的。 POS共识认为拥有权益多的人会做出相对更合理的决策。 所以谁持有权益越多,收益越多。
DPOS(委托权益证明机制):
DPOS主体原理和POS相同,在POS基础上加了选举的功能。 由每一个持有权益的人先投票,选举出代表(比如EOS中选出21个超级节点),再由这些代表们轮流产生区块。
还有其它一些共识机制,比如POA(权威证明),POC(容量证明)等,其实核心都是怎样相对公平公正的选举出产生区块的节点。
pbft/sbft/hotstaff/tendermint (联盟链共识机制):
这些联盟链的共识算法,实际都是来源于1999年麻省理工学者的一篇论文:Practical Byzantine Fault Tolerance Algorithm(可实用拜占庭容错算法),在此基础上做一些改良。 比如tendermint引入了节点权重的概念,权重高的节点在轮流打包的过程中,打包概率会高一些。
联盟链共识一般采用的是三阶段提交法:打包节点产生一个区块,全网广播给区块链网络中所有节点(提案阶段),所有节点验证区块和提案内容,并将验证结果全网广播(预确认阶段),所有节点再次验证区块和预确认消息,验证通过后写入区块链(确认阶段)
raft(私链共识):
私链共识采用的是二阶段提交法:区块产生节点准备好区块并广播给其它节点(准备阶段),其它节点验证区块(一般是验证区块的签名和区块hash这类信息),验证通过后就直接写入区块链(确认阶段)。