DPOS共识的秘密是什么呢?

EOS向来就是所有人的焦点,可是近来谈及它时,总要后面跟一嘴DPOS:"BM抛弃DPOS",“DPOS不安全”李笑来在文章中直言EOS最大的风险就是DPOS。甚至出一些不怀好意,各种会议也总要说DPOS不好,某某项目的XX共识才是真 ...


EOS向来就是所有人的焦点,可是近来谈及它时,总要后面跟一嘴DPOS:"BM抛弃DPOS",“DPOS不安全”

李笑来在文章中直言 EOS 最大的风险就是DPOS。甚至出一些不怀好意,各种会议也总要说DPOS不好,某某项目的XX共识才是真的棒。关于DPOS到底是什么,笔者穷极百度,也只能找到大众对它粗浅、模糊的评判。查来查去才发现,原来我们几乎没人能真正了解DPOS机制的原理,也很少有一篇浅显易懂的文章告诉你DPOS是什么?

图解DPOS出块

DPOS机制可以简单的分为选举节点,和出块机制两部分。选举出节点的目的主要是服务于出块。但是实际上我们对DPOS的抱怨都集中在前一部分,出块的安全才是DPOS机制的核心。保证出块层面共识才是保证你我资产的重点。下面提到的技术讲解结合了BM对DPOS的解释以及dantheman的《DPOS Consensus Algorithm - The Missing White Paper》

为了更加方便的理解DPOS机制,我们把dpos从 EOS 的21个节点,缩小到3个节点,最小规模来看DPOS运行情况。

正常情况

假设只有3个节点A、B、C,彼此按照顺序出块。完成一次顺序出块为一轮次。当没有节点出错的时候,自然而然形成一条最长链,最长链就是所有节点的共识。

少数作恶节点

在出块过程中,假设C节点是恶意分叉节点,A、B为诚实节点。

因为限制必须按照A-B-C这样的出块顺序,因此C节点只有在轮到自己出块的时间才有机会制造出分叉块。但是紧接着轮到A节点出块时,根据最长链原则,并不会选择跟随C,而会选择原主链。如果C节点执意继续在自己分叉的链条出块,那么在一轮次里,主链产出2个块,分叉链只能产出一个块,主链长度永远2倍于分叉链,安全。

那么其他节点需要有一个判断原链是主链,不会选择到分叉链的办法。这就需要用到不可逆区块这个概念了。例如打开你的 EOS 钱包,就就可以看到每一笔新转账会有一个12个 区块 验证的指示图。每产生一个新的 区块 ,其实都在为上一个 区块 加固。同理,当节点判断该链为主链时,只要看该链中前面的 区块 是否经过2/3+1节点的认可。

例如下图中,2号 区块 是经过3号和4号 区块 链 确认的。也就是经过C、A节点确认的。

网络问题

假设因为网络问题导致A、B、C节点造成通讯中断、延迟。那么A、B、C还是在特定时间出块,会形成三条长度一样的“主链”。当网络恢复时,第一个面临选择主链的节点就决定了哪一条会是最长链。

从图中可以看出,每一个节点都在网络中断中出了2个块,出于利益考量,选择加入另一条链,就是放弃网络中断期间,自己出块的利益。当B、C节点拒绝加入A节点的链条,继续在各自链条出块时,会形成僵局。不过DPOS机制其中有一条可以轻松解决该类问题:会在一定的时间重新排序各个节点的出块顺序,所以当打破僵局的时候,最长链一定会出现,网络问题并不会导致不安全。

超过2/3的恶意节点

如图所示:假设C、A节点为联合恶意节点。当C在出块期间,可以同时出3个分叉块,形成3条链。而A节点也会在三条链上出块,这样三条链都经过2/3节点确认得以存在。这个时候,就需要“最后不可逆块”来确认主链了。

什么是不可逆块?

比特币中,“最长链”就是所有人的共识,每个矿工都可以发动攻击,都可以从一个旧块重新生成一条链来竞争成为主链,只不过你要想赶超已经产生好几个块的主链,需要付出极大的经济成本。是巨大的经济成本构成了 比特币 的不可逆性,越久远的块越不可逆。

而在DPOS里,经过2/3+1个节点确认的块就是不可逆块,而最后一个不可逆块可以决定哪一条成为主链。

在这个问题中,回到时间点5,当B节点产出块后,经过时间6、时间7各节点出块,就代表时间点5出的块,经过了出块的节点:A、B、C三个节点(超过2/3+1)确认,该块就是不可逆块,同样也是目前链最后一个不可逆块。因此可以确认它所在的链1也就成为了主链。

