坐看鄰國領(lǐng)袖打高爾夫球
這是湯強區(qū)塊鏈系列文章之:深入解析DPOS,更多精彩干貨,請關(guān)注公眾號“湯強”。 DPOS就像一個公司一樣運行,股東們選出董事會,董事會成員輪流生產(chǎn)區(qū)塊,驗證通過后上鏈。區(qū)塊生產(chǎn)者既沒有創(chuàng)造無效區(qū)塊的權(quán)力,也沒有改變社區(qū)共識的權(quán)利。 這些共識算法就是平時人與人之間達成共識的方式,BM做的事只是用代碼提高了達成共識的速度,在無聲無息間熨平了所有紛擾,攜手向前。
1994年,金二胖第一次摸高爾夫球桿,本應(yīng)揮汗如雨地練習揮桿,但老人家偏偏臉不紅心、不跳地11次一桿進洞,最后領(lǐng)先第二名37桿奪魁,坐實“宇宙?zhèn)ト恕狈Q號。
據(jù)朝鮮媒體說:證明他成績的是11名貼身警衛(wèi)。

圖1 金正日的高爾夫球成績板
2011年,二胖的逝世堪稱高爾夫界一大損失,但同時使得全球高爾夫球手排名自動上升一位,盧克·唐納德終于松口氣,確認自己是世界第一了。
我們借這個故事類比三個概念:
1、圖1成績板是區(qū)塊,記錄“事實”。
2、金正日是生產(chǎn)者,按其意愿生產(chǎn)區(qū)塊。
3、11名警衛(wèi)是驗證者,檢驗后讓區(qū)塊上鏈。
但如果換其他人當驗證者,就不會認這個塊,這就是為什么我們看成績板不像事實更像段子的原因:共識機制有故障,區(qū)塊一定出問題。
在所有共識機制中,存在兩個根本問題:
1、誰生產(chǎn)區(qū)塊?
2、誰驗證區(qū)塊?
一旦確定這兩個問題后,那么一系列問題,都迎刃而解,比如:何時生產(chǎn)區(qū)塊、如何驗證區(qū)塊、接在哪個區(qū)塊后面生產(chǎn)下一個區(qū)塊等。
我們鄰國的共識算法是讓生產(chǎn)者和驗證者合二為一:都是金sir一個人,全網(wǎng)拿他沒辦法,于是生產(chǎn)出來的區(qū)塊總是很清奇,比如徒手砸衛(wèi)星:

