0
本文作者: 陳伊莉 | 2017-06-23 22:53 |
雷鋒網(wǎng)按:本文發(fā)表于Steem,作者是dantheman。譯者是萬云首席技術(shù)官奚海峰,首發(fā)公眾號萬云BaaS。奚海峰曾任IBM研究院工程師和高級咨詢顧問,Sempra Commodities 主管架構(gòu)師及 Tudor Investment 軟件開發(fā)主管。在美國12年間,獲得了包括“IBM 研究成就獎”在內(nèi)的多次嘉獎,在一流國際會議和雜志上發(fā)表過多篇學(xué)術(shù)論文,并且持有美國發(fā)明專利。雷鋒網(wǎng)已獲授權(quán)轉(zhuǎn)載。
這篇“缺失的白皮書”是對委托權(quán)益證明(DPOS)的分析,目的是為DPOS的工作原理及其魯棒性根源提供一個分析。DPOS的早期描述可以在bitshares.org找到。不過,那個描述還包含了許多不屬于實際共識過程的內(nèi)容。
所有區(qū)塊鏈本質(zhì)上都是一種由交易驅(qū)動的確定性狀態(tài)機。共識是商定確定性交易順序和過濾無效交易的過程。有許多不同的共識算法都可以產(chǎn)生等效的交易排序,但DPOS已經(jīng)通過在多個區(qū)塊鏈上經(jīng)年累月的可靠運行證明自身是健壯、安全和有效的。
像所有共識算法一樣,塊生產(chǎn)者可能導(dǎo)致的最大損害是審查。所有塊的有效性必須基于確定性的開源狀態(tài)機邏輯。
DPOS算法分為兩部分:選擇一組塊生產(chǎn)者和調(diào)度生產(chǎn)。選舉過程確保利益相關(guān)方最終得到控制,因為當(dāng)網(wǎng)絡(luò)不能順利運行時,利益相關(guān)方的損失最大。選舉方法對實際運行中如何達成共識幾乎沒有影響,因此,本文將重點介紹如何在塊生產(chǎn)者被選擇之后達成共識。
為了幫助解釋這個算法,我想假設(shè)3個塊生產(chǎn)者A,B和C。因為共識(的達成)需要2/3+1多數(shù)來解決所有情況,這個簡化的模型將假設(shè)生產(chǎn)者C是打破僵局的那個人。在現(xiàn)實世界中,將有21個或更多的塊生產(chǎn)者。像工作量證明一樣,一般規(guī)則是最長鏈勝出。任何時候當(dāng)一個誠實的對等節(jié)點看到一個有效的更長鏈,它都會從當(dāng)前分叉切換到更長的這條鏈。
我將舉例說明在大多數(shù)想得到的網(wǎng)絡(luò)條件下DPOS如何運行。這些例子應(yīng)該可以幫助您理解為什么DPOS穩(wěn)健且難以破壞。
在正常操作模式下,塊生產(chǎn)者每3秒鐘輪流生成一個塊。假設(shè)沒有人錯過自己的輪次,那么這將產(chǎn)生最長鏈。塊生產(chǎn)者在被調(diào)度輪次之外的任何時間段出塊都是無效的。
不超過節(jié)點總數(shù)三分之一的惡意或故障節(jié)點可能創(chuàng)建少數(shù)分叉。在這種情況下,少數(shù)分叉每9秒只能產(chǎn)生一個塊,而多數(shù)分叉每9秒可以產(chǎn)生兩個塊。這樣,誠實的2/3多數(shù)將永遠(yuǎn)比少數(shù)(的鏈)更長。
(離線的)少數(shù)人可以試圖產(chǎn)生無限數(shù)量的分叉,但是他們的所有分叉都將比多數(shù)人的那條鏈短,因為少數(shù)人在出塊速度上注定比多數(shù)人來的更慢。
網(wǎng)絡(luò)完全有可能碎片化,導(dǎo)致沒有任何分叉擁有多數(shù)塊生成者。在這種情況下,最長的鏈將倒向最大的那個少數(shù)群體。當(dāng)網(wǎng)絡(luò)連通性恢復(fù)時,較小的少數(shù)群體會自然切換到最長的那條鏈,明確的共識將恢復(fù)。
有可能存在這樣三個分叉,其中兩個最長的分叉長度相同。在這種情況下,第3個(較小)分叉的塊生產(chǎn)者重新加入網(wǎng)絡(luò)時會打破平局。塊生產(chǎn)者總數(shù)為奇數(shù),因此不可能長時間保持平局。稍后我們還會講到生產(chǎn)者“洗牌”,它使得出塊順序隨機化,從而確保即使是生產(chǎn)者數(shù)目相同的兩個分叉也會以不同的步長增長,最終導(dǎo)致一個分叉超過另一個。
在這種場景下,少數(shù)節(jié)點B在其時間段內(nèi)產(chǎn)生了兩個或更多可供選擇的塊。下一個計劃生產(chǎn)者(C)可以選擇基于B產(chǎn)生的任何一種方案繼續(xù)構(gòu)建鏈條。一旦如此,這個選擇就成為最長的鏈,而所有選擇B1的節(jié)點都將切換分叉。少數(shù)不良生產(chǎn)者企圖廣播再多的替代塊也無關(guān)緊要,它們作為最長鏈的一部分永遠(yuǎn)不會超過一輪。
在網(wǎng)絡(luò)碎片化的情況下,多個分叉都有可能持續(xù)不斷增長相當(dāng)長的時間。長遠(yuǎn)來看最長的鏈終將獲勝,但觀察者需要一種確切的手段來判定一個塊是否絕對處于增長最快的那條鏈。這可以通過觀察來自2/3+1多數(shù)塊生產(chǎn)者的確認(rèn)來決定。
在下圖中,塊B已被C和A所確認(rèn),這代表了2/3+1多數(shù)確認(rèn),由此我們可以推斷沒有其它鏈會比這個更長 – 如果2/3的生產(chǎn)者是誠實的。
請注意,這個“規(guī)則”類似于比特幣的6塊確認(rèn)“規(guī)則”。一些聰明人也許可以謀劃一系列事件使得兩個節(jié)點(應(yīng)該是“交易”?)出現(xiàn)在不同的最后不可逆塊上。這種邊緣案例要求攻擊者能完全控制通信延遲,并且在幾分鐘內(nèi)兩次--而不是一次--使用該控制。即便這真的發(fā)生了,那么最長鏈(勝出)的長期規(guī)則仍然適用。我們估計這種攻擊的可能性足夠接近0,且經(jīng)濟后果無關(guān)緊要,因此不足為慮。
在缺乏明晰的生產(chǎn)者法定人數(shù)這種不太可能的情況下,少數(shù)人還是可以繼續(xù)出塊。利益相關(guān)方可以在這些塊里包括更改投票的交易。這些投票可以選出一組新的生產(chǎn)者,并將出塊參與率恢復(fù)到100%。一旦如此,少數(shù)鏈將最終超過所有其他以低于100%參與率運行的鏈。
在此過程中,所有觀察者都會知道,在一條參與率超過67%的鏈形成之前,網(wǎng)絡(luò)狀態(tài)是不定的。那些選擇在此條件下進行交易的人所冒的風(fēng)險與選擇接受不到6個確認(rèn)的人相似。他們知道存在這樣一些小的可能性,即:共識也許最終在一個不同的分叉上建立起來。在實踐中,這種情況比接受少于3個比特幣交易確認(rèn)的塊要安全多了。
如果多數(shù)生產(chǎn)者變得腐敗,那么他們可以產(chǎn)生無限數(shù)量的分叉,每個分叉都看起來以2/3多數(shù)確認(rèn)向前走。這種情況下,最后不可逆塊算法蛻變?yōu)樽铋L鏈算法。最長鏈就是為最大多數(shù)所批準(zhǔn)的那條鏈,而這將由少數(shù)剩下的誠實節(jié)點決定。這種行為不會持續(xù)很長時間,因為利益相關(guān)方最終會投票替換生產(chǎn)者。
當(dāng)用戶為一個交易簽名時,他們是在對區(qū)塊鏈狀態(tài)的一定假設(shè)下這樣做的。這個假設(shè)是基于他們對最近幾個塊的看法。如果最長鏈的共識發(fā)生改變,則潛在會使簽名者之前的假設(shè)失效。
就TaPoS而言,所有交易都包含最近一個塊的散列,如果該塊在鏈歷史中不存在則這些交易被認(rèn)為是無效的。任何在孤兒分叉上給交易簽名的人,都會發(fā)現(xiàn)該交易無效且無法遷移到主分叉。
該過程的一個附帶作用是可以抵御試圖產(chǎn)生替代鏈的長期攻擊。每個利益相關(guān)方在每次交易時都直接對區(qū)塊鏈做出確認(rèn)。隨著時間推移,所有的塊都是由所有利益相關(guān)方確認(rèn)過的,這在一條偽造鏈里是無法復(fù)制的。
在上面所有例子中,我們展示的都是塊生產(chǎn)者按循環(huán)調(diào)度出塊。實際上,每出N個塊(N是生產(chǎn)者數(shù)量),塊生產(chǎn)者集合都會洗牌一次。這種隨機性確保塊生成者B不會總是忽略塊生成者A,每當(dāng)形成多個擁有相同數(shù)量生產(chǎn)者的分叉時,平局最終都會被打破。
在每一個我們能想到的自然網(wǎng)絡(luò)分裂的情況下,委托權(quán)益證明都是強健的,甚至在面對相當(dāng)數(shù)量生產(chǎn)者舞弊的情形時也是安全的。不像其它共識算法,當(dāng)大多數(shù)生產(chǎn)者不合格時,DPOS還是可以繼續(xù)工作。在此過程中,社區(qū)可以投票替換掉不合格的生產(chǎn)者,直到恢復(fù)100%參與率。我還不知道有任何其它算法可以在如此高強度和變化多端的失敗條件下依然保持強健。
說到底,DPOS引人注目的安全性來自于其選擇塊生產(chǎn)者和驗證節(jié)點質(zhì)量的算法。運用贊成投票的過程可以確保一個人即使擁有50%的有效投票權(quán)也不能獨自挑選哪怕一個生產(chǎn)者。DPOS旨在優(yōu)化擁有強壯網(wǎng)絡(luò)連接的誠實節(jié)點100%參與(共識過程)的名義條件。這使得DPOS有能力在平均只有1.5秒的時間內(nèi)以99.9%的確定性確認(rèn)交易,同時以優(yōu)雅和可檢測的方式降級 – 從降級中恢復(fù)正常也不過是小事一樁。
其它共識算法以網(wǎng)絡(luò)條件差的不誠實節(jié)點為名義條件展開設(shè)計,這樣設(shè)計的最終結(jié)果就是性能更差、延遲更高、通信開銷高的網(wǎng)絡(luò),而且這個網(wǎng)絡(luò)在33%節(jié)點失效的情況下會完全停擺。
在BitShares成功運行三年以及在Steem運行一年期間,我們經(jīng)歷了各種各樣的網(wǎng)絡(luò)條件和軟件錯誤。DPOS成功穿行于其間,在處理了比任何其它區(qū)塊鏈更多交易的同時持續(xù)達成共識,展現(xiàn)了非凡的能力。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。