一分鐘瞭解影響未來的技術-區塊鏈(5):區塊鏈共識機制(二)

這一篇我們來下說PBFT共識:

PBFT基本流程

在這裏插入圖片描述

算法的核心三個階段分別是pre-prepare階段(預準備階段),prepare階段(準備階段),commit階段(提交階段)。圖中的C代表客戶端,0,1,2,3代表節點的編號,打叉的3代表可能是故障節點或者是問題節點,這裏表現的行爲就是對其它節點的請求無響應。0是主節點。整個過程大致是:

首先,客戶端向主節點發起請求,主節點0收到客戶端請求,會向其它節點發送pre-prepare消息,其它節點就收到了pre-prepare消息,就開始了這個核心三階段共識過程了。

Pre-prepare階段:節點收到pre-prepare消息後,會有兩種選擇,一種是接受,一種是不接受。什麼時候纔不接受主節點發來的pre-prepare消息呢?消息過期,消息超前

Prepare階段:節點同意請求後會向其它節點發送prepare消息。這裏要注意一點,同一時刻不是隻有一個節點在進行這個過程,可能有n個節點也在進行這個過程。因此節點是有可能收到其它節點發送的prepare消息的。在一定時間範圍內,如果收到超過2/3個不同節點的prepare消息,就代表prepare階段已經完成。

Commit階段:於是進入commit階段。向其它節點廣播commit消息,同理,這個過程可能是有n個節點也在進行的。因此可能會收到其它節點發過來的commit消息,當收到2/3個commit消息後(包括自己),代表大多數節點已經進入commit階段,這一階段已經達成共識,於是節點就會執行請求,寫入數據。

兩種命令發出方案:

cosmos —> leader出塊

泰嶽鏈—> 羣發塊

泰嶽鏈 pbft 和鏈的交互

在這裏插入圖片描述

  1. pbft 委員會會產生一名leader, leader 節點負責pbft的消息的準備和發出
  2. leader 節點會通過 FetchFastBlock通過中間層pbft_agent 去鏈上產生一個fastblock ,獲取到塊後會打包 fastBlock 到Proposal(preprepare) 消息並分發給每一個委員會成員節點。(期間委員會節點會分發消息)
  3. 所有委員會節點會收到並驗證Proposal消息中的塊,收到並驗證成功後進入prevote(prepare)
    消息中的塊,收到並驗證成功後進入prevote(prepare)
  4. prevote ,Precommit(commit) 這兩個階段會把自己對於塊的驗證結果(VerifyFastBlock)同意或反對發送給所有收到並統計收到節點票數,當超過2/3的節點數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章