圖2 鄰國課本佳篇欣賞《金正日爺爺認錯》節(jié)選
https://www.douban.com/group/topic/10038166/
鄰國的共識算法之外,還有我們熟悉的工作量證明(POW)和權(quán)益證明(POS)兩種算法,它們生產(chǎn)的區(qū)塊可不是成績板或教科書,而是你資產(chǎn)的蹤跡——交易信息。
POW算法讓所有算力一起競爭猜隨機數(shù),第一個猜到的好運人士有資格生產(chǎn)區(qū)塊,同時全網(wǎng)節(jié)點都是驗證者。
POW雖然安全,但效率偏低,比如比特幣:10分鐘只能記2000多筆賬,原因是礦工把99.99%的精力都花在找隨機數(shù)上,哪個礦工膽敢沉迷記賬而不找隨機數(shù),他的下場就是一毛錢獎勵都拿不到,白白燃燒電和電腦。
POS算法中,全網(wǎng)節(jié)點都是生產(chǎn)者,持有權(quán)益者(持幣者)負責驗證。比如未來的以太坊:沒有礦工,只有驗證者,驗證正確獲得獎勵,驗證錯誤沒收押金。
POW與POS兩種共識算法不僅能抗住一些惡意節(jié)點、達成正確共識,而且被實踐證明可行。但,它們是否是最安全、最快速的共識算法呢?
至少現(xiàn)在看來不是,因為有DPOS。
一、什么是DPOS?
Delegated Proof of Stake ——代理權(quán)益證明。這是一種基于投票選舉的共識算法,有點像人民代表大會:
持有權(quán)益者(持幣者)有資格選出生產(chǎn)者,如果生產(chǎn)者正確記錄,那大家鼓掌;如果生產(chǎn)者不稱職,那下次就不選它。
DPOS是否安全呢?至少比人民代表大會安全,因為算法要求系統(tǒng)做三件事:
第一,隨機指定生產(chǎn)者出場順序;
第二,不按順序生產(chǎn)的區(qū)塊無效;
第三,每過一個周期洗牌一次,打亂原有順序;于是,沒有節(jié)點能像鄰國領(lǐng)袖那樣,壟斷生產(chǎn)者或驗證者的崗位。所以,謙虛地說是“安全”,囂張點說是“牢不可破”,正常運行三年的Bitshare和一年多的Steemit已經(jīng)說明了這一點。
DPOS下,生產(chǎn)者做的工作有點像比特幣的礦池,不同的是,生產(chǎn)者不再花任何精力找隨機數(shù),只把全部精力投在生產(chǎn)正確的區(qū)塊上。
我們通過第一季的文章已知:找隨機數(shù)的工作勞心費神,很慢,DPOS不找隨機數(shù),只驗證交易,而驗證工作又極其簡單。所以,DPOS的出塊速度猶如飛電過隙珠翻荷。
如果你只想記住DPOS的一個屬性,那就是快。
貨比三家一下吧:
基于POW的比特幣每秒處理7筆交易;
基于POW和POS的以太坊每秒處理15筆交易;
基于DPOS的比特股(BTS)每秒能處理超10萬的交易量。而且,DPOS允許所有礦池每三秒鐘輪換一次,并且其他人已被安排在后續(xù)進程中,于是,沒有人可以在預(yù)設(shè)位置外生產(chǎn)區(qū)塊。
這意味著,生產(chǎn)者之間沒有爭奪,也不會遺漏區(qū)塊,每三秒會有一個區(qū)塊,理論上來說,礦池能做同樣的事情,只是比特幣和以太坊待共識算法不允許這樣做。
那DPOS具體是如何運作的呢?
二、DPOS的運行方式
下文大面積借鑒《DPOS共識算法——缺失的白皮書》內(nèi)容,實在找不到更能清晰描述DPOS的文字,因為此文作者就是算法發(fā)明人:Dan Larimer,網(wǎng)名Byte Master,大家習慣稱他BM。

圖3 DPOS共識算法發(fā)明人:BM
BM他假設(shè)一個最簡模型:有3個區(qū)塊生產(chǎn)者:
A、B、C
另外,有兩個樸素的前提:
1、最長鏈勝出
2、誠實節(jié)點總是追隨有效更長鏈
基于此,BM開始解釋DPOS如何運行,共有六種場景:
1、天下太平的正常情況:生產(chǎn)者按系統(tǒng)排序生產(chǎn)區(qū)塊。

注意,千萬別看反了。上圖的意思是:從左邊的A開始生產(chǎn)區(qū)塊,B接在A后面產(chǎn)塊,C接在B后面產(chǎn)塊,然后輪回到A,以此類推。
這種順位是系統(tǒng)安排的,生產(chǎn)者在系統(tǒng)調(diào)度輪次之外生產(chǎn)的區(qū)塊都無效。
2、總有不良節(jié)點搞事情:少數(shù)人的小分叉。
由于生產(chǎn)者順位由系統(tǒng)安排,所以少數(shù)人在出塊速度上注定比多數(shù)人慢:惡意的少數(shù)節(jié)點產(chǎn)一個塊時,正常的多數(shù)節(jié)點至少產(chǎn)兩個。于是,誠實的2/3多數(shù)節(jié)點產(chǎn)的鏈永遠比少數(shù)節(jié)點長。

