8.2EOS區塊共識流程

背景

上一章節已經簡單的介紹了EOS節點的共識流程,下面舉例說明節點生產的區塊是如何達成共識的:

EOS共識分爲兩個部分:
1.共識出備選不可逆塊:當區塊有(2/3 + 1)個節點確認後,則這個區塊被加入到備選不可逆塊列表中。
2.從備選不可逆塊列表中選出最終的不可逆區塊:對備選不可逆列表中的塊進行從小到大排序,取1/3處,即爲最終的不可逆塊序號,小於此序號的都認爲已成爲不可逆塊。

1. 共識出備選不可逆塊

prduce block : 生產節點生產的區塊
confirm block : 生產節點要確認的區塊(本地生產+接收到的塊)
accept block : 非生產節點接收到的區塊
plib : 加入到備選的不可逆塊序號
lib : 最終的不可逆區塊序號

下面的舉例不考慮網絡延遲導致的漏塊情況:

假如有A,B,C,D四個生產者按A->B->C->D順序出塊,每個節點出12個塊,eos啓動後,此時A爲生產者,A先出12個塊,自己會把1-12的塊確認一次,並分別發給B,C,D,此時節點B,C,D只接收塊,即B,C,D每個節點上都有序號爲1->12塊待確認;
8.2EOS區塊共識流程

生產者切換到B後,B開始生產塊的序號爲13->24,總共12塊,此時B會把A發來的1->12的塊確認,並把自己生產的序號爲13->24的塊確認一次,併發給A,C,D,此時節點A生產的序號爲1->12的塊被確認兩次,收到序號爲13->24的塊,節點C,D上有新接收的13->24的塊,即有序號爲1->24的塊待確認;
8.2EOS區塊共識流程

生產者切換到C後,C開始生產塊,生產塊的序號爲25->36,總共12塊,此時C會把A發來的1->12的塊和B發來的序號爲13->24的塊確認,此時節點A生產的序號爲1->12的塊已經被確認了三次,B生產的序號爲13->24的塊已經被確認了兩次,C並把自己生產的序號爲25->36的塊確認一次,併發給A,B,D,此時A節點接收到序號爲25->36的塊,即有序號爲13->36的塊待確認;B節點接收到序號爲25->36的塊,即有序號爲25->36的塊待確認; D節點接收到序號爲25->36的塊,即有序號爲1->36的塊待確認;

此時節點A生產的序號爲1->12的塊被確認了三次,因爲有四個節點,那麼需要確認(4*2/3 + 1 = 3)即需要被確認三次,即可成爲備選不可逆塊。
此時,生產者爲C,序號爲12的塊成爲備選不可逆塊,會被加入到備選不可逆區塊列表中;
8.2EOS區塊共識流程

生產者切換到D後,依次按照此邏輯進行共識,序號爲24的塊就會被加入到備選不可逆區塊列表中;
8.2EOS區塊共識流程

生產者切換到A後,依次按照此邏輯進行共識,序號爲36的塊就會被加入到備選不可逆區塊列表中;
8.2EOS區塊共識流程

生產者切換到B後,依次按照此邏輯進行共識,序號爲48的塊就會被加入到備選不可逆區塊列表中;
8.2EOS區塊共識流程

2. 從備選不可逆塊列表中選出最終的不可逆區塊

根據上面的描述,可以知道C節點確認出的備選不可逆塊序號爲12,D節點確認出的備選不可逆塊序號爲24,A節點確認出的備選不可逆塊序號爲36,B節點確認出的備選不可逆塊序號爲48;

8.2EOS區塊共識流程

此時,備選不可逆塊列表中的內容爲:[12,24,36,48],根據EOS中給出的算法,從小到大排序,取1/3處,那麼12爲最終的不可逆塊序號。

總結

EOS共識需要理解以下三點:

  1. 各個節點需要共識出備選不可逆塊。
  2. 從備選不可逆塊列表中選出最終的不可逆區塊。
  3. 一個區塊成爲最終的不可逆塊序號,經過了2輪(2/3+1)的確認。

鏈接

http://www.3heu.club:8008/
https://www.jianshu.com/p/1f692784cd3f
https://blog.csdn.net/arm_snow/article/details/90020570

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章