PoW和PoS是目前公有链最常用的共识机制,但是PoW和PoS在系统的处理能力上不足。主要体现在两个方面:一是区块速度不够快,例如比特币平均10分钟出一个区块,以太坊平均15s出一个区块;二是,每个区块的交易容量有限,例如比特币的区块大小在1M左右,大概能够包括2000笔交易。
这样的问题导致了以PoW和PoS做为共识机制的公有区块链能够支持的应用场景(DAPP)非常受限。例如,去中心化的交易所要求的性能至少达到10K TPS。再例如,即时通讯应用,你不可能要求用户等待几十秒才能成功发送或收到一条消息。
究其根源,这是由于去中心化系统本身的特性决定的。根据CAP原则,一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。(参考:CAP原则)
针对这个问题,目前有两个典型的解决思路。
BTC、ETH等的解决思路是,在保持去中心化的前提下,再通过各种链上和链外的技术方案来提升系统的处理能力。典型的链上方案有扩容、分片等,典型的链外技术有闪电网络、雷电网络、plasma等。
EOS的DPOS采用了另外一条解决思路,即牺牲一些去中心化的来达到性能的提升。EOS的DPOS来源于其底层采用的石墨烯。石墨烯是区块链工具组,由比特股团队cryptonomex开发,采用C++编写。(参考:Cryptonomex,Graphene Github)
DPOS共识算法的出块节点(区块生产者)由持币用户投票选举出来,每个用户投票权重按用户的持币比例进行计算。一旦当选任何人都可以参与区块的生产。
EOS区块的生产按21个区块为一轮。在每轮开始的时候会选出21个区块生产者。前20个区块生产者由系统根据网络持币用户的投票数自动生成,最后一名区块生产者根据其得票数按概率生成。所选择的生产者会根据从区块时间导出的伪随机数轮流生产区块。
EOS每3秒生成一个区块,并且在给定的时间点,只有一个合法的区块生产者 。如果在预定的时间点,合法的区块生产者没有生成区块,则跳过该时间点的区块。(来源:EOS DPOS)
EOS项目目前还处于开发阶段,项目还没有投入运行。但是EOS底层采用的石墨烯技术已经比较成熟。基于石墨烯底层的BTS和STEEM可以达到1.5S的平均确认速度和有限条件下实测3300TPS的数据吞吐量。BTS已经成功运行3年多,STEEM也已经成功运行超过1年。另外,石墨烯技术被YOYOW、OpenLedger等知名区块链项目采用,形成了产业趋势。(注:BTS、STEEM的DPOS的大致原理和EOS的DPOS相同,只是在一些细节的参数选择上有所区别,例如,BTS票选的是101个区块生产者。)
EOS通过并行链的方式,号称最高可以达到数百万TPS,并且并行本地链甚至可以达到毫秒级的确认速度。
相对于ETH的Casper(ETH PoS名称),EOS的DPOS的优势还是比较明显的:EOS共识周期短,处理能力远远高于ETH;并且EOS在预防分叉和预防DoS攻击上也更有优势。
但是,正如文章开头所讲的,DPOS设计的逻辑是通过牺牲一定的去中心化来换取系统的性能。那么这点也正是DPOS被攻击最多的一点。
事实上,虽然BTC、ETH等是按照完全的去中心化来设计的,但是目前BTC和ETH的绝大部分算力被控制在少数的矿场手中。(ETH目前还是POW,ETH Casper PoS还在测试中。)从这个角度看,反而EOS的DPOS实际上更能做到去中心化(平均分配权力到21个节点)。
可能完美的去中心化只能存在于理想中。这篇文章《去中心化,不可避免的乌托邦》写的挺有意思,摘录一部分如下:
DPOS完美么? 当然不。但在人类进化到共产主义之前,在政治制度依旧以代议民主为核心,公司制度依旧以董事会为核心的当下,我想不出任何共识机制,能比DPOS更加先进。这种先进性,并非来源于技术,而是来源于我们人类本身。
-------------------
附:希望了解更多细节的可以参考详解DPOS共识算法 和 Bitshares DPOS。