本文介绍的几种共识算法(PoW、PoS、DPoS、PoC)都存在着一定的可能性:即通过资本投入来达到垄断算力的可能性,从而削弱去中心化的目的。而FBA可以被认为是目前最去中心化的分布式共识现算法。
目前,各种主流的区块链共识算法(本文的讨论内容只只限于公链)主要有: 1)PoW(Proof of Work,工作量证明) 2)PoS(Proof of Stake,权益证明) 3)DPoS(Delegated Proof of Stake,委托权益证明机制) 4)PoC(Proof of Capacity,容量证明) 5)FBA(Federated Byzantine Agreement 联邦拜占庭)
PoW共识算法的运行过程,就是运用算力运行哈希函数(如比特币是运行SHA256哈希函数),并得到哈希函数的运算结果:哈希值。如果得到的哈希值符合本次区块产生的难度约束条件,那么这个哈希值就是一个"幸运数"。谁最早计算出"幸运数",谁就获得本次产生区块的权利,也就是出块权。
比特币的发明者中本聪原来的设计初衷是:希望比特币能通过普通的分布式算力(CPU)来进行挖矿,例如家庭电脑,实现普通用户的低门槛进入和广泛参与,从而实现比特币的高度去中心化。本来,如果人人都使用CPU进行比特币挖矿,是能在较高程度上实现去中心化的。但是,后来一位名叫Laszlo Hanyecz的程序员打破了这种情况,他嫌CPU挖矿效率低,改为使用nvidia 9800 GTX+显卡在Mac OS环境下进行挖矿。原来用普通CPU挖矿至多50枚的单日比特币挖矿产量,通过改为GPU挖矿一下子就提高至上千枚比特币/天。据估计,当时GPU挖矿速度是CPU的800倍!顺便说一下,这位Laszlo,也就是后来促成了比特币发展史上第一次易物交易,花费1万个比特币换了2个披萨的“披萨哥”,比特币的披萨节也由此而来,哈哈!再发展到后面,使用ASIC(Application Specific Integrated Circuit,即专用集成电路)芯片的比特币专业矿机面世,挖矿算力再进一步提高,GPU挖矿也变得落后了,并形成了专业的比特币挖矿矿池,出现了算力高度集中甚至垄断的局面,个人的普通电脑的那么一点算力,在挖矿矿池面前根本不值一提。也就是说,如果现在还尝试使用个人的普通电脑来进行比特币挖矿,基本上挖不到比特币,现在的比特币挖矿已经成为了富人才能玩的游戏,这也违背了中本聪的比特币高度去中心化的设计初衷。
另一方面,PoW共识算法需要消耗大量的电力来执行哈希运算,以此来暴力破解“数学题”来得到"幸运数",从而造成了能源的巨大消耗,这也是PoW的一个明显弊端。但是,不能因此完全否定了PoW共识算法。由于比特币挖矿需要投入巨大的资源(包括人力、财力,如矿机和电力等),进入比特币挖矿的门槛也大大提高了。要想攻击比特币区块链,不是一般人能够做得到的,也就是说,PoW共识算法防攻击能力强,构筑了比特币区块链足够坚固的壁垒,保护着比特币区块链的安全运行。详情可以参考这篇文章: <<比特币挖矿消耗大量电力,有产生实际价值吗?>>
比特币对于挖矿的难度,也就是对"幸运数"的约束条件定义,是可以动态调整的,不能太容易,也不能太难。太容易会导致同一个出块间隔内,有更多的矿工同时计算出"幸运数",从而导致更多的分叉区块的产生。太难会导致出块时间延长。一般来说,使用PoW共识算法的出块速度,一般不能太短,需要留一定的时间来给矿工们进行运算竞争。比特币大约是10分钟出一个区块(会根据前面出块的时间间隔动态调整挖矿的难度,从而保证出块间隔保持在10分钟左右),基于PoW共识算法的以太坊大约是13 秒左右。当然,并不是出块时间一定是越短越好,还有其它方面的考虑,如安全等。但和其它共识算法相比,PoW共识算法的出块速度一般会相对更慢。
如果在同一个出块间隔里有多个矿工同时计算出"幸运数"而产生区块,那么区块链就会产生分叉。其中,总是把分叉链中最长的那一条链视为主链。特别是对于基于PoW共识算法的以太坊,由于出块间隔短,更容易产生分叉
所以可以这样说,PoW的优点是:相对公平,安全性高。缺点是:消耗能源,不环保。出块速度慢
PoS共识算法的运行过程,就是通过抵押代币,并计算抵押的代币数量和抵押时间的乘积,也就是币龄。每次出块时,币龄最大的矿工获得出块权。产生区块后,该矿工获得出块奖励,同时币龄清零并重新开始计算,如此类推。
PoS共识算法因为不是依靠算力获得出块权,不需要预留充足的时间来进行哈希运算竞争,因而出块速度会更快,同时对硬件要求也不高,也不需要消耗巨大的能源,非常环保。PoS共识算法这是它的明显的优点。但它的缺点也显而易见:富人越富,穷人越穷!持有越多的代币,越容易获得出块权,越容易获得出块奖励,从而造成贫富差距逐渐加大,财富会越来越集中在富人手里,穷人的话语权将变得越来越小,不利于去中心化。
2022年9月15日,从PoW转为PoS后的以太坊,能耗降低99%以上,运行速率和转账费率也会得到优化,但据BTC.com以太坊质押数据显示,以太坊质押排名前三质押量占总质押量的占比超过50%。
简单来说,PoS共识算法的优点是:硬件要求低,不需要消耗巨大的能源,出块速度更快。缺点是:去中心化程度不高
使用DPoS共识算法比较出名的区块链项目有比特股(EOS的前身)和EOS(同时使用DPoS共识算法和aBFT异步拜占庭容错算法)。 DPoS共识算法的运行过程,类似于股份制公司的运作。先由代币持有者投票选出若干个见证人(witness),又称为超级节点,再由这些见证人轮流出块。这种做法是在运行效率和去中心化两者中获得平衡。见证人类似于股份制公司里的董事会成员。普通的代币持有者只有进行投票的权利,持有的代币越多,他能投的票数也越多。获得投票数最高的若干候选人将当选见证人。见证人有任期,一般是一周。一周过后重新选举新的见证人。每个区块如果能获得一定比例(EOS为大于2/3)的所有见证人的同意,这个区块就是有效的。区块链上的所有的升级和提议,都必须经过委员会(由所有见证人组成)的同意才能执行。
DPoS共识算法同样不是依靠算力获得出块权,也不需要消耗巨大的能源。由于由数量有限的见证人负责出块,出块速度比PoS更快。比特股的出块速度是可以设置的,最快可以达到1秒,一般设置为3秒。比特股的TPS比较高,可以达到10万笔交易/秒。EOS的出块速度更是达到0.5秒。由于DPoS共识算法比PoS出块更快,因而产生的区块数量更多,对硬件要求比PoS要高,特别是对于见证人节点,硬件要求不低,因为见证人节点是一个全节点,要保存所有的区块,对硬盘和内存都有要求。
见证人数量也是可以设定的,例如EOS的见证人数量是21个。虽然DPoS共识算法也存在着一定的程度的中心化,但见证人是通过选举产生的,而且不是终身制,相对来说不会产生富人越富,穷人越穷的现象。见证人会有出块奖励,而且一般比较丰厚,因此,大家都会想尽办法去竞争当选见证人。但也引申出另外一个问题:贿选。
关于贿选的问题的讨论,可以参考这篇文章: <<我为什么不赞成EOS节点通过分红给投票人的方式进行拉票>>
在正常情况下,使用DPoS共识算法的区块链不会产生分叉。如果由于宕机或网络不通等原因导致区块分叉,DPoS共识算法将自动把分叉链中最长的那一条链视为主链。
总结,DPoS共识算法的优点是:不需要消耗巨大的能源,运行效率更高,出块速度更快,不容易产生分叉。缺点是:去中心化程度不高,容易出现贿选问题
PoC共识算法的运行过程,和PoW有点类似,都是通过运算哈希函数得到哈希值,看看得到的哈希值是否符合本次区块产生的难度约束条件而成为"幸运数",从而获得出块权。不同于PoW,PoC共识算法是预先运行哈希函数,并把运算得来的不同的哈希值写入磁盘,直至写满设定的磁盘容量为止。然后挖矿就是寻找硬盘里面的所有哈希值,看看能否找到难度约束条件的"幸运数"。大家拼的是硬盘的容量,硬盘容量大,存储的哈希值越多,"中奖"的机会就大。同时,PoC共识算法对硬盘的IO性能没有太高的要求。
相比较于PoW,PoC是预先运算哈希函数直到把磁盘写满哈希值为止,后面就不需要像Pow那样每个区块都要不断运算哈希函数进行竞争,所以,PoC不需要消耗大量的电力能源(运行硬盘消耗的电力几乎可以忽略不计),也不需要很高的硬件配置,基本上普通电脑也能运行。
PoC共识算法在2014年就被提出来,比较有代表性的区块链项目有BHD(出块时间:5分钟)和BURST。随着基于PoC挖矿的项目越来越多,一块硬盘甚至同时挖多种使用PoC共识算法的代币。
目前来看,PoC共识算法是一种不错的选择,但还有待时间的检验。如果资本通过堆砌硬盘的方式形成硬盘矿池,说不定也会形成挖矿垄断。目前大部分POC项目都加入了抵押机制,以此来增加大户的挖矿成本,在一定程度上避免超级矿工的出现。
PoC共识算法的TPS要比PoW高,但比PoS和DPoS要低。出块间隔一般在几分钟。
拜占庭共识算法有以下版本: 1) 实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance) 2) 联邦拜占庭协议(FBA,Federated Byzantine Agreement) 3) 授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)
详细可以可以参考这篇文章: <<拜占庭容错共识算法介绍>>
其中,比较适合用于公链的是联邦拜占庭协议FBA。有名的区块链项目恒星币(XLM,由Ripple原创始人McCaleb创立,曾经市值排名前10,目前排名26)使用的恒星币恒星共识协议(Stellar Consensus Protocol,简称SCP)就是基于基于联邦拜占庭FBA发展起来的。SCP是一种基于信任机制,任何人都能参与的共识算法。SCP不依赖于任何硬件资源(包括算力和存储空间),也没有投票选举机制。SCP是第一个可证的安全共识机制,同时拥有四大关键属性:分散控制、灵活信任、低延迟、渐进安全。另一个区块链项目Pi Network(详情见这里)也是使用SCP共识算法。
从去中心化的角度来说,FBA要优于前面提及的PoW、PoS、DPoS、PoC。
FBA的出块速度也比较快,恒星币的出块速度约5秒内。缺点是每笔交易都需要进行大量的通信来进行确认交易的有效性,因而速度上比不上DPoS。
本文介绍的几种共识算法(PoW、PoS、DPoS、PoC)都存在着一定的可能性:即通过资本投入来达到垄断算力的可能性,从而削弱去中心化的目的。而FBA可以被认为是目前最去中心化的分布式共识现算法。
从出块速度来说,DPoS>FBA>PoS>PoC>PoW,DPoS的出块速度最快。
不管是哪种共识算法,都会有它的优势和劣势,不能说哪种是最好的,我们追求的是,哪种更合适我们的场景。
我的公众号:区块链战斗机 我的知乎:https://www.zhihu.com/people/powervip 我的学习笔记:www.study.win
如果你觉得这篇文章写得还可以,请帮忙点个赞,谢谢! 原创作品,版权所有!商业转载请联系作者获得授权,非商业转载请注明出处并保留原文链接。
你的鼓励,我的动力!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!