Zilliqa 的設計構思(第2部分:共識協議)

Zilliqa Team發佈於Zilliqa博客(2017年10月29日), Rita翻譯

歡迎加入我們的社區,向我們提問並獲取最新(希望也是最棒的)資訊!

從上篇文章起,我們開始通過系列文章介紹Zilliqa的設計和協議內容。 上篇我們介紹了Zilliqa可擴展性的核心思想 — — 分片(Sharding),即Zilliqa的交易吞吐量可以隨網絡規模增大而近似線性增長。

在本文中,我們將介紹Zilliqa的第二個最關鍵的組成部分 — — 共識機制。雖然閱讀此前的文章會對理解這篇有所幫助,但這篇也可獨立閱讀,因爲並不需要太多的背景知識。讓我們先快速回顧一下上篇文章 — — 第1部分網絡分片。通過網絡分片,Zilliqa將全網分成一系列包含更少節點的羣組,這樣的每個羣組被稱爲分片(Shard)。 所有分片能並行地處理交易並因此產生高吞吐量。 出於安全原因,分片必須足夠大,比如說包含600多個節點。Zilliqa使用PoW進行網絡分片。

共識協議對高吞吐量的重要性

網絡分片本身無法保證交易的高吞吐量,這是因爲吞吐量也取決於每個分片對新一組交易達成一致的時間以及提出下一個區塊的速度。
達成一致需要一個有效的共識協議。 對於Zilliqa來說,理想的共識協議應該可以利用分片小的優勢並使每個分片快速達成共識。

直接使用比特幣或以太坊的共識協議如何?

有些讀者可能會注意到,上面提到的分片大小比普通的區塊鏈P2P網絡(比如比特幣或以太坊)小得多,這些普通的區塊鏈網絡通常由數萬個節點組成。那麼,爲什麼Zilliqa不能在每個分片中直接使用與比特幣或以太坊相同的共識協議呢?這樣的話,由於分片大小比常規網絡小得多,所以分片上各成員達成共識也可以快得多,對嗎?

這聽起來很自然,但是不能僅僅因爲分片很小,就認爲它一定能夠使共識協議加速。

要理解這一點,讓我們先看看目前在比特幣和以太坊上使用的共識協議。這兩個區塊鏈平臺都採用了Nakamoto共識(Nakamoto consensus,以其發明者中本聰Satoshi Nakamoto命名)。

Nakamoto共識是一個非常簡單的概率共識機制,它的工作原理如下:在大致固定的時間間隔內,網絡選舉產生一名領導,該領導提出下一個區塊的提案。然後他將該區塊信息廣播給各網絡節點,由各節點決定接受或拒絕它。領導者提出尊重系統規則的有效的提案,例如避免雙倍花費的區塊(以下簡稱雙花)是有獎勵的。

Nakamoto共識的關鍵是領導人的選舉方式。在大致有規律的時間間隔內,網絡中的每個節點都會做一個PoW,做的最快的節點成爲領導者。顯然每個節點做PoW必須足夠努力,因爲只有一個領導者。

計算密集型的PoW需要大量的時間進行計算並且可能減慢共識協議,且它與網絡中的節點數量無關,而是取決於網絡的集體計算能力。因此,如果Zilliqa直接使用PoW作爲共識機制,那麼就不能很好地利用分片小的優勢,這就是爲什麼Zilliqa需要一個不同的共識協議。

實用拜占庭容錯(Practical Byzantine Fault Tolerance, 簡稱爲PBFT)

Zilliqa採用PBFT在每個分片中達成共識。該協議是由卡斯特羅和利斯科夫(Castro and Liskov)在1999年提出的。它是在這樣的假設下運行的:在執行協議之前,假設每個分片中最多有1/3的節點是惡意的。

我們選擇PBFT作爲我們的共識協議有幾個原因,主要的一點是它的效率取決於網絡的大小,因此可以更好地利用分片小的優勢,本文稍後會討論PBFT的其他優點。

在PBFT中,一個共識組中(即一個分片中)的所有節點按順序排列,它有一個主節點(又名領導者),其他節點被稱爲備份節點。每輪PBFT都有三個階段,如下所述:

1、預準備階段(Pre-prepare phase):在這個階段,領導者宣佈其所在分片應達成一致的下一條記錄,這是通過發送“預準備”消息完成的。
2、準備階段(Prepare phase):在收到預準備消息後,每個節點驗證記錄的正確性和有效性,並向所有其他節點組播“準備”消息。
3、提交階段(Commit phase):在收到來自絕對多數人的準備消息後,每個節點向該分片組播一個提交消息。最後,每個節點都等待來自絕對多數人的提交消息,以確保有足夠數量的節點同意領導者提出的記錄。

在三個階段結束時,所有誠實的節點要麼接受要麼拒絕領導者提出的記錄。
PBFT需要正確的領導者啓動每個階段,並在足夠多數確定後運行它。如果領導者是惡意的,它可能會拖延整個共識協議。爲了應對這一挑戰,PBFT提供了一個視圖變更協議(view change protocol)從而替換掉惡意的領導者。如果節點們在一定時間內沒有看到任何進展,他們可以獨立宣佈改變領導者的願望。如果有足夠多的節點認爲領導者有問題,那麼系統將會使用已知的調度算法(如輪流調度round-robin)選出下一個領導者來繼續運行協議。

PBFT的其他優點

PBFT除了可以利用分片小的優勢外,與Nakamoto共識協議相比它還有其他幾個優點。
1、交易最終性(Transaction finality):PBFT賦予了共識決定的最終性,這意味着如果通過PBFT所有的好的節點就下一個區塊提議達成共識,那麼所提議的區塊是最終的並且肯定可以達成一致,即在這種共識中是不需要確認的。這與Nakamoto共識相反,因爲在Nakamoto共識中達成一致只是概率性的,因此需要6次、大約相當於1小時的確認從而爲雙花攻擊提供緩衝。
2、低能耗:由於PBFT不是計算密集型的,它減少了礦工的能源消耗。實際上,Zilliqa只使用PoW來防止女巫節點攻擊、確認節點身份並進行分片,而不用於達成共識。這意味着,一旦節點確認了身份標識,就可以在多輪中連續多次運行PBFT從而確認多個區塊。現實中,每確認大約100個區塊才需要做一次PoW。這與Nakamoto共識不同,因爲在該共識中每確認一個區塊就需要做一次PoW。
3、報酬差異小(Low reward variance):不同於比特幣贏者通吃的獎勵機制,Zilliqa中參與共識協議的每個礦工都可以獲得對應的獎勵。PBFT共識協議需要通過簽名消息對一條記錄投票以進行集體決策。因此,通過使用PBFT可激勵每個參與的節點,這將減小礦工之間的報酬差異。這與Nakamoto共識相反,因爲在該共識中下一個區塊僅由領導者提出。

PBFT的挑戰
PBFT顯然是Zilliqa非常有前景的共識協議解決方案。 然而它有一個主要缺點:只有當分片規模很小時(即小於50)才高效。但是,正如我們前面的文章中所討論的,出於安全原因,Zilliqa的分片大小必須不少於600個節點。
PBFT對於大型網絡而言效率低下的主要原因是它有一個潛在的通信成本,即 分片中的每個節點都必須與所有其他節點通信,這就是通信成本二次方的原因。

在下篇文章中,我們將介紹Zilliqa如何用PBFT來解決這個挑戰。 敬請關注!
我們很高興地邀請您加入我們的社區,與技術專家、金融業者和加密數字貨幣愛好者們一同探討!您可以通過以下方式關注我們的進展:

關注我們的推特:https://twitter.com/Zilliqa
通過郵箱訂閱我們的新聞:http://zilliqa.us16.list-manage.com/subscribe?u=52acaef93d75cf69065e355ff&id=11f0b30bdd
關注我們的博客:https://blog.zilliqa.com/
Reddit: https://www.reddit.com/r/zilliqa
Slack:https://invite.zilliqa.com/
Gitter:https://gitter.im/Zilliqa/
電報羣:https://t.me/zilliqachat
QQ羣:700756926
公衆號:ZilliqaCN

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