1. 區塊鏈筆記——PBFT
PBFT是實用拜占庭容錯的簡稱,是解決拜占庭將軍問題的一種方案。比起最開始的BFT演算法,PBFT額外要求網路封閉,即節點數目確定並提前互通,但將復雜度從指數級降低到多項式級,使得BFT系列演算法真正具有可行性。
與POW、POS等大家耳熟能詳的共識不同,BFT系列的共識不需要「Proof」,亦即不需要節點投入算力或其他資源來確權,因此不需要代幣激勵便可完成共識。缺點是原始的BFT效率太低,只能存在於理論而無法應用。而改進的PBFT雖然效率大大提高,卻對節點數量和狀態提出了要求,導致合格的記帳節點太少,並且也只能維持在少數,過多的節點會拖慢網路速度。因此PBFT更多是用在聯盟鏈和私鏈上。公鏈也有應用,例如NEO,便是採用了PBFT演算法。
拜占庭將軍問題的實質是在惡劣的通訊環境中,如何使各參與方達成一致意見。POW和POS等共識要求參與方投入成本,爭奪唯一的發言權。在某一段時間內只有唯一的發言人,自然只會有一個意見,從而達成共識。PBFT採取不同的思路,要求各參與方相互發送及驗證彼此的信息,最終採用多數原則達成共識。
PBFT能夠以一種低成本的方式實現節點間共識,其理念其實相當貼近我們的生活習慣。例如在老師布置作業後,同學們總要互相問問確認一下,才放心地把今天的作業記到本子上。當然實現上還有很多細節,保證各節點的平等關系。在節點數目不多的時候,節點之間實現相互通信的成本並不高,節點之間可以快速發送確認。但節點數目增長卻會帶來整體性能的下降。PBFT可以容忍的壞節點數量不多於總數的三分之一,如果節點損壞率比較固定,提高總節點數量雖然能使系統獲得更好的冗餘,卻會大大增加通訊量,造成效率下降。加上PBFT沒有激勵機制,其適合聯盟鏈和私鏈場景。作為公鏈不可避免地節點數量太少,分布過分集中,例如NEO只有七個節點。
PBFT要求壞節點數量f<=(n-1)/3,這里n是總節點數。只要f滿足這個條件,共識總是可以達成。為什麼f要滿足這個條件?簡單來說,假設網路中存在惡意節點聯盟,其控制了數量為f的節點,這些節點可以故意發布錯誤的信息。此時網路中正常節點數量為n-f個。將這n-f個節點分為兩部分,各自包含一部分節點。對於任一部分正常節點來說,只要惡意節點數f大於自身節點數,同時大於剩餘的正常節點數,這部分正常節點便會與惡意節點聯盟達成共識。此時只要惡意節點聯盟先後向兩部分正常節點發送不同的共識信息,便可造成網路分叉。因此要保證網路運行,對於每一部分正常節點來說,網路中惡意節點數量不能同時大於自身節點數和網路剩餘正常節點數。代入計算便得到f<=(n-1)/3。
2. 學習筆記|一文讀懂11個主流共識演算法
在區塊鏈的交流和學習中,「共識演算法」是被頻繁提及的詞彙。共識演算法確保了區塊鏈的可信性,常見的演算法包括但不限於工作量證明(PoW)、權益證明(PoS)、委託權益證明(DPoS)、實用拜占庭容錯演算法(PBFT)等。共識演算法實質上是通過特定的數學演算法來實現區塊鏈內節點間的協調與數據一致性。
共識演算法可以被理解為一套規則,各個節點都根據這套規則確認各自的數據。類比於現實生活中,當一群人需要達成一致意見,特別是沒有明確的領導者時,共識演算法提供了解決方案。在區塊鏈中,每個節點必須保證自己的賬本與網路中的其他節點賬本保持一致,這與傳統軟體結構中通過中心伺服器實現數據同步的方式不同。共識演算法解決了分布式網路中數據一致性的問題。
工作量證明(PoW)是最常見的共識演算法之一,其核心在於礦工需要解決一個計算難題來驗證並添加新區塊。這種機制通過消耗計算資源來確保網路安全,但存在能源消耗大、效率低、易受大規模經濟影響等問題。工作量證明系統被廣泛應用於比特幣、以太坊、萊特幣、狗狗幣等加密貨幣中。
權益證明(PoS)是一種節能的共識機制,它根據持有加密貨幣的數量和時間分配相應的權益,持有者通過「燒幣」獲取利息收益。權益證明降低了能源消耗,並通過較高的攻擊成本提高了網路安全性。然而,無利害關系(Nothing at Stake)攻擊問題仍然是其面臨的挑戰。以太坊計劃未來採用PoS機制。
延遲工作量證明(dPoW)是工作量證明的改進版本,它通過創建一個可添加至其他區塊鏈的塊,以節省交易成本,同時保持節能和安全性。這種機制被Komodo採用。
委託權益證明(DPoS)是一種授權共識機制,允許加密貨幣持有者投票選舉一組驗證者(超級節點),這些驗證者負責創建新區塊。DPoS旨在提高效率和去中心化程度,同時減少能源消耗。EOS、BitShares、Steemit等項目採用了這種共識機制。
實用拜占庭容錯演算法(PBFT)是一種高效且可擴展的共識演算法,適用於私有和許可網路。它通過少數節點達成一致來確保系統的安全性與高速度。
權威證明(PoA)基於信任驗證者的共識機制,允許持有特定身份證明的節點成為驗證者。這種機制通常用於私有和許可區塊鏈。
所用時間證明(PoET)機制通過隨機選擇等待時間來決定誰有資格創建新區塊,適用於許可區塊鏈網路,旨在提供公平的領導者選舉。
權益流通證明(PoSV)結合了工作量證明和權益證明,旨在提高加密貨幣網路的安全性和效率。
恆星共識(Stellar Consensus)基於聯邦拜占庭共識演算法,提供了一種高效且去中心化的共識機制,適用於Stellar區塊鏈。
活動證明(PoActivity)結合了工作量證明和權益證明,旨在通過驗證者的活動來選擇創建新區塊的節點。
共識演算法的選擇取決於應用場景的需求。工作量證明和權益證明是最早被廣泛應用的演算法,而委託權益證明、實用拜占庭容錯演算法、權威證明等則旨在解決特定問題,如提高效率、降低能源消耗或實現去中心化。選擇共識演算法時,應考慮安全性、效率、能源消耗、去中心化程度以及與具體應用場景的匹配度。
3. 拜占庭容錯共識演算法介紹
在區塊鏈共識演算法中,拜占庭容錯(BFT)演算法是一種獨特且重要的解決方案,它源自拜占庭將軍問題。這個問題的核心在於,如何在存在叛徒的情況下,確保忠誠節點能達成一致的決策,類似於分布式系統中的正常伺服器和故障或惡意節點。BFT有三種主要版本,包括實用拜占庭容錯(PBFT)、聯邦拜占庭協議(FBA)和授權拜占庭容錯(dBFT)。
PBFT是首個實際解決拜占庭問題的協議,具有高速和可擴展性,但主要適用於私有和許可網路,如Hyperledger Fabric和Ripple。PBFT通過預設的將軍數量(如33%的容錯率)保證高效運行,但其中心化的特性限制了它在公開網路的應用。Ripple的共識演算法利用了PBFT,允許快速確認交易,但僅限於受信任的節點網路。
FBA,如在Stellar中採用的,強調的是吞吐量、低交易開銷和網路擴展性,用戶可以選擇信任的驗證者。與PBFT相比,FBA的去中心化程度更高,允許自由節點加入並投票,但可能犧牲部分性能。
dBFT在Neo中被應用,具有快速和可擴展性,通過代理投票支持大規模參與,但存在多個根鏈的風險。這種機制在交易速度和吞吐量上表現出色,但對記賬節點的依賴度高,超過三分之一的記賬節點故障可能導致服務中斷或區塊鏈分叉。
總結來說,BFT共識演算法為分布式網路提供了在不確定性和安全性環境中達成共識的有效途徑,但每個版本都有其適用場景和權衡。了解這些區別有助於選擇最合適的共識機制來構建安全的區塊鏈網路。