伊斯坦堡拜占庭容錯演算法區塊鏈

燎原鏈 2018-07-27 17:45
分享到:
導讀

對一筆交易,如果利益不相干的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。

blob.png

共識機制是區塊鏈網絡用來達成交易確認共識的協議,伊斯坦堡拜占庭容錯演算法是共識機制的一種,共識機制是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相干的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。

blob.png

我們先了解一下拜占庭容錯,其思想淵源來自拜占庭將軍問題,是一種解決分布式系統容錯問題的通用方案。PBFT算法的核心理論是n>=3f 1,n是系統中的總節點數,f是允許出現故障的節點數。換句話說,如果這個系統允許出現f個故障,那么這個系統必須包括n個節點,才能解決故障?;诎菡纪④妴栴},PBFT 算法包括四個階段來達成共識:請求(request)、預準備(Pre-Prepare)、準備(Prepare) 和確認(Commit)。流程如下圖所示:

blob.png

其中C為發送請求端,0123為服務端,3為宕機的服務端,具體步驟如下:

1. Request:請求端C發送請求到任意一節點,這里是0

2. Pre-Prepare:服務端0收到C的請求后進行廣播,擴散至123

3. Prepare:123,收到后記錄并再次廣播,1->023,2->013,3因為宕機無法廣播

4. Commit:0123節點在Prepare階段,若收到超過一定數量的相同請求,則進入Commit階段,廣播Commit請求

5.Reply:0123節點在Commit階段,若收到超過一定數量的相同請求,則對C進行反饋,根據上述流程,在 N ≥ 3F 1 的情況下一致性是可能解決,N為總計算機數,F為有問題的計算機總數。

伊斯坦堡拜占庭容錯演算法通過使用3相一致,從原來PBFT繼承PRE-PREPARE,PREPARE,和COMMIT。系統可以容忍驗證器節點網絡F中的大多數故障節點N,其中N = 3F 1。在每輪之前,驗證器將默認以循環方式選擇其中一個作為提議者。然后,提議者將提出新的塊提議并將其與PRE-PREPARE消息一起廣播。在收到PRE-PREPARE來自提議者的消息后,驗證者進入狀態,PRE-PREPARED然后廣播PREPARE消息。這一步是為了確保所有驗證器都在同一個序列和同一輪上工作。當接收2F 1的PREPARE消息,驗證程序進入的狀態PREPARED,然后廣播COMMIT信息。此步驟是通知其對等方它接受建議的塊并將塊插入鏈。最后,驗證等待2F 1的COMMIT消息進入COMMITTED狀態,然后插入塊鏈。

伊斯坦堡拜占庭容錯演算法(Istanbul BFT)中的塊是塊是最終的,這意味著沒有分叉,任何有效塊必須位于主鏈的某個位置。為了防止故障節點從主鏈生成完全不同的鏈,每個驗證器將2F 1接收的COMMIT簽名附加到extraData標頭中的字段,然后將其插入鏈中。因此,塊是可自我驗證的,并且也可以支持輕客戶端。但是,動態extraData會導致塊哈希計算出現問題。由于來自不同驗證器的相同塊可以具有不同的COMMIT簽名集,因此相同的塊也可以具有不同的塊散列。為了解決這個問題,我們通過排除來計算塊哈希COMMIT簽名部分。因此,我們仍然可以保持塊/塊哈希一致性,并將共識證明放在塊頭中。

狀態:

NEW ROUND:提議者發送新的阻止提案。驗證器等待PRE-PREPARE消息。

PRE-PREPARED:驗證程序已收到PRE-PREPARE消息和廣播PREPARE消息。然后,它等待2F 1的PREPARE或COMMIT消息。

PREPARED:驗證器接收到2F 1的PREPARE消息和廣播COMMIT消息。然后,它等待2F 1的COMMIT消息。

COMMITTED:驗證器接收到2F 1的COMMIT消息,并且能夠將提出塊插入blockchain。

FINAL COMMITTED:新塊已成功插入區塊鏈,驗證器已準備好進入下一輪。

ROUND CHANGE:驗證器正在等待同一個建議的輪數2F 1的ROUND CHANGE消息。

下圖是他們之間的狀態裝換

blob.png

A提議發出者 1 2 3 代表驗證者

NEW ROUND- > PRE-PREPARED:

投保人從txpool收集交易。

Proposer生成塊提議并將其廣播給驗證者。然后它進入PRE-PREPARED狀態。

每個驗證器PRE-PREPARED在收到PRE-PREPARE具有以下條件的消息時進入:

§ 1.阻止提案來自有效的提議者。

§ 2.塊頭有效。

§ 3.阻止提案的序列和舍入匹配驗證器的狀態。

ValidatorPREPARE向其他驗證器廣播消息。

PRE-PREPARED- > PREPARED:

驗證器接收2F 1有效PREPARE消息以進入PREPARED狀態。有效消息符合以下條件:

§ 1.匹配序列和圓形。

§ 2.匹配塊哈希。

§ 3.消息來自已知的驗證器。

ValidatorCOMMIT在進入PREPARED狀態時廣播消息。

PREPARED- > COMMITTED:

驗證器接收2F 1有效COMMIT消息以進入COMMITTED狀態。有效消息符合以下條件:

§ 1.匹配序列和圓形。

§ 2.匹配塊哈希。

§ 3.消息來自已知的驗證器。

COMMITTED- > FINAL COMMITTED:

Validator將2F 1承諾簽名附加到extraData并嘗試將塊插入區塊鏈。

FINAL COMMITTED插入成功后,驗證器進入狀態。

FINAL COMMITTED- > NEW ROUND:

驗證器選擇一個新的提議器并啟動一個新的循環計時器

伊斯坦堡拜占庭容錯演算法(Istanbul BFT)它適合金融實務需求的伊斯坦堡拜占庭容錯演算法(Istanbul BFT),將搶先應用于摩根大通(J.P. Morgan)“Quorum”金融區塊鏈平臺上。

 其實伊斯坦堡拜占庭容錯演算法還在燎原連上進行了應用。EUBT的核心算法為IBFT,通過伊斯坦堡拜占庭容錯演算法(Istanbul BFT)的應用,相對于拜占庭容錯演算法(PBFT),大幅提升現有的以太坊架構的信息交換效率,整合了更多符合區塊鏈實際應用的功能。相對于比特幣等公有區塊鏈上常用的工作量校驗(Proof-of-Work,簡稱PoW或俗稱「挖礦」演算法)共識演算法,PBFT對此做出很多重大改良,而IBFT更進一步改良,相對于POW不能接受可結束(Final)的區塊鏈區塊(Block),導致每一個區塊都有被分支(Fork)的微幾率,IBFT區塊能夠即時達到Final狀態,共識完成就可以將上傳區塊,不會衍生更多分支,因此可以大幅提升區塊生產力。而產生區塊的過程不需要競爭,有別于比拼區塊長度的POW,不浪費能源及運行資源。

blob.png

總結

共識機制

伊斯坦堡拜占庭容錯演算法

燎原鏈的共識機制

參考文獻

維基百科共識機制的分類

燎原鏈白皮書和技術白皮書

燎原鏈官網:www.eubchain.com

加入燎原鏈社區,了解更多最新動態

Telegram:

t.me/eubsparkchain

Twitter:

twitter.com/eubchain

Facebook:

m.facebook.com/Eubchain-153177778671597

驗證 區塊 共識 節點 狀態
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道