NEO共識協議:授權拜占庭容錯機制如何工作

NEOGO發表於2019-01-30

拜占庭將軍問題

大家最為熟知的兩種共識機制分別是PoS(工作證明機制)與PoW(權益證明機制)。NEO在其基礎上進行改進,擬定了一種新的共識機制,稱為dBFT。

大家可以閱讀NEO白皮書(https://github.com/neo-project/docs/blob/master/en-us/index.md)、NEO文件彙總(docs.neo.org)等了解NEOdBFT模型框架的詳細介紹。

在對投票的正確結果進行判定時,拜占庭將軍問題總會出現。假設拜占庭帝國的9位將軍帶領軍隊包圍了古羅馬,為了成功佔領古羅馬城,將軍們面臨兩個選擇,一是全體進攻,一是全體撤退,如有任何將軍違背了共識決定,就會導致全軍覆沒。

他們每天進行一次投票決定是進攻還是撤退,若某一決定的贊成率超過50%,便達成共識。因為每位將軍所處的地理位置不同,因此他們會讓信使將各自的投票通報給其他將軍。

這個體系存在固有缺陷。

首先,任意數量的拜占庭將軍都可能受羅馬人的賄賂成為拜占庭軍隊的叛徒,這些將軍就稱為叛變的將軍。

其次,任何將軍都可能做出不合適的決定,這些將軍就稱為判斷不當的將軍。

再者,通報將軍指令的信使也可能受羅馬人的賄賂叛變篡改投票結果,而且信使也可能無法通報資訊或通報錯誤的資訊。

拜占庭將軍的情形可用來類比分散式計算系統所面臨的問題:系統存在可能會造成生態癱瘓的不可信及不能正常工作的節點時怎樣達成共識?

dBFT演算法

有很多協議想要解決拜占庭將軍的問題。如Hyperledger的工作證明機制就使用了PBFT演算法。而NEO則使用dBFT演算法來解決拜占庭將軍的問題。NEO創始人之所以選擇這個協議是因為與其他現有方案相比,它的可擴容性與效能更強。

可擴容性對於任何區塊鏈來說都是一個主要問題。隨著交易數量的增加以及網路規模的擴大,區塊鏈必須相應地擴容。如果區塊鏈不能根據需求擴容,就會導致交易延遲或交易無法處理。

類比一下:假設有個國家叫NEO,這個國家的每位公民都有權選舉領袖,也稱為代表。代表負責制定國家法律。如果公民不同意代表對某部法律的投票決定,可以下次票選另一位代表。公民會告訴所有代表怎樣做能讓他們最為滿意。每位代表必須追蹤瞭解所有公民的需求並在賬本上做好記錄。滿足公民的所有需求後才能通過法律,目的在於讓公民滿意。

需要通過法律時,就會從代表中隨機選出一名發言人,這位發言人將根據公民的需求擬定法律。擬定法律時他會計算這部法律對國家的幸福指數(衡量幸福程度的指標)有何影響。接著,發言人將擬好的法律交給每位代表,每位代表先判斷髮言人的計算結果與它們的是否一致,再與其它代表商討驗證幸福指數的計算結果是否正確。如果66%的代表一致表示發言人計算的幸福指數是正確的,那麼法律就此通過,大功告成。

全體節點都是誠實的,達成100%共識,將對法律A(區塊)進行驗證。

如果只有不到66%的代表達成共識,將隨機選出一名新的發言人,再重複上述流程。這個體系旨在保護系統不受叛徒/壞人及無法行使職能的領袖(即沒有惡意只是無法正確計算幸福指數的領袖)影響。

以此類推,對於NEO區塊鏈而言,公民就是NEO持有者,大多數NEO持有者都是普通節點,他們只能轉移或交易資產。

就像NEO國的公民一樣,他們不能參與區塊驗證。公民選出的代表就是NEO智慧經濟的記賬節點。記賬節點負責驗證區塊鏈上寫入的每個區塊。

公民的需求就是NEO持有者進行的交易,法律代表區塊鏈當前生成的區塊,而幸福指數代表當前區塊的雜湊值。下面我們來了解下系統是如何實施保護的。

不誠實的發言人

鑑於發言人是隨機選出的一名代表,因此他可能會不誠實或出現故障。在下文的案例中,發言人就給3名代表中的2名傳送了惡意資訊(法律B),同時給1名代表傳送了正確資訊(法律A)。

不誠實的發言人向左邊的節點傳送了正確資訊(A),
但向中間和右邊的節點傳送了惡意資訊(B)

在這種情況下該法律議案無法通過。中間與右邊的代表計算的幸福指數與發言人傳送的不一致,因此就不能驗證發言人擬定的法律,導致2人拒絕通過法律。左邊的代表因接收了準確的法律,因此能確認幸福指數,繼而成功完成1次驗證。但本提議仍無法通過,因為不足66%的達成共識(還需要2票)。接著將隨機選出一名新發言人,重新開始共識流程。

不誠實的代表

在此情況下,發言人是誠實的,但其中一名代表出現了異常。

右邊的代表向其他代表傳送了不正確的資訊(B)

這樣,發言人擬定的法律A就可以獲得驗證,因為(左邊與中間)誠實的代表都可以驗證由誠實的發言人擬定的法律A,達成66%的共識。代表也可以判斷到底是發言人向右邊的節點說謊還是右邊的節點不誠信。這點現在還不清楚,但公民可以根據相關資料稽核各節點是否誠信/正常運作。這些資訊有助於投票人判斷哪個代表最信得過,繼而選擇把票投給哪個代表。

原文連結:steemit.com/neo/@basicc…

進群交流:795681763


相關文章