授權拜占庭容錯算法,是基於持有權益比例來選出專門的記賬人(記賬節點),然後記賬人之間通過拜占庭容錯算法(即少數服從多數的投票機制)來達成共識,決定動態參與節點。dBFT可以容忍任何類型的錯誤,且專門的多個記賬人使得每一個區塊都有最終性、不會分叉。
基本介紹
- 中文名:授權拜占庭容錯算法
- 外文名:Delegated Byzantine Fault Tolerance
- 縮寫:dBFT
相關簡介,工作過程,
相關簡介
拜占庭將軍問題(Byzantine Generals Problem/BGP)
拜占庭將軍問題是指“在存在訊息丟失的不可靠信道上試圖通過訊息傳遞的方式達到一致性是不可能的”。因此在系統中存在除了訊息延遲或不可送達的故障以外的錯誤,包括訊息被篡改、節點不按照協定進行處理等,將會潛在地會對系統造成針對性的破壞。
拜占庭將軍問題是指“在存在訊息丟失的不可靠信道上試圖通過訊息傳遞的方式達到一致性是不可能的”。因此在系統中存在除了訊息延遲或不可送達的故障以外的錯誤,包括訊息被篡改、節點不按照協定進行處理等,將會潛在地會對系統造成針對性的破壞。
改進型實用拜占庭容錯(Practical Byzantine Fault Tolerance/PBFT)
PBET共識機制是少數服從多數,根據信息在分散式網路中節點間互相交換後各節點列出所有得到的信息,一個節點代表一票,選擇大多數的結果作為解決辦法。PBET將容錯量控制在全部節點數的1/3,即如只要有超過2/3的正常節點,整個系統便可正常運作。
聯邦拜占庭協定(Federated Byzantine Agreement/FBA)
聯邦拜占庭協定的主要特性是去中心化和任意行為容錯,通過分散式的方法,達到法定人數或者節點足夠的群體能達成共識,每一個節點不需要依賴相同的參與者就能決定信任的對象來完成共識。
工作過程
拜占庭將軍問題
最為熟知的兩種共識機制分別是PoW(工作證明機制)與PoS(權益證明機制)。NEO在其基礎上進行改進,擬定了一種新的共識機制,稱為dBFT。
在對投票的正確結果進行判定時,拜占庭將軍問題總會出現。假設拜占庭帝國的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%的共識。代表也可以判斷到底是發言人向右邊的節點說謊還是右邊的節點不誠信。這點現在還不清楚,但公民可以根據相關數據審核各節點是否誠信/正常運作。這些信息有助於投票人判斷哪個代表最信得過,繼而選擇把票投給哪個代表。