EOS 共識演算法 DPOS3 0 的改進

2021-08-20 09:24:48 字數 2759 閱讀 3094

bp : block producer, 塊產生者。

本文描述了乙個dpos的改進,它更強地保證了遵守dpos3.0協議下的結點不會共識失敗。我們定義共識失敗為: 兩個結點包括了兩個不同的不可逆的鏈.

背景:pow , 如bitcoin, 定義了乙個 「最長鏈」規則的共識。使用這個規則,任何block都不會被認為是不可逆的確認狀態。 在任何時候,乙個人可以從乙個更老的塊生產乙個更長的鏈,結點就會轉換(分叉)。由此我們可以得出這樣的結論: 位元幣僅僅提供了乙個基於的嘗試去分叉產所需要的經濟成本的高概率的不可逆性。

bitshares介紹dpos. 在這個演算法下,股權持有人選舉產生bp。bp被偽隨機的打散並分配了乙個絕對的時間段。在這個時間段裡,他們會產生或者不產生乙個塊。擁有大多數bp的鏈它會以更快的速度增加它的鏈高度。如果兩個鏈以不同的速度增長,那麼更快的鏈最終將成為最長的鏈。因此,最初委託證明的股份演算法為位元幣提供了類似的保證,就是說,隨著塊的增加,另乙個較慢的鏈越來越不可能發生逆轉。

dpos排程演算法的本質是將大量的資訊傳遞給乙個觀察者。例如,基於缺失塊的出現頻率,乙個觀察者可以發現他們可能處於乙個少數派的鏈上。在21個bp的情況下,在僅僅2個連續的缺失塊出現時(6秒), 乙個節點可以準確地檢測到他們可能是在乙個少數的分叉上。同樣地,如果bp在連續21個塊中都沒有缺失乙個塊,那麼你可以確定你的塊不會被反轉。

罕見的共識失敗(dpos2.0)

dpos2.0我們引入了最後乙個不可逆塊的概念。這個塊最近有2/3+1的bp基於它來產生新塊的。理論是,如果2/3+1的生產者建立在乙個確定乙個區塊的鏈條上,那麼就不可能有其他的分叉了。

就是說,在真實使用者已經構造了乙個網路被分成兩條鏈的人為的場景。常情況下,這只會導致乙個或兩個鏈停止前進的最後乙個不可逆塊,直到乙個鏈被重新連線到2/3+1的生產者。

在這個正常的行為中,一切都很好,一旦連線建立,所有的節點就會集中在乙個真鏈上。

然而,在這個有乙個競爭條件,就是兩個分叉的鏈有可能同時得到2/3+1生產者。當這種情況發生時,分叉兩條鏈的節點無法同步,因為它們都不會回卷到最後乙個不可逆轉的塊。需要手動干預。

在這種情況下,乙個或兩個分叉將會停止前進的不可逆性,這取決於哪個分叉最終會得到2/3+1的生產者。少數派鏈的增長速度可能仍為1/2,但等待不可逆轉的節點將不再接受最終確定的少數派鏈上的任何交易。

這種故障模式產生了乙個單塊,如果它回退了,一些服務可能會經歷損失。根據我們的估計,發生這種情況的概率要比乙個位元幣塊的概率要小得多。在實際測試中,bitshares和steem在執行了超過3年並沒有發這種情況。

dpos 3.0 + bft

隨著eosio我們引入了區塊鏈通訊(ibc),它允許乙個鏈高效地向另乙個鏈證明交易是最終的。finality對ibc至關重要,因為一旦區塊鏈結受了來自另乙個的訊息,就不容易,也不希望回卷兩個鏈來糾正錯誤。

想象一下區塊鏈正試圖接受位元幣存款。乙個使用者在他引用的塊的6塊後,提交了全部的位元幣。基於這個證明這個是不可逆的動作。 想像一下,如果btc分叉了,這6個塊給撤銷了,這時候怎麼辦? 這個區塊鏈不可能逆轉和拒絕先前接受的位元幣交易。這樣的事件需要人工干預和(或)硬分叉。這樣的硬分叉/干預將會波及所有連線的鏈。這不是乙個可行的選擇。