以上简洁版的DPOS共识都可以安全得运行,在真实情况中, EOS 为了确保共识做到了更加安全,有21个超级节点,以及100个备选节点。要是有节点破坏共识,就会被票选下去。有超级节点出现问题,也会由备选节点顶替。可以看到,DPOS共识并没有公众所说得不安全,那么大家对DPOS的误解又在哪里?

对DPOS的误解

随着 区块 链 的快速升温,共识算法虽然在变多。但经过长时间检验、被大众熟知的却没有几个。尤其是在 EOS 自身巨大的光环效应,DPOS被放大在聚光灯下审视、评判、猜忌。其实讨论本是好事,可是基于正确认知的前提之下才可行。

“一票一投”和“一人一投”

我听到过对DPOS最大的非理性评判就是:“一票一投”假民主。诚然在社会生产活动中,人类尽可能的实现一人一投,在各级市县、国家的重要选举中,在每一次的重要岗位变动里,在好声音、相声小品的晋级赛内。社会为了每一个人而努力做到公平公正,一人一投。生为社会的一份子,我感恩这样的机制。但是这并不代表“一人一投”就适用于所有情景,尤其在金融世界里。

自从1606年荷兰发行了面值150荷兰盾的东印度公司股票开始,就很少听到对“一票一投''的反对,发展到现在,社会早已承认了金融世界中的投票制度,甚至你愿意,可以花钱买下一家公司所有权。仔细想来,“一票一投”更深层次的意义在于,你花费了比别人更多的金钱,就拥有更多风险,也理应获得更多的回报和控制权。DPOS共识机制之所以要选择一票一投,就是为了确保投入金钱最多的节点,在共识被破坏,运行不畅的时候,他们会是亏损最大的一方。只有这样的束缚才是有效的,如果持有1 EOS 的人和持有几百万 EOS 的人拥有相同的权力,那才是最大的不公。

去中心化=基础层存储价值?

是否足够的去中心化就可以等价于成为基础层来存储价值?其实用这句话来抨击DPOS根本站不住脚。5月26日,比特金遭受51%的双花攻击,11月29日-12月2日,加密货币Vertcoin遭到了51%双花攻击。不断在发生的例子,已经验证了单纯的共识算法不能保证安全。

我们要知道,不论什么共识,它的终极目的就是为了安全,为了保证存储在其上的价值安全。谈到去中心化,就必须要谈及被标榜为完全去中心化的BTC,难道它真的完全去中心化?前段时间吴忌寒在和奥本聪的算力战开打之前,说过 比特币 价格会受损。结果接下去几天就下跌。相比被矿场主宰的 BTC ,难道DPOS不是更加的去中心化么?

依然在发展的DPOS

合理的看待DPOS共识,并不是完美无瑕的。比如说选举21个超级节点,是否可以添加一定比例的考核,后面100个备选节点的收益是否太低导致积极性缺释,是否出现了一定的贿选情况,又该如何界定以及预防。但是这些问题都是在选举节点内的问题,并不会对出块部分造成影响,真正支撑DPOS的核心依然很健康。

在DPOS面临一些抨击的时候,一些潜在的信息也应该被公众知道。采用DPOS机制的并非只有 EOS 一家,Bitshare拥有101个节点、Steemit拥有21个节点、Lisk拥有101个节点、Ark拥有51个节点、Torn拥有27个节点、 EOS Force拥有23个超级节点。

经BM之手,从Btishare第一次采用DPOS机制距离现在已经有3年了,期间又经过Steemit验证,我们可以看到DPOS机制没有被证伪,也没有被破坏,还被越来越多的项目采用、接纳。如果说一种共识有问题,那么怎么可能会用在更多的项目身上。

而且DPOS并不止于此,BM和他的团队依然在补充、完善共识机制,BM在2018年5月3日,在eos.io 3.0版本中,加强了最后不可逆块导致的DPOS共识丢失问题。有兴趣的可以查看https://github.com/ EOS IO/eos/issues/2718

DPOS,依然在健康的继续发展。

(本文作者:二帮主)

声明:本文来自非小号平台用户投稿,观点仅代表作者本人,不代表【非小号-www.58d.com.cn】立场,文章内容仅供参考,如若转载请标注文章来源:【当前页面链接】

区块链相关

区块链媒体相关

区块链技术相关

挖矿相关

比特币相关