少數(shù)人的雞飛狗跳絲毫不會影響高鐵向前奔騰。
3、斷網(wǎng):網(wǎng)絡(luò)碎片化
斷網(wǎng)會導(dǎo)致任何分叉上都沒有絕對多數(shù)的生成者。此時,最長的鏈將倒向最大的那個少數(shù)群體。但當網(wǎng)絡(luò)恢復(fù)時,較小的少數(shù)群體會切換到最長的那條鏈,以恢復(fù)并修正共識。

可能存在這樣三個分叉:其中兩個最長的分叉長度相同。在這種情況下,第3個(較?。┓植娴膲K生產(chǎn)者重新加入網(wǎng)絡(luò)時會打破平局。只要塊生產(chǎn)者總數(shù)為奇數(shù),不可能長時間保持平局。
另外,生產(chǎn)者的順位會被系統(tǒng)“洗牌”,這使得出塊順序隨機化,從而確保即使是生產(chǎn)者數(shù)目相同的兩個分叉也會以不同的步長增長,最終導(dǎo)致一個分叉超過另一個。
4、雙重生產(chǎn):少數(shù)人多產(chǎn)兩個塊
少數(shù)節(jié)點B在其時間段內(nèi)產(chǎn)生了兩個或更多可供選擇的塊。下一個計劃生產(chǎn)者C可以選擇跟在B產(chǎn)生的任何一個區(qū)塊后構(gòu)建鏈條。一旦如此,這個選擇就成為最長的鏈,而所有選擇B1的節(jié)點都將切換分叉。

所以,少數(shù)惡意節(jié)點企圖廣播再多的替代塊也無關(guān)緊要,它們當最長鏈的光景永遠不會超過一輪。
5、最后不可逆的區(qū)塊
在網(wǎng)絡(luò)碎片化的情況下,多個分叉都可能持續(xù)變長。長遠來看,最長的鏈終將獲勝,但觀察者需要一種確切的手段來判定一個塊是否絕對處于增長最快的那條鏈。
DPOS告訴觀察者,應(yīng)該視2/3多數(shù)塊生產(chǎn)者的確認來決定。
下圖中,區(qū)塊B已被C和A所確認,這代表了2/3多數(shù)確認,由此我們可以斷定,只要惡意節(jié)點數(shù)量低于1/3,A-B-C-A這條鏈始終最長。

這一規(guī)則類似于比特幣的6塊確認。
但是,一些聰明人總能搞點事情出來,使得兩個交易出現(xiàn)在不同的、且最后不可逆的區(qū)塊塊上。這種邊緣攻擊要求攻擊者能完全控制通信延遲,并且在幾分鐘內(nèi)兩次使用該控制。
但即便這真的發(fā)生,那么“最長鏈勝出”的長期規(guī)則依然適用。所以,這種攻擊的可能性無限接近0,并且經(jīng)濟后果無關(guān)緊要。
6、看似最大的問題:多數(shù)生產(chǎn)者舞弊
多數(shù)生產(chǎn)者一旦腐敗,他們就可以產(chǎn)生無限數(shù)量的分叉,每個分叉都看起來以2/3多數(shù)確認向前走,最后不可逆塊算法蛻變?yōu)樽铋L鏈算法。最長鏈就是為最大多數(shù)所批準的那條鏈,而這將由少數(shù)剩下的誠實節(jié)點決定。但這種行為不會持續(xù),因為利益相關(guān)方最終會投票替換生產(chǎn)者。

