DPOS共識算法 - 缺失的白皮書

steemit上原文鏈接:https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper

關(guān)于BitShares的DPoS共識的概述請參考:股份授權(quán)證明(DPOS)概述

關(guān)于BitShares的DPoS共識的詳細(xì)介紹請參考:BitShares的DPoS共識

關(guān)于BitShares的DPoS共識的競爭鏈共識補(bǔ)充說明請參考:DPOS共識算法 - 缺失的白皮書

關(guān)于BitShares的DPoS共識之代碼實(shí)現(xiàn)概述請參考:BTS的DPoS共識之代碼實(shí)現(xiàn)概述

DPoS共識

這是缺少的白皮書和關(guān)于股份授權(quán)證明(DPOS: delegated proof of stake)的分析。 本白皮書的目標(biāo)是分析DPOS為什么起作用以及其為何如此健壯。 有關(guān)DPOS的早期描述可以在bitshares.org上找到。 不過,那個(gè)描述還包括許多與實(shí)際共識過程不符的部分。

所有區(qū)塊鏈本質(zhì)上都是一個(gè)由交易驅(qū)動的確定性狀態(tài)機(jī)。共識是商定確定性交易順序和過濾無效交易的過程。有許多不同的共識算法都可以產(chǎn)生等效的交易排序,但DPOS已經(jīng)通過在多個(gè)區(qū)塊鏈上經(jīng)年累月的可靠運(yùn)行證明自身是健壯、安全和有效的。

和所有共識算法一樣,區(qū)塊生產(chǎn)者可能導(dǎo)致的最大損害是審查。根據(jù)確定性開源狀態(tài)機(jī)原理,所有區(qū)塊必須有效。

1. DPoS共識算法概要

DPOS算法分為兩部分:選擇一組區(qū)塊生產(chǎn)者和調(diào)度生產(chǎn)區(qū)塊。要確保選舉過程由股東最終控制,因?yàn)楫?dāng)網(wǎng)絡(luò)連接不暢通時(shí),股東的損失最大。選舉方法對實(shí)際運(yùn)行中如何達(dá)成共識幾乎沒有影響,因此,本文將重點(diǎn)介紹如何在區(qū)塊生產(chǎn)者被選擇之后達(dá)成共識。

為了幫助解釋這個(gè)算法,我只假設(shè)3個(gè)區(qū)塊生產(chǎn)者A,B和C。因?yàn)楣沧R(的達(dá)成)需要2?3+1(個(gè)節(jié)點(diǎn))來解決所有情況,這個(gè)簡化的模型將假設(shè)生產(chǎn)者C是打破僵局的那個(gè)節(jié)點(diǎn)。在現(xiàn)實(shí)世界中,將有21個(gè)或更多的區(qū)塊生產(chǎn)者。像工作量證明(PoW)一樣,一般規(guī)則是最長鏈勝出。任何時(shí)候當(dāng)一個(gè)誠實(shí)的對等節(jié)點(diǎn)看到一個(gè)有效的更長鏈,它都會從當(dāng)前分叉切換到更長的這條鏈。

我將通過示例展示,在幾乎所有可能想得到的網(wǎng)絡(luò)條件下,DPOS是如何運(yùn)行。這些例子應(yīng)該可以幫助你理解為什么DPOS穩(wěn)健且難以破壞。

2. 正常生產(chǎn)流程

在正常操作模式下,區(qū)塊生產(chǎn)者們每3秒鐘輪流生成一個(gè)塊。假設(shè)沒有節(jié)點(diǎn)錯過自己的輪次,那么這將產(chǎn)生最長鏈。區(qū)塊生產(chǎn)者在被調(diào)度輪次之外的任何時(shí)間段出塊都是無效的。

正常生產(chǎn)流程示意圖

3. 少數(shù)節(jié)點(diǎn)分叉

不超過節(jié)點(diǎn)總數(shù)1?3的惡意或故障節(jié)點(diǎn)可能創(chuàng)建少數(shù)分叉。在這種情況下,少數(shù)分叉每9秒只能產(chǎn)生1個(gè)塊,而多數(shù)分叉每9秒可以產(chǎn)生2個(gè)塊。這樣,誠實(shí)的 2?3多數(shù)將永遠(yuǎn)比少數(shù)(的鏈)更長。

少數(shù)節(jié)點(diǎn)分叉示意圖

4. 離線少數(shù)節(jié)點(diǎn)的雙重生產(chǎn)

(離線的)少數(shù)節(jié)點(diǎn)可以試圖產(chǎn)生無限數(shù)量的分叉,但是他們的所有分叉都將比多數(shù)節(jié)點(diǎn)的那條鏈短,因?yàn)樯贁?shù)節(jié)點(diǎn)在出塊速度上注定比多數(shù)節(jié)點(diǎn)來的更慢。

少數(shù)節(jié)點(diǎn)雙重生產(chǎn)示意圖

