一文了解波卡共識GRANDPA協議
PolkaBase
2020-08-07 13:25
本文约2937字,阅读全文需要约12分钟
這是我們的Polkadot共識系列文章的第2部分。有關簡介,請參見第1部分。在該系列的簡介中,概述了一種共識算法可以幫助計算機網絡回答三個問題。 GRANDPA將解決第二個問題。 1. 誰可以提出下

這是我們的Polkadot共識系列文章的第2部分。

在該系列的簡介中,概述了一種共識算法可以幫助計算機網絡回答三個問題。 GRANDPA將解決第二個問題。

1. 誰可以提出下一個更改?

2. 哪一組是最終的更改?

3. 如果有人違反規則怎麼辦?

二級標題

二級標題

GRANDPA協議

GRANDPA與其他拜占庭式容錯(BFT)區塊鏈算法不同之處在於,驗證者對鏈而不是區塊進行投票。該協議採用過渡性地投票機制,GRANDPA算法找到具有最高投票數的區塊編號,將將其視為最終投票。此過程允許在在幾個區塊內同時進行。

最後一部分很重要,因為GRANDPA消除了阻礙其他區塊鏈結尾工具的瓶頸。與其他實用拜占庭容錯PBFT衍生物一樣,GRANDPA具有O(n²)複雜度。也就是說如果將節點數增加一倍,則必鬚髮送四倍的消息數。能使區塊生產成為確定性過程一部分的共識系統使您可以向每個區塊發送這些消息。通過將區塊生產隔離在另一個模塊中,我們可以以更高效的方式生產區塊( BABE為O(n)),並在一輪投票中最終確定其中的幾個。

要理解此示例,請查看Kusama節點中的以下日誌消息:

Idle (24 peers), best: #664257 (0x706c…76b7), finalized #664253 (0xe4ab…4d2a)

Imported #664258 (0xee71…6321)

Idle (24 peers), best: #664258 (0xee71…6321), finalized #664256 (0x809a…a5d8)

二級標題

二級標題

一個GRANDPA回合

選民將執行以下操作以生成新的區塊:

1.被指定為“主要”節點將廣播其認為之前可能獲得的最高選票區塊作為最終區塊。

2.在等待一段網絡延遲之後,每個驗證者都會廣播一個其認為應該確定的最高選票區塊的“預投票”,並認為其應當是最終區塊。如果驗證者的絕大多數是誠實的,則此區塊應擴展最初廣播的鏈上。所以新鏈可能比最後確定的鏈還多幾個區塊。

3.每個驗證者根據預投票計算可以確定最終那個最高選票的區塊。如果預投票集擴展到最後一條最終確定的鏈,則每個驗證者將對該鏈進行“預執行”。

4.每個驗證者都等待接收足夠的預執行,以在新確定的鏈上傳遞信息。

與其他拜占庭容錯算法(例如PBFT和Hotstuff)的細微但重要的區別是,該投票環節的關鍵路徑上沒有意見變化。儘管每一輪的主要內容都有所改動,但這種更改僅在異步網絡中開啟新一輪迴合,所以在部分同步的網絡中即使不分配主要地帶,協議也將始終前進。

二級標題

二級標題

安全責任:當意外發生時

GRANDPA具有一項稱為“ 安全責任”的功能,可使驗證者對違反安全性的行為負責。當確定不同鏈中的兩個區塊時會發生安全衝突,安全責任功能就類似於發生意外後的調查。

但是首先要明確兩個相互衝突的鍊是如何形成的? BFT系統始終建立在以下條件之上:有問題的驗證者的最大數量為總驗證者的一小部分(在我們的情況下為三分之一)。如果驗證者集未能滿足上述要求,為了最終明確兩個衝突的鏈,至少有三分之一的驗證人對這兩個鏈進行了投票。

在此示例中,有10個驗證者,這意味著3是系統可以承受的最大錯誤驗證者數目(f =(10-1)/ 3)。有了4個錯誤的驗證器(紅色)和一個網絡分區,每組誠實的驗證者藍色)可以各自區塊是最終區塊。

在兩個相互衝突的鏈上進行投票是一種模棱兩可的行為。實際上大家都認為模棱兩可是對BFT系統的攻擊,但在GRANDPA中我們可以檢測到這種行為。

首先,我們將詢問節點投票決定一個新區塊時為什麼沒有考慮上一個區塊的情況。任何誠實的驗證者都應啟用第二輪的一組預投票或預執行來答复這個問題,因為第二個區塊總會擁有大部分的選票。

二級標題

二級標題

GRANDPA如何實現可用性和有效性

還記得上面的日誌消息嗎?注意到最終區塊是在最佳區塊後面的第二個區塊。這種滯後實際上是保持區塊生產和完成不同的優勢。

Idle (24 peers), best: #664258 (0xee71…6321), finalized #664256 (0x809a…a5d8)

包括Polkadot在內的區塊鏈互操作性系統都存在數據可用性的問題。設想有一個整理者將一個區塊提交給驗證者,但是其他平行鏈收集者都沒有看到它。如果提交區塊信息的收集者下線了怎麼辦?驗證者有責任在一段時間內幫忙存儲完整的區塊信息,以便所有平行鏈的收集者都可以獲得區塊信息。

驗證者應該在對它們進行投票之前就驗證好候選區塊,但是我們要確保它們確實是這樣做的。在Polkadot中存在許多稱為釣魚者的節點,它們可以驗證區塊並舉報驗證者的不當行為,例如在中繼鏈中指出一個無效的平行鏈。

原文鏈接:

原文鏈接:

原文鏈接:https://polkadot.network/polkadot-consensus-part-2-grandpa/

翻譯/ Mike

編輯/ Dolly

PolkaBase
作者文库