所以你看,不管分叉多凌亂,只要利益相關(guān)方出手投票,鏈總能保持誠實。
要理解這個過程,我們只要想想66年的文化革命和78年的撥亂反正就秒懂了。
注意,區(qū)塊一旦生產(chǎn)并不意味著區(qū)塊會被接受,它仍然需要被驗證,所以DPOS算法系統(tǒng)里需要很多驗證器,生產(chǎn)只是區(qū)塊的前提,只有當其他人都同意后,這個區(qū)塊才有效。
BM就是這樣,擁有用代碼平息暴力的力量。
但是,在DPOS框架下,似乎有一個問題始終沒有解決,那就是激勵。如果正確記賬沒有獎勵,那區(qū)塊生產(chǎn)者為什么還要干活?
三、真正的激勵
與以太坊Casper的愛憎分明不同,DPOS極其佛系——做錯沒懲罰,做對沒獎勵。包括V神在內(nèi)的很多人都曾詬病DPOS這一“軟肋”:無利害關(guān)系(Nothing at Stake)問題。
但是,你別聽那些人瞎吵。
沒有激勵,看似意味著區(qū)塊結(jié)果不可信,因為可能導(dǎo)致被選中的生產(chǎn)者懶得生產(chǎn),但持有權(quán)益者(持幣者,也就是網(wǎng)絡(luò)中擁有投票權(quán)的人)不會懶得投票,他們會把那些不良節(jié)點趕出網(wǎng)絡(luò),只留那些誠實節(jié)點。
任何網(wǎng)絡(luò)都不會因為徒有內(nèi)部權(quán)力而生存,只會因為創(chuàng)造外部價值而生長。
揮霍權(quán)力的持幣者只會讓整個網(wǎng)絡(luò)價值越來越低,直到消失。
所以,為能帶領(lǐng)全網(wǎng)創(chuàng)造外部價值,持幣者絕不會袖手旁觀任何惡意,必須選出可靠節(jié)點生產(chǎn)區(qū)塊,這是唯一的選擇,因為網(wǎng)絡(luò)內(nèi)所有人的利益綁在一起。
站在區(qū)塊生產(chǎn)者角度看,作惡的確沒有現(xiàn)世報(當場的經(jīng)濟處罰),但卻損失了最重要的財富、也是未來網(wǎng)絡(luò)里唯一的資產(chǎn):信譽。因為惡意一經(jīng)泄露,很難再有其他人投票讓它去生產(chǎn),于是整個網(wǎng)絡(luò)的增量資源就沒有它的份。
節(jié)點作惡至少滿足這個條件:
第一,持幣,否則沒有投票權(quán);
第二,確保作惡的當前收益超過行善的收益總和。但這怎么可能?
在DPOS中,行善能分享未來網(wǎng)絡(luò)的增量收益,而作惡沒有當前收益。而且,無信之人沒有未來收益。
橫看是虧,豎看是賠,于是,生產(chǎn)者的作惡動機自然滅失。
而且,即使惡意節(jié)點在作惡沒有好處的情況下,依然選擇作惡。那總會有如來佛祖級的持幣者,把他們封印在五指山下(踢出網(wǎng)絡(luò))。
DPOS共識算法就這樣樸素:你好好干,我們就一起成長,一起成為行業(yè)領(lǐng)袖;但如遇壞人作惡,不罵他也不打他,只是靜靜地不帶他玩。
這樣看來,唯一能夠破解DPOS共識算法的方式只有一個:攻擊者買下51%的代幣,投票給惡意節(jié)點,那么攻擊者為買幣付出的代價將和整個網(wǎng)絡(luò)的價值一起貶損。
到底有多大的仇,值得如此地報?更奇怪的是,攻擊的前提居然是不計成本地買幣,這樣幣價注定上漲,那這到底是在發(fā)神經(jīng)報仇,還是發(fā)紅包報恩?
結(jié)語
POW天然自帶中心化屬性。
BM甚至認為,比特幣不是真正的工作量證明(POW),而是代理工作量證明(DPOW),理由也很充分:
因為真正投票并生產(chǎn)區(qū)塊的人選并非由本應(yīng)有權(quán)投票選礦池的人(持幣者)決定。坦白點說:即使你持有比特幣,你也無權(quán)決定誰生產(chǎn)區(qū)塊,所以你不得不授權(quán)給那些擁有算力的人,讓他們代理產(chǎn)塊。
每個區(qū)塊都依賴投票來解決問題,問題是誰來投票。真正投票的人和最終受益、有驅(qū)動力的人始終不是同一群人。那么,DPOW始終面臨利益分割問題。
比如,比特幣意外分叉出比特幣現(xiàn)金(BCH)這件事,是礦池們投票來決定用哪條鏈。最終,一群行業(yè)領(lǐng)袖聚在一起,達成了共識。
這有點像美聯(lián)儲,投票決定美元是否有貶值,手上有美元的人并沒有話語權(quán)。挖礦者投票,不取消機制,這樣他們能獲利,他們希望保持小容量,這樣能增加交易費用,造成這種局面的原因都是因為利益不一致。
所以,POW始終存在網(wǎng)絡(luò)被控制的可能。大算力出起塊來既不需要持幣,也不能被替換——這一事實更是讓中小節(jié)點無比抓狂。
而且,就算大算力沒有規(guī)模優(yōu)勢,小算力也沒有規(guī)模優(yōu)勢,但沒有算力規(guī)模注定是劣勢,這是POW算法最終游向中心化的必然邏輯。幾乎不能確保最大的礦場不變成”金胖“——全網(wǎng)損失可承受與自身利益最大化之間縫隙,就是礦霸們的舞臺。
而DPOS就像一個公司一樣運行,股東們選出董事會,董事會成員輪流生產(chǎn)區(qū)塊,驗證通過后上鏈。區(qū)塊生產(chǎn)者既沒有創(chuàng)造無效區(qū)塊的權(quán)力,也沒有改變社區(qū)共識的權(quán)利。
所以你看,這些共識算法就是平時人與人之間達成共識的方式,BM做的事只是用代碼提高了達成共識的速度,在無聲無息間熨平了所有紛擾,攜手向前。
Naval Ravikant 的判斷正在變成現(xiàn)實:
Networks governed without kings, priests, elites or mobs. Networks governed by anyone with merit to the network.
網(wǎng)絡(luò)將不再由國王、神父、精英或烏合之眾控制,取而代之的是所有那些對網(wǎng)絡(luò)有價值的人。
最后的最后,回到開篇的小故事,本文作者驗證金正日連續(xù)11槍一桿進洞的說法,沒有發(fā)現(xiàn)任何相關(guān)報道或圖片,倒是有一堆質(zhì)疑和澄清的文章:


