主題:“PBFT” 對於區塊鏈從業者而言都很是耳熟能詳的名詞了,大家也都知道PBFT是拜占庭容錯算法
但是有沒有人想過爲什麼PBFT 需要2次Prepare?
對於 這個知識點,我們需要了解PBFT pre_ prepare和 prepare是幹嘛的.
先用一個例子解釋PBFT工作原理
故事:某公司遠程開會,需要投票表決某一個事項,但是開會的成員不一定在聽,投票表決只有Yes和No,那麼假設有b(bad boy)個人沒有認真聽,那麼需要多少人投票表決纔可以算通過呢?計算過程:先假定人數n,我們看看n至少是多少。那麼正常的收到消息n-b,判斷標準,我們至少需要b+1 個人通過(b+1說明,在以知的b個拜占庭節點後,還收到b+1個一致的節點,說明這個消息是正確的),但是不確定裏面的n-b個人是不是也是有沒有認真聽的人,所以我們最終的結論是:n-b-b>b,所以,n>3b, 這也就是爲什麼pbft需要保證。
那爲什麼需要pre_prepare 和 prepare 這兩次呢?
那就需要了解pre_prepare和prepare是幹嘛的和整個算法有什麼關聯就好了。
先看看pre_prepare:
pre_prepare 工作:
leader節點:向所有節點發出pre_prepare消息,進入prepare階段。
普通節點:收到Pre_prepare消息,進入prepare階段
再看看prepare階段:
所有節點都會驗證pre_prepare 消息(massage)然後驗證消息是否合法,然後將自己的 節點信息和投票結果封裝進 massage,並且向其他節點廣播。然後統計收到的其他節點發送的(封裝後的massage結果),如果統計投票贊成的投票數量大於(2n/3)接着進入commit階段。
以上是個人理解。歡迎討論。