区块链中常用共识算法总结(持续更新)
2019-03-25 本文已影响0人
洞链
1. POW(Proof Of Work)
- 一句话介绍:劳动致富,多劳者多得!
- 描述:POW中文翻译是工作量证明。采用此共识的数字货币有比特币、莱特币等。工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这种系统要求得到证明的过程是低效且漫长的,可是校验则是高效且迅速,概括起来就是求解难,验证容易。
比特币是第一个区块链应用,同时也是最著名的应用之一,它所使用的共识机制就是POW。那么具体是怎么实现的呢?
在比特币中,使用了SHA256这种哈希函数作为求解手段。SHA256有以下特征:
- 是一种散列函数,即相邻的x1和x2,求得的f(x1)和f(x2)差别极大。
- 不可逆推,给定了f(x)的值,推断不出输入值。
- 不存在比穷举更好的方法,可以使f(x)落在特定的范围。
实际使用过程中,每个节点需要打包的交易数据相同,再从尾部加一个随机数(节点自己选)作为整体输入来求输出值,把结果和当前的挖矿难度对比(要求输出值前x位为0),满足条件则向附近节点广播;不满足则更换随机数继续求解。最快求得解的节点,则可以视为挖矿胜出,取得其他节点的共识。
目前比特币已经吸引了全球大部分的运算能力,其他再使用PoW共识机制的区块链应用很难获得相同的计算能力来保障自身的安全,从而无法复制比特币的辉煌;同时由于挖矿造成大量的资源被浪费,共识达成的周期很长,导致了比特币的TPS(transaction per second,每秒执行事务数量)极低,只有个位数。
- 优点:
算法简单,容易实现;
节点间无需交换额外的信息即可达成共识;
破坏系统需要投入极大的成本; - 缺点:
浪费能源;
区块的确认时间难以缩短;
新的区块链必须找到一种不同的散列算法,否则就会面临算力攻击;
容易产生分叉,需要等待多个确认;
永远没有最终性,需要检查点机制来弥补最终性;
2. POS( Proof of Stake)
- 一句话介绍:持有越多,获得越多。
- 提出目的:解决POW51%攻击
- 描述:
不同的旷工计算不同的数学难题,这个数学难题和你的拥有币的时间/币的多少持反比例。拥有币时间越长,难度越低。持有币数量越多,难度越低。
POS通过区块链系统内部的虚拟资产来管理安全性,根据节点持有的通证数量或者时长来决定节点享有的权利大小。区块链系统的参与者锁定他们在该区块链上持有的虚拟资产(Coin或Token),他们会签署消息以达成一致意见。只有那些已经成为系统一部分的参与者才能够决定下一个区块的内容。
PoW共识算法从经济角度,可以自然做到防止区块链分叉(区块链分叉的本质就是网络各节点对区块链的生成产生分歧,无法达成共识)。但是PoS则需要精心设计好相应的规则来防止分叉,例如PoS可以设定惩罚机制,参与挖矿的矿工被要求锁定一定数量的虚拟资产。如果他们被侦测到了存在不当的行为,则系统会没收全部或部分被锁定的虚拟资产。
- 优点:
在一定程度上缩短了共识达成的时间;
不再需要大量消耗能源挖矿。 - 缺点:
还是需要挖矿,本质上没有解决商业应用的痛点;
所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。例如,以太坊的DAO攻击事件造成以太坊硬分叉,而ETC由此事件出现,事实上证明了此次硬分叉的失败。
3. DPOS(Delegated Proof of Stake)
- 一句话介绍:POS的升级版
- 提出目的:POW/POS浪费巨量算力。
- 描述:
DPoS机制,中文名叫做股份授权证明机制(又称受托人机制),代表数字货币是EOS。它的原理是让每一个通证的节点进行投票,选出集中多数票的节点,例如100个,然后这些节点会行使类似POS的权力。
DPOS利用利益相关方批准投票的权力以公平和民主的方式解决共识问题,所有网络参数,从费用估算到块间隔和交易规模,都可以通过选定的代表进行调整。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。 - 优点:
大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证;
更加去中心化的机制;
拥有更高的处理效率 - 缺点:
整个共识机制还是依赖于token,很多商业应用是不需要token存在的。
4. PBFT(Practical Byzantine Fault Tolerance)
- 一句话介绍:解决一切出现的故障
- 描述:拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这些协议还要满足所要解决的问题要求的规范。
PBFT算法的核心理论是n>=3f+1
n是系统中的总节点数,f是允许出现故障的节点数。换句话说,如果这个系统允许出现f个故障,那么这个系统必须包括n个节点,才能解决故障。
- 优点:PBFT在很多场景都有应用,在区块链场景中,一般适合于对强一致性有要求的私有链和联盟链场景。(Hyperledger Fabric 在 0.6 版中应用了 PBFT,而在 1.0 版中放弃了 PBFT,转而采用效率更高的 Kafka,支持单点和集群两种方式,由 Kafka 直接给交易排序和出块)
参考文档
https://www.huoxing24.com/newsdetail/20190129104157764083.html
https://blog.csdn.net/yuanfangyuan_block/article/details/84593786