原來,這些報道和圖1的成績板都是些“難以達成共識的區(qū)塊”,真假難辨。
但事已至此,你關(guān)心的真假已不重要,你認知的進步卻很重要,這個段子讓我們明白什么是無效的共識機制,從而掌握一種高效的共識算法:DPOS。
現(xiàn)實世界的信息網(wǎng)絡(luò)真假難辨,但區(qū)塊鏈的網(wǎng)絡(luò)則不同,因為這些網(wǎng)絡(luò)基于協(xié)議,只要沾上區(qū)塊,都有跡可循,一查便知。而這足以成為區(qū)塊鏈能讓現(xiàn)實世界變好的理由:它足夠地有效。
但是說來也怪,我們社會本來所運行共識機制與DPOS極度神似——你只需默默做好手頭的本分,恪守誠實,就能讓整個社會網(wǎng)絡(luò)變好,而社會必將通過市場給你最貼切的回報。
這種神似難道只是巧合?
主要參考資料:
https://bitshares.org/technology/delegated-proof-of-stake-consensus/https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paperhttps://steemit.com/dpos/@legendx/dposhttp://chainx.org/news/index/detail/id/39.htmlhttps://www.youtube.com/watch?v=eftctVXiFJQ&t=325s
注:文中“2/3的多數(shù)”實際應(yīng)為“2/3+1的多數(shù)”,為便于你在ABC三個節(jié)點的情況下理解,故省略。
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由財神資訊-領(lǐng)先的體育資訊互動媒體轉(zhuǎn)載發(fā)布,如需刪除請聯(lián)系。