1994 年,金二胖第一次摸高爾夫球杆,本應揮汗如雨地練習揮杆,但老人家偏偏臉不紅心、不跳地 11 次一桿進洞,最後領先第二名 37 杆奪魁,坐實“宇宙偉人”稱號。

據朝鮮媒體說:證明他成績的是 11 名貼身警衛。


圖 1 金正日的高爾夫球成績板

2011 年,二胖的逝世堪稱高爾夫界一大損失,但同時使得全球高爾夫球手排名自動上升一位,盧克·唐納德終於鬆口氣,確認自己是世界第一了。

我們借這個故事類比三個概念:

1、圖 1 成績板是區塊,記錄“事實”。

2、金正日是生產者,按其意願生產區塊。

3、11 名警衛是驗證者,檢驗後讓區塊上鍊。

但如果換其他人當驗證者,就不會認這個塊,這就是爲什麼我們看成績板不像事實更像段子的原因:共識機制有故障,區塊一定出問題

在所有共識機制中,存在兩個根本問題:

1、誰生產區塊?

2、誰驗證區塊?

一旦確定這兩個問題後,那麼一系列問題,都迎刃而解,比如:何時生產區塊、如何驗證區塊、接在哪個區塊後面生產下一個區塊等。

我們鄰國的共識算法是讓生產者和驗證者合二爲一:都是金 sir 一個人,全網拿他沒辦法,於是生產出來的區塊總是很清奇,比如徒手砸衛星:

圖 2 鄰國課本佳篇欣賞《金正日爺爺認錯》節選

https://www.douban.com/group/topic/10038166/

鄰國的共識算法之外,還有我們熟悉的 工作量證明(POW) 和 權益證明(POS) 兩種算法,它們生產的區塊可不是成績板或教科書,而是你資產的蹤跡——交易信息。

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。


圖 3 DPOS 共識算法發明人:BM

BM 他假設一個最簡模型:有 3 個區塊生產者:

A、B、C

另外,有兩個樸素的前提:

1、最長鏈勝出

2、誠實節點總是追隨有效更長鏈

基於此,BM 開始解釋 DPOS 如何運行,共有六種場景:

1、天下太平的正常情況:生產者按系統排序生產區塊。

注意,千萬別看反了。上圖的意思是:從左邊的 A 開始生產區塊,B 接在 A 後面產塊,C 接在 B 後面產塊,然後輪迴到 A,以此類推。

這種順位是系統安排的,生產者在系統調度輪次之外生產的區塊都無效。

2、總有不良節點搞事情:少數人的小分叉。

由於生產者順位由系統安排,所以少數人在出塊速度上註定比多數人慢:惡意的少數節點產一個塊時,正常的多數節點至少產兩個。於是,誠實的 2/3 多數節點產的鏈永遠比少數節點長。

少數人的雞飛狗跳絲毫不會影響高鐵向前奔騰

3、斷網:網絡碎片化

斷網會導致任何分叉上都沒有絕對多數的生成者。此時,最長的鏈將倒向最大的那個少數羣體。但當網絡恢復時,較小的少數羣體會切換到最長的那條鏈,以恢復並修正共識。

可能存在這樣三個分叉:其中兩個最長的分叉長度相同。在這種情況下,第 3 個(較小)分叉的塊生產者重新加入網絡時會打破平局。
只要塊生產者總數爲奇數,不可能長時間保持平局。

另外,生產者的順位會被系統“洗牌”,這使得出塊順序隨機化,從而確保即使是生產者數目相同的兩個分叉也會以不同的步長增長,最終導致一個分叉超過另一個。

4、雙重生產:少數人多產兩個塊

少數節點 B 在其時間段內產生了兩個或更多可供選擇的塊。下一個計劃生產者 C 可以選擇跟在 B 產生的任何一個區塊後構建鏈條。一旦如此,這個選擇就成爲最長的鏈,而所有選擇 B1 的節點都將切換分叉。

所以,少數惡意節點企圖廣播再多的替代塊也無關緊要,它們當最長鏈的光景永遠不會超過一輪。

5、最後不可逆的區塊

在網絡碎片化的情況下,多個分叉都可能持續變長。長遠來看,最長的鏈終將獲勝,但觀察者需要一種確切的手段來判定一個塊是否絕對處於增長最快的那條鏈。

DPOS 告訴觀察者,應該視 2/3 多數塊生產者的確認來決定。

下圖中,區塊 B 已被 C 和 A 所確認,這代表了 2/3 多數確認,由此我們可以斷定,只要惡意節點數量低於 1/3,A-B-C-A 這條鏈始終最長。

這一規則類似於比特幣的 6 塊確認。

但是,一些聰明人總能搞點事情出來,使得兩個交易出現在不同的、且最後不可逆的區塊塊上。這種邊緣攻擊要求攻擊者能完全控制通信延遲,並且在幾分鐘內兩次使用該控制。

但即便這真的發生,那麼“最長鏈勝出”的長期規則依然適用。所以,這種攻擊的可能性無限接近 0,並且經濟後果無關緊要。

6、看似最大的問題:多數生產者舞弊

多數生產者一旦腐敗,他們就可以產生無限數量的分叉,每個分叉都看起來以 2/3 多數確認向前走,最後不可逆塊算法蛻變爲最長鏈算法。最長鏈就是爲最大多數所批准的那條鏈,而這將由少數剩下的誠實節點決定。但這種行爲不會持續,因爲利益相關方最終會投票替換生產者。

所以你看,不管分叉多凌亂,只要利益相關方出手投票,鏈總能保持誠實

要理解這個過程,我們只要想想 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.

網絡將不再由國王、神父、精英或烏合之衆控制,取而代之的是所有那些對網絡有價值的人。

最後的最後,回到開篇的小故事,本文作者驗證金正日連續 11 槍一桿進洞的說法,沒有發現任何相關報道或圖片,倒是有一堆質疑和澄清的文章:

原來,這些報道和圖 1 的成績板都是些“難以達成共識的區塊”,真假難辨。

但事已至此,你關心的真假已不重要,你認知的進步卻很重要,這個段子讓我們明白什麼是無效的共識機制,從而掌握一種高效的共識算法:DPOS。

現實世界的信息網絡真假難辨,但區塊鏈的網絡則不同,因爲這些網絡基於協議,只要沾上區塊,都有跡可循,一查便知。而這足以成爲區塊鏈能讓現實世界變好的理由:它足夠地有效。

但是說來也怪,我們社會本來所運行共識機制與 DPOS 極度神似——你只需默默做好手頭的本分,恪守誠實,就能讓整個社會網絡變好,而社會必將通過市場給你最貼切的回報。

這種神似難道只是巧合?

注:文中“2/3 的多數”實際應爲“2/3+1 的多數”,爲便於你在 ABC 三個節點的情況下理解,故省略。