DPOS共识算法—缺失的白皮书
這是一份缺失的白皮書以及對委托權益共識算法(DPOS)的分析!這篇文章的目的就是提供一個分析,為什么DPOS可以行的通以及是什么使得它很強大!一篇早期對于DPOS介紹的文章可以在bitshares.org看到,不過這篇介紹中也包含了很多不屬于真正共識處理的其他方面。
翻譯作者:許莉
原文地址:DPOS Consensus Algorithm
所有的區塊鏈基本上都是一個確定性的狀態機,根據交易來行動。共識就是對交易順序的確定性達成一致以及過濾無效交易的過程。也有很多不同的共識算法能夠產生相同的交易順序,但是通過多年來在多個區塊鏈上的可靠運行,DPOS被證明了是很強大、安全和高效的。
DPOS共識算法摘要
DPOS共識算法分為兩個部分:選舉一群區塊生產者和調度生產。選舉過程是為了保證利益相關者最終掌握控制權,因為當網絡沒有正常運行時利益相關者損失的最多。區塊生產者是如何選舉出來對于共識是如何達成的幾乎沒有影響。因此,本文主要講解當一個區塊生產者被選舉出來之后共識是如何達成的。
為了解釋這個算法,我假設有3個區塊生產者:A、B、C。因為共識的達成需要2/3+1多數來解決所有情況,這個簡單的模型假設區塊生產者C是決勝者。在現實世界中會有21個區塊生產者或者更多。就像工作量證明,一般規則就是最長的鏈勝出。任何時候一個誠實的對端看見一個有效的長鏈都會將自己從當前的分支切換到最長鏈上。
正常流程
在正常流程下區塊生產者會輪流每3秒鐘來生產一個區塊。假設每次輪流到的人都產生了自己該產生的區塊,那么將會產生最長鏈。區塊生產者在不屬于自己產生區塊之外的其他任何時間間隙產生的區塊都是無效的。
少數者分支
最多允許1/3的節點可以是惡意的或者存在故障,創造了一個少數者分支。這種情況下少數者分支只會每9秒鐘產生一個區塊,而多數者分支則會每9秒鐘生產2個區塊。再一次,誠實的2/3多數者將永遠會比少數者分支的鏈要長。
未連接的少數者雙重生產
這個少數者可以嘗試產生無數的分支,但是所有的分支上的鏈都會比多數者的鏈要短,因為少數者被限制區塊的生產要比多數者慢。
網絡分片
網絡完全有可能碎片化,在網絡碎片化時沒有任何分支擁有多數區塊生產者。在這種情況下,最長的鏈將會在最大的少數者上產生。當網絡的連通性恢復之后小一些的少數者會自動的切換到最長鏈上,明確的共識也隨之恢復。
有可能會出現3個分支中2個鏈長一點的分支,鏈的長度是一樣的。這種情況下當第三個(鏈短一點的分支)分支上的區塊生產者重新加入到網絡時就會打破這種平衡。區塊生產者的數量是奇數所以這種情況不會維持太長時間。后面我們也會對區塊生產者重新洗牌,讓生產區塊的順序隨機化,來保證即使兩個分支擁有相同數量的區塊生產者,分支也將會在不同的長度爆發生長,導致一個分支接管另一個分支。
連接的少數者雙重生產
在這種場景下少數者B在屬于他的時間間隙生產2個或者更多其他的區塊。下一個預訂的區塊生產者(C),也許會選擇在任何一個由B生產的區塊上生產鏈。當C生產出一個區塊之后,它將會變成一個最長鏈,所有選擇B1的節點都會切換到最長鏈的分支上。不論少數惡意區塊生產者嘗試傳播多少其他的區塊都沒有關系,這些區塊在最長鏈中存在的時間永遠不會超過一個回合的時間。
最后不可逆區塊
在網絡分片事件中是有可能存在多個分支繼續生長了一段延長時間。在長期來看,最長的鏈將會勝出,但是觀測者要求有個方法可以確定的知道一個區塊絕對是增長最快的鏈中的一部分。這個可以根據看到區塊生產者們的超過2/3的確認消息就能確定。
在下圖中,區塊B被C和代表著多數2/3+1確認的A確認過,因此我們可以推測只要2/3的區塊生產者都是誠實的那么就沒有其他的鏈會比這個鏈更長。
注意這個“規則”與比特幣的6個塊確認是相似的。一些聰明的人可以設計出一系列的事件讓兩個不同的節點在出現在不同的最后不可逆區塊上。這種邊緣案例要求攻擊者能夠完全掌控通信延時,并且需要在幾分鐘之內,不是一次,而是兩次使用這個控制力。如果這種事情發生了,那么長期來看,最長鏈的規則依然有效。我們估計這種攻擊事件發生的概率基本為0,而且就算發生了,對于資金基本上造成的影響小到你都不用去擔心。
缺少區塊生產者法定數
雖然可能性比較小,但是也可能存在區塊生產者的法定數不明確,這種情況對于少數者還是有可能繼續生產塊的,在這些塊中利益相關者可以包含更改投票的交易。然后這些投票可以選擇一群新的區塊生產者,讓區塊生產的參與率恢復到100%。一旦這種情況發生,少數者鏈將會最終超過其他參與率低于100%的鏈。
在這個過程中所有的觀察者都將會知道網絡狀態一直在變化指導區塊生產參與率達到了67%。那些選擇在這種情況下進行交易的人冒的風險大概跟沒有得到6個塊確認的交易差不多。他們是在知道有很小的可能性存在共識可能最終選擇了一條不同的分叉進行操作的。在現實中這種情況比接收一個少于3個確認的比特幣區塊要安全的多。
多數區塊生產者腐敗
如果多數的區塊生產者都變得腐敗,那么他們就可以產生無數的分叉,每個都將以2/3多數確認進行著。在這種情況下,最后不可逆區塊算法就會恢復成最長鏈算法。那么被最大的多數者所認可的鏈將會成為最長鏈, 誰是最大的多數者由剩下少數誠實的節點來決定。這種行為不會維持較長的時間,因為利益相關者最終會選擇投票替換這些區塊生產者。
交易作為權益證明(TaPoS)
當用戶簽名一個交易的時候,他們是在對區塊鏈的狀態有個確定猜想下進行簽名的。這個猜想建立在他們對近期區塊的看法。如果最長鏈的共識發生了改變,那么可能會使簽名者在他們認可交易時產生的猜想無效化。
由于TaPoS, 當一個區塊在鏈的歷史中不存在,所有的交易包括最近一個區塊的hash值都被認為是無效的。任何在孤兒分支對交易簽名的人將會發現交易是無效的,而且是無法遷移到主分支上的。
這個處理的一個附帶作用就是安全性,可以抵御試圖產生替代鏈的長期攻擊。各利益相關方每次在交易的時候都會直接確認區塊鏈。隨著時間的流逝,所有的區塊都被所有的利益相關者確認,而這一點是無法在偽造的鏈中被復制的。
確定的區塊生產者洗牌
在所有的列子中我們展示了區塊生產者的循環調度。在現實中一群區塊生產者會在N個塊(N代表的區塊生產者的數量)之后會被洗牌一次。這種隨機性保證區塊生產者B不會總是忽略區塊生產者A,也確保每當有多個相同數量的區塊生產者的分叉出現時,僵局都能被打破。
總結
DPOS在任何能夠想得到的自然網絡中斷情況下還是穩健的,即使面對大多數的區塊生產者舞弊也是安全的。不像一些競爭算法,DPOS在多數區塊生產者出現故障的時候也可以正常工作。在這個期間,社區可以投票來選擇新的區塊生產者來代替這些出現故障的區塊生產者直到區塊生產者的參與率達到100%。我知道沒有其他的共識算法可以在如此高頻率且多變的失敗環境下還能如此穩健。
DPOS從選擇一個選舉區塊生產者的共識算法而最終獲得重要的安全性,并認證節點的高質量和唯一性。使用投票同意的處理機制確保了即使是擁有50%投票權的人,也無法依靠自己的權利選擇哪怕一個區塊生產者。DPOS旨在優化具有強大網絡連接,且名義上誠實節點參與率為100%條件下的性能。這讓DPOS有能力在平均1.5s內擁有99.9%的確定性來確認一筆交易,同時以優雅的方式,能在降級服務中恢復。
其它的共識算法設計來支持較差網絡的,和面對非誠實的節點。這將導致最終的可選設計只能是更慢的網絡性能,更高的延遲,高通信開銷,并且在33%的節點故障時將導致整個網絡掛掉。
在BitShares3年,Steem一年的成功運營中,我們經歷了各種網絡條件和軟件bug。 DPOS已經成功地經歷了這種環境,并展示了保持共識時,比任何其他鏈處理更多的交易時的能力
原始鏈接:https://lilymoana.github.io/DPOS.html?
總結
以上是生活随笔為你收集整理的DPOS共识算法—缺失的白皮书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Breaking the Ledger
- 下一篇: C语言实现的ABCI