3DPOS(delegated proof of stake,代理权益证明)机制
3.1DPOS由来
我们聊DPoS时,为什么要从BM聊起呢,其实,这和聊比特币绕不开中本聪一样,DPoS是BM一手创造的。DPoS不是独立提出的共识算法,而是直接被BM应用到比特股项目中,在稳定运行了3年多后,又接着被BM构造成可复用的区块链工具箱:石墨烯。
虽然应用得很早,但DPoS算法直到2017年才被BM单独拎出来作了一篇“DPoS技术白皮书”,这期间伴随着比特股、Steemit、EOS三个项目的依次发布。
那么到底BM是谁,市场上对这个人的评价为什么富有争议呢?或许我们从了解BM开始,才能体会到DPoS的精髓。
BM的本名是Daniel Larimer,由于他的GitHub昵称是ByteMaster,所以才被称作BM。BM是比特股、Steemit、EOS项目的创始人,与年少成名V神的辍学经历不同,BM 2003年毕业于弗吉尼亚理工学院,获得计算机学士学位,算是正经的科班出身。
BM曾直言不讳地说到:“我的人生目标就是找到自由市场的方案来保护生命、自由和财产”。他认为要达成这个目标,就必须要从货币开始。2009年,他怀揣梦想开始了数字货币的事业,他先发现了比特币,于是不遗余力地推广着这个项目。然而在2010年,BM指出中本聪10分钟一次的交易确认时间太长了,这样的话,性能会是一个瓶颈,然而这样的想法却遭到了中本聪的暴击:看不懂就算了,我没时间搭理你。
于是,BM觉得比特币不是希望,便着手开发第一个项目——比特股,同时创造出DPoS,把自己的高性能共识算法想法形成了实践。在这里,我们可以看出DPoS与其他共识机制的第一个区别,就是交易确认时间短。
2014年,当V神还在到处奔走,开始发起以太坊项目的众筹时,当很多项目还是基于比特币的微创新时,比特股就已经横空出世了。所以比特股一跃成为了当时的明星项目,它的口号是“Beyond Bitcoin”,在这里我们可以感受到极强的攻击性和目的性,也正因为如此,日益强大的比特币社区被树在了它的对立面。
比特股一共有2个版本,比特股在1.0版本之前,某些版本甚至都没有提供向下兼容。虽然后来正式发布了1.0版本,似乎并没有改善多少。糟糕的使用体验,庞大的系统资源开销,还是让尝鲜的用户逐渐流失了。这时候BM利用了自己手里超过1/3的记账节点,在没有达成社区共识的情况下,强行增发了比特股总量。这一招几乎就是比特股项目的灭顶之灾,社区人就此纷纷退出。虽然社区萎靡,BM还是继续了开发工作,将比特股升级到了2.0,它的易用性和稳定性勉强可以满足正常使用。随着比特股2.0的发布,BM也同时发布了石墨烯工具箱。尽管在技术上提供了改进,但比特股社区最终选择让BM离开比特股项目,比特股回到了另一位币圈大佬——巨蟹的手里。随后比特股的发展陷入了长期的低迷,长期在2分,最多到2角钱左右,直到去年的牛市,比特股涨到过2元人民币。
虽然最终离开了比特股,但是BM依然会参与BTS紧急Bug修复工作。与此同时,BM又开发了一款旨在颠覆传统互联网媒体行业的项目——Steemit,这也是开辟了基于区块链Token内容社区的先例。Steemit也是基于石墨烯技术的,它非常流行。
2017年,随着Steemit的成熟,BM宣布退出了Steemit,开展了下一个项目EOS。EOS的目的是要做出区块链行业的操作系统,为开发者提供底层功能,包括并行运算、数据库、账户系统等等。EOS一经发布,就广受关注,短短五天内,EOS便筹集到了数亿美金,它的代币销售规模在目前为止是最大的。现阶段的EOS超级节点竞选也体现出了BM强大的影响力。 EOS项目影响力也越来越大,BM因为与V神在区块链上的理念不合,也经常互怼,他们争论的重点是二人对于去中心化的前提假设不同,这也造就了两个不同的设计逻辑,所以,两人的争论过程可以说是非常地吸引眼球了。我们从BM的个人经历、项目经验、影响力都可以看出BM是一个很懂金融的天才式程序员,同时也是一个有点刚愎自用导致与社区矛盾不断的意见领袖。
3.2DPOS详解
(1)DPOS基本原理
DPoS是由社区选举的可信帐户(代理人,得票数排行前101位或者21位,也可以是其他数字,具体由区块链项目方决定)来创建区块。为了成为正式代理人,用户要去社区拉票,获得足够多用户的信任。用户根据自己持有的加密货币数量占总量的百分比来投票。DPoS机制类似于股份制公司,普通股民进不了董事会,要投票选举代表代他们做决策。
这101个代理人可以理解为101个矿池,而这101个矿池彼此的权利是完全相等的。那些握着加密货币的用户可以随时通过投票更换这些代表(矿池),只要他们提供的算力不稳定,计算机宕机、或者试图利用手中的权力作恶,他们将会立刻被愤怒的选民门踢出整个系统,而后备代表可以随时顶上去。
(2)DPOS运行机制
DPoS 共识机制引入了“受托人(代理人)”的角色。
DPoS 的运作机制如下:
1)所有持币者先选出代理人负责签署区块:选举过程比较类似由股东会选举出董事会(101人代表),代替股东会做出日常营运决策。授权董事会后,决策会更有效率 (相较于PoW每10分钟产生一个区块,DPoS每3秒钟即可产生一个区块。)
2)与PoW相同,DPoS的规则也是最长链胜出。其中每个代理人(共101个)必须按照生产排程,轮流产生区块。拿一间工厂作为比方,假设排程排定A、B、C分别轮早、中、晚班生产,A在晚上是无法刷门禁卡进入厂房生产的,同样地,C在早班时段也是无法进厂房的。
3)今天有一些恶意的节点生产了分叉区块,假设A、C都是诚实的节点,只有B节点是恶意的,由于B产生区块的速度(每9秒只能产生1个)慢于A、C合力产生区块的速度(每9秒产生2个),根据最长链胜出的规则,诚实的节点还是会胜出。
4)同理,因为一个节点要产生重复两个区块的速度必定慢于诚实区块产生的速度,所以根据最长链胜出的规则,诚实的节点还是会胜出。
5)如果今天A、B、C三个代理人的网络有段时间是碎片化、各自为政的呢?在短期内的确有可能三链并行,但一旦网络连结恢复,短链自然会向最长的链回归。
因为受托可签署人数为奇数101,所以两大派系势均力敌僵持不下的情况不会维持太久,最终势必会有其中一方的链更长。
(3)恶意节点的惩罚机制
注册成为候选代理人需要支付一笔保证金,就像是参与民意代表选举前缴纳的保证金一样,一般来说担任受托人约两周后才可达到损益平衡,这促进了受托人的稳定性,确保至少会挖满两周的矿。
惩罚机制为:不按排程产生区块的节点将在下一轮被投票剔除,也会被没收之前缴纳的保证金。
DPoS是效率较PoW和PoS更高、产生区块的速度更快;
虽然恶意的节点将在下一轮投票被踢出,但单个恶意区块在短期仍有可能是有效的状态。短期虽然可能存在恶意区块,但长期下来,可以透过受托人的自主选择来回归链条的有效性
假定现在总共有3个受托人A、B、C,D加入排程后,只要确认之前的区块中,有2/3以上个受托人遵循的链是哪条就可以了。
(4)DPOS优缺点
优点:
1)能耗更低。DPoS机制将节点数量进一步减少到101个,在保证网络安全的前提下,整个网络的能耗进一步降低,网络运行成本最低。
2)更加去中心化。目前,对于比特币而言,个人挖矿已经不现实了,比特币的算力都集中在几个大的矿池手里,每个矿池都是中心化的,就像DPoS的一个受托人,因此DPoS机制的加密货币更加去中心化。PoS机制的加密货币(比如未来币),要求用户开着客户端,事实上用户并不会天天开着电脑,因此真正的网络节点是由几个股东保持的,去中心化程度也不能与DPoS机制的加密货币相比。
3)更快的确认速度。每个块的时间为10秒,一笔交易(在得到6-10个确认后)大概1分钟,一个完整的101个块的周期大概仅仅需要16分钟。而比特币(PoW机制)产生一个区块需要10分钟,一笔交易完成(6个区块确认后)需要1个小时。点点币(PoS机制)确认一笔交易大概也需要1小时。
缺点:
1)投票的积极性并不高。绝大多数持股人(90%+)从未参与投票。这是因为投票需要时间、精力以及技能,而这恰恰是大多数投资者所缺乏的。
2)对于坏节点的处理存在诸多困难。社区选举不能及时有效的阻止一些破坏节点的出现,给网络造成安全隐患。
3.3EOS的共识机制:BFT-DPOS
(1)EOS项目初期采用DPOS
EOS 项目刚刚发布的时候的共识机制是 DPoS,DPoS(Delegated Proof of Stake),意思是代理权益证明共识机制。相比于比特币的PoW机制,DPoS不用浪费算力资源争夺记账权,其通过赋予EOS通证持有人投票权,选出21个“超级节点”来担任记账人的角色,保证整个网络的正常运行。21个超级节点轮流负责记账,每一个区块产生后,会按照顺序传递到下一个超级节点中,第二个超级节点要负责打包新的区块,同时确认上一区块的内容,当某一区块被至少2/3的其他超级节点(不低于14个其他节点)确认后,该区块将被确认为不可逆区块。
这种共识机制出块速度为 3 秒,交易不可逆需要至少45秒(从区块生成到确认)。为什么需要 45 秒呢?因为 DPoS 下,见证人生产一个新区块,才表示他对之前的整条区块链进行了确认,表明这个见证人认可目前的整条链。而一个交易要达到不可逆状态,需要至少2/3的其他见证人确认,在 EOS 里就是 14个见证人。我们假设一个交易被包含在 1000 号区块中,需要其他14个见证人轮流出块至 1014号区块,这样才能“收集”到15个见证人(包括区块生成者和其他14个见证人)对此交易的确认。至少2/3 的其他见证人确认的交易,就是不可逆的交易了,这就是 45 秒确认时间的由来。
(2)BFT(Byzantine Fault Tolerance,拜占庭容错算法)
Lamport对该问题的研究指出“对于拜占庭问题来说,假如节点总数为N,叛变将军数为F,则当N>=3F+1时,问题才有解。”也就是说当一群节点中恶意节点的数量少于总数量的三分之一时,这群节点便可通过某种协议达成对某一状态的共识,而这种协议就是BFT协议。
为了改进传统的DPoS算法,我们可以借鉴BFT(Byzantine Fault Tolerance,拜占庭容错算法)的机制。在传统DPoS共识机制中,我们让每个见证人在出块时向全网广播这个区块,但即使其他见证人收到了目前的新区块,也无法对新区块进行确认,需要等待轮到自己出块时,才能通过生产区块来确认之前的区块。
在新的机制下,每个见证人出块时依然全网广播,其他见证人收到新区块后,立即对此区块进行验证,并将验证信息立即反馈出块见证人,不需等待其他见证人自己出块时再确认。
从当前的出块见证人看来,他生产了一个区块,并全网广播,然后陆续收到了其他见证人对此区块的确认,在收到至少2/3的其他见证人确认的瞬间,区块(包括其中的交易)就不可逆了。交易确认时间大大缩短,从45秒缩短至3秒左右(主要为等待生产区块的时间)。这种机制可以称为初级版的BFT-DPoS共识机制。
(3)BFT-DPOS
在最早的EOS技术白皮书中,EOS主要采用上述的DPoS机制每3秒来产生一个区块,而在最新版的EOS Dwan 3.0中为使区块链系统有更快的出块速度,EOS 采用了BFT-DPoS共识机制从而达到了0.5秒的出块间隔。该机制的具体过程是:EOS的持有者通过投票系统对各个超级节点竞选者进行投票,选出21个节点为超级节点。然后这21个超级节点以自身的网络资源状况商议出一个出块权拥有顺序,在每个超级节点拥有出块权时,以间隔为0.5秒(0.5秒是EOS团队通过大量实验测试得出的当前网络状态下可达到的最小的稳定状态下的出块间隔)连续产生12个新区块,然后切换到下一个超级节点连续产生之后的12个区块。
该方式可以保证一个超级节点可以连续以0.5秒的间隔产生区块,因为在同一超级节点产生新区块时不受当前网络状况的影响,但由于网络的延迟很难使得其他节点对已经产生的区块进行确认,使其成为不可逆区块。因此EOS引入了 BFT协议,当超级节点A产生第一个新区块后,A将该区块进行签名并广播给其他超级节点,其他超级节点对该区块进行验证后对其进行签名并返回给A节点,当A节点收到来自14个不同节点签名的区块后,该区块就成为不可逆区块串联到之前的区块链中(以0.5秒产生新区块的过程和对区块进行BFT协议共识的过程在超级节点中是同时进行的,即确认过程不影响超级节点产生新的区块)。EOS团队通过大量实验测试,在当前的网络状况下,一个超级节点广播一个新区块并确认的过程可在1秒的时间内完成。因此,每个新区块的产生到成为不可逆区块最多需要1.5秒的时间,这就使得跨链通信的时延大大缩小。因为一个区块链在引入另一条区块链的交易状态时必须等待其成为不可逆交易,所以两个基于EOS的区块链在3秒钟以内就可以进行一次来回的通信,而以太坊进行类似的通信需要9分钟,比特币需要3小时以上。
上述过程虽然可以保证同一超级节点产生新区块时可以达到0.5秒的间隔,但当切换超级节点产生区块时,由于网络延迟使得上一节点产生的最后几个新区块有可能被该超级节点忽略。为解决此问题,EOS选用了确定顺序的超级节点轮流出块,比如以纽约(美国东海岸)、芝加哥(美国中部)、洛杉矶(美国西海岸)、日本东京、中国上海这样的顺序,该顺序使得上一节点产生的最后区块传播到下一节点时有最小的延迟,从而避免下一个超级节点忽略上一节点产生的区块。如果是随机定义出块权的超级节点,那么在现有的网络条件下,出块间隔只有控制在3 秒时才可保证下一节点较大概率上不会忽略上一节点产生的区块。
为了挖掘EOS系统的性能,Daniel Larimer在以上基础上又进行了修改。首先,他将出块速度由3秒缩短至0.5秒,理论上这样可以极大提升系统性能,但带来了网络延迟问题:0.5秒的确认时间会导致下一个出块者还没有收到上一个出块者的区块,就该生产下一个区块了,那么下一个出块者会忽略上一个区块,导致区块链分叉(相同区块高度有两个区块)。
比如:中国见证人后面可能就是美国见证人,中美网络延迟有时高达300ms,很有可能到时美国见证人没有收到中国见证人的区块时,就该出块了,那么中国见证人的区块就会被略过。
为解决这个问题,Daniel Larimer将原先的随机出块顺序改为由见证人商议后确定的出块顺序,这样网络连接延迟较低的见证人之间就可以相邻出块。
比如:日本的见证人后面是中国的见证人,再后面是俄罗斯的见证人,再后面是英国的见证人,再后面是美国的见证人。这样可以大大降低见证人之间的网络延迟。使得0.5秒的出块速度有了理论上的可能。
为了保证万无一失,不让任何一个见证人因为网络延迟的意外而被跳过,Daniel Larimer让每个见证人连续生产 6个区块,也就是每个见证人还是负责3秒的区块生产,但是由最初的只生产1个变成生产6个。最恶劣的情况下,6个区块中,最后一个或两个有可能因为网络延迟或其他意外被下一个见证人略过,但6个区块中的前几个会有足够的时间传递给下一个见证人。
BFT-DPOS共识机制总结
(1)21个超级节点(见证人节点) + 100个备选见证人节点;
(2)0.5秒出块时间 + 1秒全网确认;
(3)每个见证人节点通过协商方式确定各自出块顺序,并且每轮产生12个区块以减少网络延时的影响,见证人间按顺序处理交易,可尽量减少地理影响;
(4)当21个见证人的15个确认交易后,交易即不可逆转;
(5)当达到不可逆转状态后,就无法分叉。
BFT-DPOS共识机制缺点
(1)不是完全去中心化,可能会有多个中心之间共同串通而损害整个社区利益的行为。
(2)依赖于投票机制.
投票制度其实有以下问题,首先有可能最后投票的参与度会很低,影响投票结果。其次也会可能有这种情况,例如用户把币都存在了交易所,交易所有可能会代替他们去投票,但是用户并不是很在意到底交易所会把票投向何处。也就是说有时候代币持有者的兴趣点和用户的是可能不完全一样的。