EOS入门(8)---浅谈EOS的DPOS共识机制
2018.03.17 14:13 字数 3873 阅读 1534评论 1喜欢 2
本文参考汤强公众号的一篇文章坐看邻国领袖打高尔夫球
POW算法让所有算力一起竞争猜随机数,第一个猜到的好运人士有资格生产区块,同时全网节点都是验证者。
POW虽然安全,但效率偏低,比如比特币:10分钟只能记2000多笔账,原因是矿工把99.99%的精力都花在找随机数上,哪个矿工胆敢沉迷记账而不找随机数,他的下场就是一毛钱奖励都拿不到,白白燃烧电和电脑。
POS算法中,全网节点都是生产者,持有权益者(持币者)负责验证。比如未来的以太坊:没有矿工,只有验证者,验证正确获得奖励,验证错误没收押金。
POW与POS两种共识算法不仅能抗住一些恶意节点、达成正确共识,而且被实践证明可行。但,它们是否是最安全、最快速的共识算法呢?
至少现在看来不是,因为有DPOS。
一、什么是DPOS?
Delegated Proof of Stake ——代理权益证明。这是一种基于投票选举的共识算法,有点像人民代表大会:
持有权益者(持币者)有资格选出生产者,如果生产者正确记录,那大家鼓掌;如果生产者不称职,那下次就不选它。
DPOS是否安全呢?至少比人民代表大会安全,因为算法要求系统做三件事:
第一,随机指定生产者出场顺序;
第二,不按顺序生产的区块无效;
第三,每过一个周期洗牌一次,打乱原有顺序;
于是,没有节点能像邻国领袖那样,垄断生产者或验证者的岗位。所以,谦虚地说是“安全”,嚣张点说是“牢不可破”,正常运行三年的Bitshare和一年多的Steemit已经说明了这一点。
DPOS下,生产者做的工作有点像比特币的矿池,不同的是,生产者不再花任何精力找随机数,只把全部精力投在生产正确的区块上。
我们通过第一季的文章已知:找随机数的工作劳心费神,很慢,DPOS不找随机数,只验证交易,而验证工作又极其简单。所以,DPOS的出块速度犹如飞电过隙珠翻荷。
如果你只想记住DPOS的一个属性,那就是快。
货比三家一下吧:
基于POW的比特币每秒处理7笔交易;
基于POW和POS的以太坊每秒处理15笔交易;
基于DPOS的比特股(BTS)每秒能处理超10万的交易量。
而且,DPOS允许所有矿池每三秒钟轮换一次,并且其他人已被安排在后续进程中,于是,没有人可以在预设位置外生产区块。
这意味着,生产者之间没有争夺,也不会遗漏区块,每三秒会有一个区块,理论上来说,矿池能做同样的事情,只是比特币和以太坊待共识算法不允许这样做。
那DPOS具体是如何运作的呢?
二、DPOS的运行方式
下文大面积借鉴《DPOS共识算法——缺失的白皮书》内容,实在找不到更能清晰描述DPOS的文字,因为此文作者就是算法发明人:Dan Larimer,网名Byte Master,大家习惯称他BM。
image
图3 DPOS共识算法发明人:BM
BM他假设一个最简模型:有3个区块生产者:
A、B、C
另外,有两个朴素的前提:
1、最长链胜出
2、诚实节点总是追随有效更长链
基于此,BM开始解释DPOS如何运行,共有六种场景:
1、天下太平的正常情况:生产者按系统排序生产区块。
image
注意,千万别看反了。上图的意思是:从左边的A开始生产区块,B接在A后面产块,C接在B后面产块,然后轮回到A,以此类推。
这种顺位是系统安排的,生产者在系统调度轮次之外生产的区块都无效。
2、总有不良节点搞事情:少数人的小分叉。
由于生产者顺位由系统安排,所以少数人在出块速度上注定比多数人慢:恶意的****少数节点产一个块时,正常的多数节点至少产两个。于是,诚实的2/3多数节点产的链永远比少数节点长。
image
少数人的鸡飞狗跳丝毫不会影响高铁向前奔腾。
3、断网:网络碎片化
断网会导致任何分叉上都没有绝对多数的生成者。此时,最长的链将倒向最大的那个少数群体。但当网络恢复时,较小的少数群体会切换到最长的那条链,以恢复并修正共识。
image
可能存在这样三个分叉:其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。只要块生产者总数为奇数,不可能长时间保持平局。
另外,生产者的顺位会被系统“洗牌”,这使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。
4、双重生产:少数人多产两个块
少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者C可以选择跟在B产生的任何一个区块后构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。
image
所以,少数恶意节点企图广播再多的替代块也无关紧要,它们当最长链的光景永远不会超过一轮。
5、最后不可逆的区块
在网络碎片化的情况下,多个分叉都可能持续变长。长远来看,最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。
DPOS告诉观察者,应该视2/3多数块生产者的确认来决定。
下图中,区块B已被C和A所确认,这代表了2/3多数确认,由此我们可以断定,只要恶意节点数量低于1/3,A-B-C-A这条链始终最长。
image
这一规则类似于比特币的6块确认。
但是,一些聪明人总能搞点事情出来,使得两个交易出现在不同的、且最后不可逆的区块块上。这种边缘攻击要求攻击者能完全控制通信延迟,并且在几分钟内两次使用该控制。
但即便这真的发生,那么“最长链胜出”的长期规则依然适用。所以,这种攻击的可能性无限接近0,并且经济后果无关紧要。
6、看似最大的问题:多数生产者舞弊
多数生产者一旦腐败,他们就可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。但这种行为不会持续,因为利益相关方最终会投票替换生产者。
image
所以你看,不管分叉多凌乱,只要利益相关方出手投票,链总能保持诚实。
要理解这个过程,我们只要想想66年的文化革命和78年的拨乱反正就秒懂了。
注意,区块一旦生产并不意味着区块会被接受,它仍然需要被验证,所以DPOS算法系统里需要很多验证器,生产只是区块的前提,只有当其他人都同意后,这个区块才有效。
BM就是这样,拥有用代码平息暴力的力量。
但是,在DPOS框架下,似乎有一个问题始终没有解决,那就是激励。如果正确记账没有奖励,那区块生产者为什么还要干活?
三、真正的激励
与以太坊Casper的爱憎分明不同,DPOS极其佛系——做错没惩罚,做对没奖励。包括V神在内的很多人都曾诟病DPOS这一“软肋”:无利害关系(Nothing at Stake)问题。
但是,你别听那些人瞎吵。
没有激励,看似意味着区块结果不可信,因为可能导致被选中的生产者懒得生产,但持有权益者(持币者,也就是网络中拥有投票权的人)不会懒得投票,他们会把那些不良节点赶出网络,只留那些诚实节点。
任何网络都不会因为徒有内部权力而生存,只会因为创造外部价值而生长。
挥霍权力的持币者只会让整个网络价值越来越低,直到消失。
所以,为能带领全网创造外部价值,持币者绝不会袖手旁观任何恶意,必须选出可靠节点生产区块,这是唯一的选择,因为网络内所有人的利益绑在一起。
站在区块生产者角度看,作恶的确没有现世报(当场的经济处罚),但却损失了最重要的财富、也是未来网络里唯一的资产:信誉。因为恶意一经泄露,很难再有其他人投票让它去生产,于是整个网络的增量资源就没有它的份。
节点作恶至少满足这个条件:
第一,持币,否则没有投票权;
第二,确保作恶的当前收益超过行善的收益总和。但这怎么可能?
在DPOS中,行善能分享未来网络的增量收益,而作恶没有当前收益。而且,无信之人没有未来收益。
横看是亏,竖看是赔,于是,生产者的作恶动机自然灭失。
而且,即使恶意节点在作恶没有好处的情况下,依然选择作恶。那总会有如来佛祖级的持币者,把他们封印在五指山下(踢出网络)。
DPOS共识算法就这样朴素:你好好干,我们就一起成长,一起成为行业领袖;但如遇坏人作恶,不骂他也不打他,只是静静地不带他玩。
这样看来,唯一能够**DPOS共识算法的方式只有一个:攻击者买下51%的代币,投票给恶意节点,那么攻击者为买币付出的代价将和整个网络的价值一起贬损。
到底有多大的仇,值得如此地报?更奇怪的是,攻击的前提居然是不计成本地买币,这样币价注定上涨,那这到底是在发神经报仇,还是发红包报恩?
结语
POW天然自带中心化属性。
BM甚至认为,比特币不是真正的工作量证明(POW),而是代理****工作量证明(DPOW),理由也很充分:
因为真正投票并生产区块的人选并非由本应有权投票选矿池的人(持币者)决定。坦白点说:即使你持有比特币,你也无权决定谁生产区块,所以你不得不授权给那些拥有算力的人,让他们代理产块。
每个区块都依赖投票来解决问题,问题是谁来投票。真正投票的人和最终受益、有驱动力的人始终不是同一群人。那么,DPOW始终面临利益分割问题。
比如,比特币意外分叉出比特币现金(BCH)这件事,是矿池们投票来决定用哪条链。最终,一群行业领袖聚在一起,达成了共识。
这有点像美联储,投票决定美元是否有贬值,手上有美元的人并没有话语权。挖矿者投票,不取消机制,这样他们能获利,他们希望保持小容量,这样能增加交易费用,造成这种局面的原因都是因为利益不一致。
所以,POW始终存在网络被控制的可能。大算力出起块来既不需要持币,也不能被替换——这一事实更是让中小节点无比抓狂。
而且,就算大算力没有规模优势,小算力也没有规模优势,但没有算力规模注定是劣势,这是POW算法最终游向中心化的必然逻辑。几乎不能确保最大的矿场不变成”金胖“——全网损失可承受与自身利益最大化之间缝隙,就是矿霸们的舞台。
而DPOS就像一个公司一样运行,股东们选出董事会,董事会成员轮流生产区块,验证通过后上链。区块生产者既没有创造无效区块的权力,也没有改变社区共识的权利。
所以你看,这些共识算法就是平时人与人之间达成共识的方式,BM做的事只是用代码提高了达成共识的速度,在无声无息间熨平了所有纷扰,携手向前。
Naval Ravikant 的判断正在变成现实:
Networks governed without kings, priests, elites or mobs. Networks governed by anyone with merit to the network.
网络将不再由国王、神父、精英或乌合之众控制,取而代之的是所有那些对网络有价值的人。