摘要:提出問題上面所述的只經過了一次共識,那么會出現什么問題呢。這里引進的概念,即資格成為的區塊,簡稱。一個區塊經過共識后,他不會立馬成為會先成為然后再經過共識后才會成為。
很多讀者都很關心 BM 和 V神 在 EOS issue 上對于 DPOS 的機制的討論,接下來我們具體討論下他們的討論內容。
我們先來講述一下最初 EOS 的 DPOS + BFT 的共識機制:當一個特定的區塊被 ( 2/3 + 1 ) 生產者確認的時候,該塊成為不可逆塊。
假設現在有 A, B 和 C 三個 BP。
情況 a: A 生產了一個區塊 N, B 生產區塊 N + 1 并且確認了區塊 N, C 生產區塊 N + 2 并且確認了區塊 N, N +1 , 此時 N 已經有 3 個確認,達到了 2/3 + 1 個確認,則區塊 N 成為不可逆。
情況 b: A 生產一個區塊 Na, B 生產一個區塊 Nb, C 在 Nb 的基礎上生產一個區塊 N + 1, 此時發現 兩個區塊 N( Na 和 Nb ) 都不能達到 2/3 + 1 的確認數了,那豈不是永遠不會不可逆了?假如此時 A 在 N + 1 的基礎上生產區塊 N + 2, B 生產區塊 N + 3, 此時區塊 N + 1 達到了不可逆的,那么 N + 1 所在的該分叉上小于等于 N + 1 的都會變成不可逆, 也就是 Nb 也變成不可逆。
提出問題上面所述的只經過了一次共識,那么會出現什么問題呢。
V 神就在 issue 上提出一個例子。
可以看出第一條鏈 A 生產的 101 經過 B、C 已經達到了 3 個確認數已經成為不可逆了, 但此時 D 因網絡不好, 沒接收到這些塊, 從而產生分叉開始生產區塊 101 , 之后 A 生產區塊 102 , 因為塊高度大于之前的 101 所以是可生產的,B同理, 經過 A B 之后 D 生產的 101 同樣達到了 三個確認數, 這樣就會有 2 個塊高度為 101 的區塊成為了不可逆,造成 conflict。
為什么會造成這個原因呢?因為區塊 101 沒有經過所有節點就成為不可逆了, 導致后面的產生的區塊 101 可在下一輪被確認成為不可逆塊。如果說 A ,B ,C ,D 都確認了區塊 101, 那么下一輪誰都沒可能生產塊高度為 101 的區塊。也就不會同時出現 2 個不可逆塊了。 但全部節點確認才成為不可逆這就破壞了引入 BFT 的想法, 而且你沒辦法保證所有節點都會對他進行確認,畢竟網絡波動的原因會一直存在。
那怎么解決不可逆塊沖突, 但是又不會破壞 BFT 的想法呢。
那我們可以繼續使用 BFT 的思想, 也就是破壞掉第二個區塊 101成為 lib 的條件。
PLIB這里引進 proposed lib的概念, 即資格成為 lib 的區塊,簡稱 plib。
一個區塊經過 2/3 + 1共識后,他不會立馬成為 lib, 會先成為 plib, 然后再 plib 經過 2/3 共識后才會成為lib。
由上圖,區塊101 成為了 lib, 那么代表 plib 高度至少是 105 了,也就是 7 個節點中至少有五個生產的區塊高度達到了 110, 這時候,假如一個 E 生產出區塊 101, 那么至少需要 2/3 的節點幫他確認成為 plib,也就是有節點能生成 102 - 105,需要 4 個節點,但是 7 個 BP 已經有 5 個的塊高度達到了 110,根本就不夠節點能讓 區塊 101 成為不可逆, 那么就不會有 2 個 相同 block_num 的 lib 存在了。也就是當 N 能成為 lib 的時候,根本沒有任何情況能讓 2 個 N 同時成為 plib ( 當這里的 N 成為 lib 是排除掉因為 N + m 成為 lib 才使 N 成為 lib 的情況 )。
其實這種方式你可以看成幾條帶 plib 的分叉鏈, BP 節點對這些鏈進行 2/3 共識來選出哪條 plib 分叉鏈作為主鏈,丟棄掉其他 plib 分叉鏈。
總結: dpos 3.0 + BFT 有最初的一次共識增加到了2次,避免掉出現 conflict lib , 但是這也讓 head block num 和 lib 的高度拉到至少 2 2/3 21 * 12 = 336 個塊( 這種計算方式是忽略 BP 漏塊的情況 )。用時間算比較準確也就是 168 秒。 還有不要嫌字跡不清晰, 寫到一半筆沒墨水了,我也沒辦法 T T
以上為個人見解,如有錯誤或者缺漏,還請指正哈。
參考文章:
https://github.com/EOSIO/eos/...
https://medium.com/eosio/dpos...
轉載請注明來源: https://eos.live/detail/19947
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24534.html
摘要:最近看源碼發現跟之前理解有點出入,目前代碼實現上跟白皮書上也有所出入,該文章需要更新修正前言作為的代表,他的設計是比較超前的,也是目前最被看好的項目之一本文從傳統互聯網碼農思維,嘗試講述下的性能方面的設計本文只是涵蓋了基礎主鏈部分,暫不包括 最近看3.0源碼發現跟之前理解有點出入,目前代碼實現上跟白皮書上也有所出入,該文章需要更新修正 前言 EOS作為blockchain 3.0的代表...
摘要:第一類模式是在公鏈項目中運用的最廣泛應用的共識算法,比特幣長達年的運行已充分證明的安全性與穩定性。此時當前區塊已是合法區塊但是未獲得最終確認,類似于比特幣未獲得個塊確認存在回滾的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共識算法是分布式系統保證節點數據狀態一致性的方法,在區塊鏈的共識算法分POW(工...
摘要:第一類模式是在公鏈項目中運用的最廣泛應用的共識算法,比特幣長達年的運行已充分證明的安全性與穩定性。此時當前區塊已是合法區塊但是未獲得最終確認,類似于比特幣未獲得個塊確認存在回滾的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共識算法是分布式系統保證節點數據狀態一致性的方法,在區塊鏈的共識算法分POW(工...
閱讀 2326·2021-11-17 09:33
閱讀 852·2021-10-13 09:40
閱讀 582·2019-08-30 15:54
閱讀 788·2019-08-29 15:38
閱讀 2423·2019-08-28 18:15
閱讀 2481·2019-08-26 13:38
閱讀 1848·2019-08-26 13:36
閱讀 2137·2019-08-26 11:36