5. 網(wǎng)絡(luò)分片化(Fragmentation)

網(wǎng)絡(luò)完全有可能分片,從而導(dǎo)致多個(gè)分叉,且所有分叉都不擁有多數(shù)區(qū)塊生成者。在這種情況下,最長的鏈將倒向最大的那個(gè)少數(shù)群體。當(dāng)網(wǎng)絡(luò)連通性恢復(fù)時(shí),較小的少數(shù)群體會自然切換到最長的那條鏈,明確的共識將恢復(fù)。

網(wǎng)絡(luò)分片化示意圖

有可能存在這樣三個(gè)分叉,其中兩個(gè)最長的分叉長度相同。在這種情況下,第3個(gè)(較小)分叉的區(qū)塊生產(chǎn)者重新加入網(wǎng)絡(luò)時(shí)會打破平局。區(qū)塊生產(chǎn)者總數(shù)為奇數(shù),因此不可能長時(shí)間保持平局。稍后我們還會講到“洗牌”生產(chǎn)者,它使得出塊順序隨機(jī)化,從而確保即使是生產(chǎn)者數(shù)目相同的兩個(gè)分叉也會以不同的步長增長,最終導(dǎo)致一個(gè)分叉超過另一個(gè)。

6. 在線少數(shù)節(jié)點(diǎn)的雙重生產(chǎn)

在這種場景下,少數(shù)節(jié)點(diǎn)B在其時(shí)間段內(nèi)產(chǎn)生了兩個(gè)或更多可供選擇的塊。下一個(gè)計(jì)劃生產(chǎn)者(C)可以選擇基于B產(chǎn)生的任何一種方案繼續(xù)構(gòu)建鏈條。一旦如此,這個(gè)選擇就成為最長的鏈,而所有選擇B1的節(jié)點(diǎn)都將切換分叉。少數(shù)不良生產(chǎn)者企圖廣播再多的替代塊也無關(guān)緊要,它們作為最長鏈的一部分永遠(yuǎn)不會超過一輪。

在線少數(shù)節(jié)點(diǎn)的雙重生產(chǎn)示意圖

7. 最后不可逆區(qū)塊(Last Irreversible Block)

在網(wǎng)絡(luò)分片化的情況下,多個(gè)分叉都有可能持續(xù)不斷增長相當(dāng)長的時(shí)間。長遠(yuǎn)來看最長的鏈終將獲勝,但觀察者需要一種確切的手段來判定一個(gè)塊是否絕對處于增長最快的那條鏈。這可以通過觀察來自2/3+1多數(shù)區(qū)塊生產(chǎn)者的確認(rèn)來決定。

在下圖中,塊B已被C和A所確認(rèn),這代表已經(jīng)被2?3+1的多數(shù)節(jié)點(diǎn)確認(rèn)了,由此我們可以推斷沒有其它鏈會比這個(gè)更長 – 如果這2?3的生產(chǎn)者是誠實(shí)的。

最后不可逆區(qū)塊示意圖

請注意,這個(gè)“規(guī)則”類似于比特幣的6塊確認(rèn)“規(guī)則”。一些聰明節(jié)點(diǎn)也許可以謀劃一系列事件使得兩個(gè)節(jié)點(diǎn)(“交易”?)出現(xiàn)在不同的最后不可逆區(qū)塊上。這種極端例子要求攻擊者能完全控制通信延遲,并且在幾分鐘內(nèi)兩次--而不是一次--使用該控制。即便這真的發(fā)生了,那么最長鏈(勝出)的長期規(guī)則仍然適用。我們估計(jì)這種攻擊的可能性接近0,且經(jīng)濟(jì)損失微不足道,因此不足為慮。

8. 法定(Quorum)生產(chǎn)者節(jié)點(diǎn)數(shù)不足

在缺乏明晰的生產(chǎn)者法定節(jié)點(diǎn)數(shù)這種不太可能的情況下,少數(shù)節(jié)點(diǎn)還是可以繼續(xù)出塊。股東可以在這些塊里包括更改其投票的交易。這些投票可以選出一組新的生產(chǎn)者,并將出塊參與率恢復(fù)到100%。一旦如此,少數(shù)鏈將最終超過所有其他以低于100%參與率運(yùn)行的鏈。

在此過程中,所有觀察者都會知道,在一條參與率超過67%的鏈形成之前,網(wǎng)絡(luò)狀態(tài)一直處于變化之中。那些選擇在此條件下進(jìn)行交易的節(jié)點(diǎn)所冒的風(fēng)險(xiǎn)與選擇接受少于6次確認(rèn)的節(jié)點(diǎn)相似。他們這樣做是因?yàn)橹拦沧R最終落在另一個(gè)分支上的可能性很小。在實(shí)踐中,這種情況比接受少于3個(gè)比特幣交易確認(rèn)區(qū)塊要安全多了。

9. 多數(shù)生產(chǎn)者舞弊(Corruption)

