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