為了確保ibc在所有非複雜情況下的安全可靠,dpos 3.0 + bft引入了乙個小的更改, 是關於最後乙個不可逆塊(lib)是如何計算的。有了這個更改,我們可以證明兩個節點不可能在沒有至少1/3的塊產生節點故意惡意的情況下得出不同的結論。此外,我們還可以證明哪怕是乙個節點的惡意行為。

dpos背後的核心理念是,每個產品塊都是對所有之前區塊的投票。有了這個模型,2/3+的生產者建立在乙個特定的區塊上,它有2/3+投票。這在理論上聽起來很不錯,但在不同的時間,非拜占庭式的區塊生產者可以在不同的分叉上生產區塊。當它們產生這些塊時,它們最終會對每個鏈上出現的塊編號產生間接的相互衝突的投票。

在dpos2.0 的規則下,a』s block n會有來自a,b和c的投票,並且,因為有(2/3+1)的確認成為不可逆的。在dpos的規則下,我們要求a披露他之前確認的另乙個block n,由於這個資訊披露,網路將不會計算a的block,因為它已經投票給b的block n,這就使得b的block n只有2個投票,這還不足以達到不可逆性。

dpos 3.0 b的block n永遠不會實現直接的不可逆性,因為它要求a、b和c的投票結果是2/3+1,而a在另乙個塊n上投下一票,如果n+2和b產生n+3,那麼n+1就不可逆了。這將會給block n+1的3張支援票,達到2/3+1。一旦c的block n+1是不可逆轉的,b的block n也被認為是不可逆的。

為了實現這個演算法,每個塊生成器包括最高的塊號(h),它在任何乙個分叉上都得到了確認。當塊 n被應用時,僅在於range (h+1, n)這個範圍內的塊會得到不可逆性的投票。

任何在重疊區域對乙個塊進行簽名的bp都被認為是拜占庭式的,並將生成錯誤行為的密碼學證明。

有了這些資訊,我們現在可以生成乙個簡單的證明,即對於任何給定的塊高度,在相同高度的兩個不同塊上獲得2/3+1的投票,同時至少1/3的bp必須對衝突範圍內的塊進行簽名。

如果有乙個誠實的網路**,那麼就會發生這樣的情況: 兩個好的組(1/3 *2)產生各自的選擇,乙個壞的組(1/3*1)在兩個分叉上都進行簽名。 而實際上乙個連線良好的網路,至少需要2/3+1的成員是惡意的,才有可能去產生兩個不同的不可逆塊。

在這些規則下,現在有兩種方式讓生產者簽署拜占庭式的宣告:

1. 用相同的塊號直接或間接地簽署兩個區塊。

2. 用相同的時間塊籤兩個塊。

執行預設軟體的誠實節點永遠不會做這些事情。因此,我們有可能對所有的不良行為進行懲罰,即使只是失敗的嘗試的行為。     

感謝這個問題的解決方案是由bart, arhag,以及我和b1團隊的其他成員共同發現的。

DPOS共識機制

鏈客,有問必答!eos在第一版 中使用的dpos共識機制,而在新一版的白書中,對共識機制進行了改進,使用bft dpos混合共識機制。使出塊速度從原來的3秒變為0.5秒,tps顯著提高,達到測試3590次 秒。eos第一版共識機制dpos eos現在系統執行的鏈用的共識機制是第一版 的,也就是純dp...

DPOS共識機制

鏈客,有問必答!eos在第一版 中使用的dpos共識機制,而在新一版的白書中,對共識機制進行了改進,使用bft dpos混合共識機制。使出塊速度從原來的3秒變為0.5秒,tps顯著提高,達到測試3590次 秒。eos第一版共識機制dpos eos現在系統執行的鏈用的共識機制是第一版 的,也就是純dp...

共識演算法DPOS原理及實現

dpos delegated proof of stake,委任權益證明 它的原理是讓每乙個持有幣的人進行投票,由此產生n位代表 我們可以將其理解為n個超級節點或者礦池,而這n個超級節點彼此的權利是完全相等的。從某種角度來看,dpos有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責 當...