如果多數(shù)生產(chǎn)者變得腐敗,那么他們可以產(chǎn)生無限數(shù)量的分叉,每個(gè)分叉都看起來以2/3多數(shù)確認(rèn)向前推進(jìn)。這種情況下,最后不可逆塊算法蛻回為最長鏈算法。最長鏈就是為最大多數(shù)所認(rèn)可的那條鏈,而這將由少數(shù)剩下的誠實(shí)節(jié)點(diǎn)決定。這種行為不會持續(xù)很長時(shí)間,因?yàn)樽罱K股東會投票替換掉這些生產(chǎn)者。

多數(shù)生產(chǎn)者舞弊示意圖

10. 交易作為權(quán)益證明(TaPoS: Transactions as Proof of Stake)

當(dāng)用戶為一個(gè)交易簽名時(shí),他們這樣做是假設(shè)當(dāng)前區(qū)塊鏈的狀態(tài)已經(jīng)確定了。這個(gè)假設(shè)是基于他們對最近幾個(gè)區(qū)塊的認(rèn)可。如果最后共識的最長鏈發(fā)生改變,那么它可能會使簽署者同意交易時(shí)的假設(shè)無效。

就TaPoS而言,所有交易都包含最近一個(gè)區(qū)塊的哈希值,如果該區(qū)塊最終在鏈歷史中不存在,那么這些交易被認(rèn)為是無效的。任何在孤立分叉上給交易簽名的節(jié)點(diǎn),都會發(fā)現(xiàn)該交易無效且無法遷移到主分叉。

該過程的另一個(gè)作用就是,可以抵御試圖產(chǎn)生替代鏈的長期攻擊。每個(gè)股東在每次交易時(shí)都直接對區(qū)塊鏈做出確認(rèn)。隨著時(shí)間推移,所有的塊都是由所有股東確認(rèn)過的,而這是無法在偽造鏈中復(fù)制的。

11. 確定性生產(chǎn)者洗牌(Shuffling)

在上面所有例子中,我們展示的都是區(qū)塊生產(chǎn)者按調(diào)度循環(huán)出塊。實(shí)際上,每生產(chǎn)N個(gè)區(qū)塊(N是生產(chǎn)者數(shù)量),區(qū)塊生產(chǎn)者集合都會洗牌一次。這種隨機(jī)性確保塊生成者B不會總是忽略塊生成者A,每當(dāng)形成多個(gè)擁有相同數(shù)量生產(chǎn)者的分叉時(shí),均勢最終都會被打破。

12. 結(jié)論

在每一種我們能想到的網(wǎng)絡(luò)自然分片的情況下,股份授權(quán)證明(DPoS)都是健壯的,甚至在面對大多數(shù)生產(chǎn)者舞弊的情形時(shí)也是安全的。不像其它共識算法,當(dāng)大多數(shù)生產(chǎn)者失效時(shí),DPOS還是可以繼續(xù)工作。在此過程中,社區(qū)可以投票替換掉不合格的生產(chǎn)者,直到恢復(fù)100%參與率。我還不知道有任何其它算法可以在如此高強(qiáng)度和多變的故障條件下依然保持健壯。

說到底,DPOS獲得顯著的安全性是由于選擇了這樣的算法:挑選區(qū)塊生產(chǎn)者、驗(yàn)證節(jié)點(diǎn)是否高質(zhì)量和是否獨(dú)立的個(gè)體。運(yùn)用贊成投票的過程可以確保一個(gè)節(jié)點(diǎn)即使擁有50%的有效投票權(quán)也不能獨(dú)自挑選哪怕一個(gè)生產(chǎn)者。DPOS旨在優(yōu)化具有健壯網(wǎng)絡(luò)連接和誠實(shí)節(jié)點(diǎn)100%參與綠的名義條件的性能。這使得DPOS有能力在平均只有1.5秒的時(shí)間內(nèi)以99.9%的確定性來確認(rèn)交易,同時(shí)變差也是以優(yōu)雅和可檢測的方式 ,而且從較差狀態(tài)中恢復(fù)到正常也不過是小事一樁。

其它共識算法以網(wǎng)絡(luò)狀態(tài)差和不誠實(shí)節(jié)點(diǎn)為名義條件進(jìn)行設(shè)計(jì),這樣設(shè)計(jì)的最終結(jié)果就是性能更差、延遲更高、通信開銷高的網(wǎng)絡(luò),而且這種網(wǎng)絡(luò)在33%節(jié)點(diǎn)失效的情況下就會完全停擺。

DPoS在BitShares成功運(yùn)行了3年并在Steem運(yùn)行一年期間,我們經(jīng)歷了各種各樣的網(wǎng)絡(luò)條件和軟件錯誤。DPOS已經(jīng)成功地駕馭了這種環(huán)境,并展示了它能夠在處理比其他任何區(qū)塊鏈更多的交易的同時(shí)保持共識的能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,004評論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內(nèi)容