共识机制之DPOS (Delegated Proof Of Stake)
什么是权益委托证明Delegated Proof-Of-Stake, DPOS
权益委托证明(Delegated Proof-Of-Stake, DPOS,中文也有翻译作"委托股权证明"、"受托人机制"、"股份授权证明机制"等等)。有很多中文翻译版本,但意思万变不离其中,总可以归纳为每个持有(权益、股权、股份)的帐户人将投票(授权、委托)予某位代表,在系统中获得最多票数的前101位代表就可以按分配到的时间段轮流产生区块(出块),而这些代表成功出块后将可以收到产生这些区块平均交易费作为出块的报酬,如果这些代表出块不成功,将可能会被淘汰,由投票产生的新代表所取代。
听起来,有没有觉得像现时的议会制度我们来类比一下:
议会制度-每位市民都投票给予某位议员代表,而获得最多票数的指定数目议员就能晋身议会,为市民们争取权益,市民最终得到的权益亦会从于他所投的那位议员的工作上体现出来,如果这位议员无法为这群选他出来的市民们争取权益,将有机会被淘汰,并再由下一届任期内投票产生的新议员所取代。
每位市民-持有(权益、股权、股份)的帐户人
代表-议员
争取权益-出块
这是对DPOS 具体的比喻,相信不难理解,接下来看看背后的原理及实际运作:
首先,在DPOS中,任何时候,都是以最长链胜出,即当一个诚实的节点看到一个更长的有效链,它都会从当前分叉切换到这条更长的有效链。
DPOS共识机制最主要是包括选择区块产生者、调度区块产生及为确定性生产者洗牌
选择区块产生者
在DPOS 共识机制中,每次循环,每个帐户人都拥有一票选举代表(称为批准投票,代表可视为超级节点或矿池)或成为代表参选,获票前N 名的代表被会被选择(一般数量为奇数个),而代表的个数N 则由要由至少50 %的投票人认为足够做到「无关键中心化」,于设置完代表的个数N 后,同时亦必须投票给至少这个数目的代表,且不能投票数量超过这个上限。
调度区块产生
选出代表后,这些代表将会被随机排序,并按这个固定顺序每隔2秒就获得一个出块的机会,并且需在块周期内完成出块(如果其中某位代表在这段时间间隔内并未出块或试图利用手中的权力作恶,将会被跳过,且有机会被淘汰,由下一轮投票产生的新代表取代),然后轮到下一位出块,直至完成整个循环周期,每个周期结束后,这些代表都要被"洗牌"一次;
块周期(Slot):亦称为时段周期,每个块为10 秒,即一个时间;
循环周期(Round):有N位代表,每位代表出块一次,即每出N 个区块为一个循环。完成一次完整的循环周期需要N * Slot (秒);
奖励周期:根据区块链高度,设置里程碑时间(Milestone),在某个时间点调整区块奖励。
确定性生产者洗牌
为确保区块产生时,不会总是忽略某位区块产生者,共且每当形式多个拥有相同数量产生者的分叉时,要打破平局。所以每完成一个循环周期(即出N个区块)后,区块生产者都会被随机排序,亦称之为"洗牌"。
以下是在各种情况下简化的 DPOS 模型:
首先假设有3个区块,生产者A、B、C。因为达成共识要求2/3+1多数来裁决所有情况,在这个简化的模型中假设生产者C是打破僵局的角色。
正常操作
正常操作下,每三秒钟区块生产者轮流生产一个区块。假设每个人都按部就班轮流生产,那么这将生产出最长的链。需要指出的是,块生产者在自己轮次之外的任何时间段生产出来的块都是无效的。
少数分叉
会有高达三分之一的恶意或故障节点可能创建少数分叉。此时,少数分叉每9秒才能产生一个块,而多数分叉每9秒可以产生两个块。如此,另外诚实的2/3多数将永远比少数的链长。
离线双重生产的少数分叉
离线的少数节点可以试图产生无限量的分叉,但是他们产生的所有分叉都将比多数人的那条链短,因为少数分叉在出块速度上肯定比多数人的链慢。
网络碎片化
网络完全有可能碎片化,这种情况下没有任何分叉拥有多数区块生产者。这种情况下,最大规模少数派的分叉生产的链会最长。当网络恢复通讯后,较小的少数群体会自然转到最长的那条链,由此恢复明确的共识。
有可能存在这样三个分叉,其中两个最长的分叉长度相同。在这种情况下,第3个最小的分叉的区块生产者重新加入网络时会打破平衡。区块生产者总数为奇数,所以不可能长期保持平局。
在线少数的双重生产
在这种情况下,少数节点B在其产生区块时间段内产生了两个或更多的区块。下一个轮到产生区块的生产者(C)可以选B产生的任何一种区块继续构建链条。如此,C的选择就成为最长的链,而所有选择B1的节点都将切换分叉。无论少数不良生产者会生产多少分叉区块也无关紧要,它们被纳入最长链的时间永远不会超过一轮。
最后不可逆块
当网络碎片化时,多个分叉有可能长时间持续增长。长远看最长的链将胜出,但观察者需要一种方法来确认一个区块是否确实在增长最快的那条链上。这可以通过观察来自2/3+1多数块生产者的确认来决定。
下图中,块B已被C和A确认,这代表了2/3+1多数确认。如果假设2/3的生产者是诚实的,就可以断定没有其它链会比这个链长。
注意,这个“规则”类似于比特币的6个模块确认“规则”。有些聪明人也许可以设计一系列事件让两个节点最终出现在不同的两个最后不可逆区块上。这种案例要求攻击者能完全控制通信延迟,并且在几分钟内两次,而不只是一次,使用该控制。即便这真的发生了,最长链胜出的规则仍然适用。这种攻击胜出的可能性近于0,且经济影响微不足道,因此不足为患。
生产者法定人数不足
如果出现生产者法定人数不足的这种不太可能的情况,少数人还是可以继续出块。利益持有方可以把更改投票的交易也包括在区块里。这些投票可以选出一组新的生产者,将生产参与率恢复到100%。这样一来,少数链将最终超过其他参与率不足100%的链。
在此过程中,所有观察者都知道,在参与率超过67%的链形成之前,网络状态是不稳定的。选择在此条件下进行交易的人所承担的风险不亚于那些选择接受不到6个确认的比特币人。他们这样做的前提是他们认识到存在这样的小可能性,即共识也许最终在一个不同的分叉上建立起来。实际上,这种情况比接受少于3个确认的比特币交易要安全多了。
多数生产者舞弊
如果多数生产者变得腐败,那么他们可以产生无限数量的分叉,每个分叉都似乎有2/3多数确认向前演进。这种情况下,最后不可逆区块算法将回归到最长链算法。最长链就是为最大多数所批准的那条链,而最大多数将由少数剩下的诚实节点决定。这种行为不会持续长时间,因为利益持有方最终会投票换掉生产者。
交易作为权益证明(TaPoS)
当用户为一个交易签名时,他们会对区块链的状态做出一个假设。该假设基于他们对最近几个块的看法。最长链的共识发生的改变有可能使签名者之前的假设失效。
TaPoS所有交易都包含最近一个块的散列,如果该区块在链历史中不存在了,则这些交易就是无效的。任何在孤儿分叉上给交易签名的人,都会发现该交易无效且无法迁移到主分叉。
该过程的一个副作用是可以抵御试图产生替代链的长期攻击。每个利益持有方在交易时都直接对区块链做出确认。随着时间推移,所有的区块都是由所有利益持有方确认过的,而伪造链是无法复制这点的。
从以上各种情况看来,采用DPOS 共识机制的系统非常稳健且很难被破坏。
优缺点
优点
大大减少记帐及验证节点的数量,达到秒级验证; 出块效率高; 极少机会出现分叉; 系统鲁棒性、容错性强;
与POW根据拥有的算力随机出块、POS根据拥有财产随机出块,DPOS不一样的是根据拥有(权益、股权、股份)来投票,选出的代表将按已分配的顺序轮流出块。
而且POW、POS 每次出块,都需要被整个网络所有节点验证确认,所以大家可以发现这两种共识机制的设计将会严重拖慢整个系统出块的速度。
DPOS则是透过不同所有帐户人所投票选出的一小群节点,由这一小群节点进行出块、验证、签名及互相监督,可大大减低(例如:POW 需要挖矿出块)而产生的算力成本,而且DPOS 每轮选出的代表们的出块顺序是已确定的,故此,每个出块的代表可以直接与前后区块的代表直接建立连接,从而保证能迅速出块,大大提升出块效率,从而做到秒级验证。
缺点
在网络节点较少的情况,选出的代表自然较少,从而导致代表性不强,且有机会出现无法完全「无关键中心化」; 不适合不存在代币的商业应用;
总结
DPOS 作为POW 和POS 的进化版本,虽不能说是完全「无关键中心化」,但从本质上解决了POW 的算力严重浪费、矿工中心化;POS 富者越富;两者出块效率均非常慢、硬分叉、安全等问题,换来性能和安全性几何级数的提升,同时带来更平等的共识机制。
选择一个合适的共识机制作为系统的核心,这将毫无疑问地影响整体系统的运作、发展、瓶颈,越来越多的虚拟货币开始采用DPOS 或其变种作为它们的共识机制,例如:BTS、 Steem、EOS、Lisk、Lightning Bitcoin、Shift、ARK......等等,BTS已成功运行三年多,交易速度更是极快,每秒能处理过千笔的交易,出块时间更能达至秒级验证,而且Steem 更已进行了19次无缝硬分叉,DPOS 的共识机制成效有目共睹,虽优点较多,但亦有其缺点。相比于POW、POS、PBFT 等等的共识机制,并却不能说DPOS 为最优的共识机制,因为选择共识机制的关键是与应用场景高度相关的,并按实际情况选择的才是最优的共识机制。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。