你們最爲熟知的兩種共識機制分別是PoS(工做證實機制)與PoW(權益證實機制)。NEO在其基礎上進行改進,擬定了一種新的共識機制,稱爲dBFT。git
你們能夠閱讀NEO白皮書(https://github.com/neo-project/docs/blob/master/en-us/index.md)、NEO文檔彙總(docs.neo.org)等了解NEOdBFT模型框架的詳細介紹。github
在對投票的正確結果進行斷定時,拜占庭將軍問題總會出現。假設拜占庭帝國的9位將軍帶領軍隊包圍了古羅馬,爲了成功佔領古羅馬城,將軍們面臨兩個選擇,一是全體進攻,一是全體撤退,若有任何將軍違背了共識決定,就會致使全軍覆沒。
算法
他們天天進行一次投票決定是進攻仍是撤退,若某一決定的同意率超過50%,便達成共識。由於每位將軍所處的地理位置不一樣,所以他們會讓信使將各自的投票通報給其餘將軍。網絡
這個體系存在固有缺陷。框架
首先,任意數量的拜占庭將軍均可能受羅馬人的賄賂成爲拜占庭軍隊的叛徒,這些將軍就稱爲叛變的將軍。分佈式
其次,任何將軍均可能作出不合適的決定,這些將軍就稱爲判斷不當的將軍。性能
再者,通報將軍指令的信使也可能受羅馬人的賄賂叛變篡改投票結果,並且信使也可能沒法通報信息或通報錯誤的信息。區塊鏈
拜占庭將軍的情形可用來類比分佈式計算系統所面臨的問題:系統存在可能會形成生態癱瘓的不可信及不能正常工做的節點時怎樣達成共識?3d
有不少協議想要解決拜占庭將軍的問題。如Hyperledger的工做證實機制就使用了PBFT算法。而NEO則使用dBFT算法來解決拜占庭將軍的問題。NEO創始人之因此選擇這個協議是由於與其餘現有方案相比,它的可擴容性與性能更強。cdn
可擴容性對於任何區塊鏈來講都是一個主要問題。隨着交易數量的增長以及網絡規模的擴大,區塊鏈必須相應地擴容。若是區塊鏈不能根據需求擴容,就會致使交易延遲或交易沒法處理。
類比一下:假設有個國家叫NEO,這個國家的每位公民都有權選舉領袖,也稱爲表明。表明負責制定國家法律。若是公民不一樣意表明對某部法律的投票決定,能夠下次票選另外一位表明。公民會告訴全部表明怎樣作能讓他們最爲滿意。每位表明必須追蹤瞭解全部公民的需求並在帳本上作好記錄。知足公民的全部需求後才能經過法律,目的在於讓公民滿意。
須要經過法律時,就會從表明中隨機選出一名發言人,這位發言人將根據公民的需求擬定法律。擬定法律時他會計算這部法律對國家的幸福指數(衡量幸福程度的指標)有何影響。接着,發言人將擬好的法律交給每位表明,每位表明先判斷髮言人的計算結果與它們的是否一致,再與其它表明商討驗證幸福指數的計算結果是否正確。若是66%的表明一致表示發言人計算的幸福指數是正確的,那麼法律就此經過,大功告成。
若是隻有不到66%的表明達成共識,將隨機選出一名新的發言人,再重複上述流程。這個體系旨在保護系統不受叛徒/壞人及沒法行使職能的領袖(即沒有惡意只是沒法正確計算幸福指數的領袖)影響。
以此類推,對於NEO區塊鏈而言,公民就是NEO持有者,大多數NEO持有者都是普通節點,他們只能轉移或交易資產。
就像NEO國的公民同樣,他們不能參與區塊驗證。公民選出的表明就是NEO智能經濟的記帳節點。記帳節點負責驗證區塊鏈上寫入的每一個區塊。
公民的需求就是NEO持有者進行的交易,法律表明區塊鏈當前生成的區塊,而幸福指數表明當前區塊的哈希值。下面咱們來了解下系統是如何實施保護的。
鑑於發言人是隨機選出的一名錶明,所以他可能會不誠實或出現故障。在下文的案例中,發言人就給3名錶明中的2名發送了惡意信息(法律B),同時給1名錶明發送了正確信息(法律A)。
在這種狀況下該法律議案沒法經過。中間與右邊的表明計算的幸福指數與發言人發送的不一致,所以就不能驗證發言人擬定的法律,致使2人拒絕經過法律。左邊的表明因接收了準確的法律,所以能確認幸福指數,繼而成功完成1次驗證。但本提議仍沒法經過,由於不足66%的達成共識(還須要2票)。接着將隨機選出一名新發言人,從新開始共識流程。
在此狀況下,發言人是誠實的,但其中一名錶明出現了異常。
這樣,發言人擬定的法律A就能夠得到驗證,由於(左邊與中間)誠實的表明均可以驗證由誠實的發言人擬定的法律A,達成66%的共識。表明也能夠判斷究竟是發言人向右邊的節點說謊仍是右邊的節點不誠信。這點如今還不清楚,但公民能夠根據相關數據審覈各節點是否誠信/正常運做。這些信息有助於投票人判斷哪一個表明最信得過,繼而選擇把票投給哪一個表明。
進羣交流:795681763