區塊鏈的共識算法,你學會了嗎?
區塊鏈是一種去中心化、不可篡改、可追溯的分布式數據庫系統,可確保數據安全,并防止未經授權的訪問。區塊鏈技術允許用戶在分布式賬本中添加、查看和驗證交易,并使用共識機制來確保所有交易準確無誤。
在區塊鏈中,共識機制用于保證網絡上的所有節點都同意網絡的當前狀態和交易的真實性,這對于維護區塊鏈的安全性和完整性至關重要,圖1展示了區塊鏈共識過程的基礎模型。不同的區塊鏈平臺使用不同的算法,例如POW、POS或POB等,以在網絡上的節點之間達成共識。一個好的共識算法可以保持區塊鏈網絡的活躍,為整個網絡提供源源不斷的有效算力,而設計不佳的算法則可能導致整個網絡在受到攻擊時很容易癱瘓。共識算法可以分為:非拜占庭容錯算法與拜占庭容錯算法,基于DAG和混合算法,在本次報告中主要介紹拜占庭容錯算法。
圖1 區塊鏈共識過程的基礎模型
拜占庭容錯算法(Byzantine Fault Tolerance,BFT)是一類分布式系統中用于處理節點故障和惡意行為的算法。該算法的目標是確保在存在節點錯誤或惡意行為的情況下,系統仍能夠達成一致的共識。BFT的概念起源于拜占庭將軍問題,其機制的目的是通過一種集體決策過程來防范系統故障,該過程考慮了正確節點和故障節點的輸入,旨在最小化故障節點的影響。本報告主要介紹了pBFT、POW、POS、POB、POC、POA、DPOS共識算法。
1、Practical Byzantine fault?tolerant (pBFT)
實用拜占庭容錯算法 (pBFT) 是 Barbara Liskov 和 Miguel Castro 在 1999年提出的一種共識算法[1],解決了原始拜占庭容錯算法效率不高的問題,將算法復雜度由指數級降低到多項式級,使得拜占庭容錯算法在實際系統應用中變得可行。
pBFT可以在保證活性和安全性的前提下提供(n-1)/3的容錯性, 其中 n 為節點總數,即只要惡意節點的最大數量小于或等于系統中所有節點的三分之一,pBFT 系統就可以正常運行。在啟用 pBFT 的系統中,節點按順序排序,其中一個節點為主節點,其他節點為輔節點。主節點在每次視圖期間都會發生更改,并且如果經過了預定義的時間而沒有主節點向輔節點廣播請求,則可以通過視圖更改協議替換主節點。
pBFT共識分為五個階段,如圖2所示,其中C為發送請求端,0123為服務端,3為宕機的服務端,具體步驟如下:
請求階段(request): 請求端C發送請求到主節點,這里主節點是0;
預準備階段(pre-prepare):服務端0收到C的請求后進行廣播,擴散至服務端123;
準備階段(prepare): 服務端123收到后記錄并再次廣播,1->023,2->013,3因為宕機無法廣播;
提交階段(commit): 服務端0123節點在Prepare階段,若收到超過一定數量的相同請求,則進入Commit階段,廣播Commit請求;
回復(reply): 0123節點在Commit階段,若收到超過一定數量的相同請求,則對C進行反饋。
圖2 PBFT 算法流程
pBFT首次提出在異步網絡環境下使用狀態機副本復制協議,該算法可以工作在異步環境中,并且通過優化在早期算法的基礎上把響應性能提升了一個數量級以上。但該算法僅僅適用于permissioned systems 且通信復雜度使得系統性能隨著網絡規模的增加而下降。
2、Proof of work (PoW)
圖片
圖3 POW算法流程
PoW的優點是完全去中心化 ,節點自由進出;只要破壞者算力不超過網絡總算力的50%,交易狀態就能達成一致。PoW 的缺點是挖礦造成大量資源浪費;礦池算力高度集中;達成共識周期較長(每秒最多7筆交易);還存在自私挖礦攻擊的風險。
3、Proof of stake (PoS)
PoS 共識算法因其節能特性而被認為是 PoW 有前途的替代方案。PoS 由系統中具有最高權益而非最高算力的節點獲得記賬權[3]。相對于PoW中 Nonce 字段的大搜索空間而言, PoS 將搜索空間限制在一個計算量可接受的范圍; 除此外,PoS 中還引入了“幣齡”作為權益,即:
圖片
競爭出塊記賬前,擁有權益的節點將自己的權益放入PoS機制中,同時身份變為驗證者,PoS機制根據驗證者下注的多少,選出一個記賬者進行出塊記賬。選擇算法綜合使用候選者的股權(持有的加密貨幣數量)和其他因素(如幣齡和隨機化),以確保網絡上所有節點之間的公平性。其中一個因素是幣齡,它是候選節點成為驗證者的時間。節點擔任驗證者的時間越長,被選為記賬者的機會就越大。另一個因素是隨機塊選擇,其中驗證器是根據最低哈希值和最高權益的組合來選擇的。具有這些因素的最佳加權組合的節點成為新的記賬者。如果選出的記賬者在一段時間內沒有記賬,PoS機制重新選擇記賬節點,當出塊完成,開始進入下一輪的記賬。
PoS縮短了共識達成的時間,降低了PoW機制的資源浪費。但是破壞者對網絡攻擊成本低,存在“無利害關系“(Nothing at stake)”攻擊問題,且共識受少數富裕賬戶支配,缺乏公正性。
圖4 POS算法流程
4、Proof of burn (PoB)
在 "燒毀證明"(PoB)中,驗證者通過 "燒毀 "貨幣或將其發送到一個永遠無法取回的地址來表示自己愿意為了長期投資而承受短期的損失,以及獲得在某個隨機選擇程序系統上進行挖礦的終生特權[4]。這一過程用于確定哪些驗證者能夠挖掘系統中的下一個區塊。驗證者可以使用本地社區的貨幣或比特幣等替代鏈的貨幣,以增加被選中進行區塊挖掘的機會。礦工燒掉的貨幣越多,被系統選中開采下一個區塊的機會就越大。隨著新區塊的挖出,被燒毀幣的能量會略有減少,從而產生一個通縮過程,即貨幣的總量會隨著時間的推移而減少,從而有可能增加其價值。相比之下,數量隨時間增加的加密貨幣往往會貶值。
PoB更環保,因為它并不強調硬件的功率或數量,貨幣銷毀會永久減少被銷毀的加密貨幣的供應,從而導致稀缺性和資產價值增加。雖然在硬件方面,PoB不需要像Pow那樣多的資源,但它會破壞通過計算創建的硬幣,這也是一種浪費。PoB中,由于銷毀是最終的結果,沒有任何保證可以收回燒毀的貨幣的全部價值,這增加了用戶的風險。
5、Proof of capacity (PoC)
容量證明(PoC)是一種新的挖礦方法,目前在加密貨幣 Burstcoin 中使用[5]。空間容量證明利用的是計算機的硬盤空間大小而不是電腦的計算能力。硬盤的容量越大,可以儲存在硬盤里的方案值就越多,礦工就越有機會匹配到其中所需要的哈希值,從而有更多的機會獲得獎勵。
PoC 通過在計算機上提供更多解決方案或“圖”來增加礦工贏得挖礦競爭的機會。PoC由兩個主要部分組成:繪圖和挖礦
- 繪圖:礦工使用 Shabal 哈希函數創建一系列預先計算的哈希值并將其存儲在硬盤上。這個繪圖過程是一次性的,且根據硬盤的大小,繪制周期也將不同,一般為幾天甚至數周。哈希值被分組為“scoops”,每個scoop由兩個相鄰的哈希值組成。
- 挖礦:挖礦需要計算scoop數,并將其應用于存儲在硬盤驅動器上的每個nonce值,以確定一個 "截止日期 "值。如果在該時間段內沒有其他人創建新區塊,礦工就會選擇截止日期最短的 nonce 并使用它來創建新區塊。如果礦工在截止日期前創建了區塊,就會獲得區塊獎勵。
POC挖礦減少了大量的計算,同時避免了AISC化的礦機出現,大大降低了挖礦的門檻和礦工的成本。
6、Proof of activity (PoA)
活動證明(PoA)結合了PoW工作量證明與PoS權益證明的特點并進行了相應擴展[6],PoA共識具有更為復雜的記賬節點選取,同時有更為公平的獎勵機制。通過考慮礦工的利益,網絡可以優先考慮那些對網絡建設有長遠利益的礦工,而不僅僅是那些擁有最強大計算資源的礦工。其具體步驟如下:
- 每個礦工先利用自身算力通過工作量證明機制后得出nonce并生成一個空區塊頭,這個區塊頭除了沒有交易信息數據外其他數據與正常區塊一致。
- 最先生成空區塊的節點廣播全網節點,全網節點接收到消息后,將此區塊的hash值與上一區塊的hash值進行拼接,然后加上n個固定后綴值進行再hash,最后得出n個值作為輸入,進入follow-the-satoshi程序,然后可輸出n個隨機權益持有者。擁有大量加密貨幣的礦工被選為簽名者的機會更高。
- 前n-1個隨機權益持有者對空區塊進行簽名,第n個隨機權益持有者即為獲取到記賬權的節點,他將在空區塊的基礎上添加交易數據與簽名。
- 第n個隨機權益持有者將打包好的區塊廣播全網,全網節點接收到區塊后進行驗證,驗證成功后上鏈。
- 產生空區塊的礦工與第n個隨機權益持有者以及前n-1個已簽名的隨機權益持有者共享交易費獎勵。
PoA 可以有效地平衡區塊鏈的安全性和效率,但與純 PoW 或 PoS 系統相比,PoA 的實施可能更復雜,安全性也可能更低。PoA因部分使用PoW和PoS而被詬病,但也防范了51%攻擊的風險。
7、Delegate proof of stake (DPoS)
圖片
大幅縮少參與驗證和記賬節點的數量,能達到秒級的共識驗證;另外, 區塊的產生不需要消耗算力, 相對于 PoS 更加節省能耗。但不合適完全去中心化的場景。
區塊鏈技術的出現代表了數字貨幣經濟時代的到來。但是區塊鏈的共識機制仍然還面臨一些挑戰,區塊鏈的共識機制還有可進步之處。只有做到各方面的平衡,通過之后的發展以及不斷的更迭,才能設計出更加適合實際應用場景的共識機制。
參考文獻
[1] Miguel Castro, Barbara Liskov, et al. Practical byzantine fault tolerance. In OsDI, volume 99, pages 173–186, 1999.
[2] Shixiong Jin, X Zhang, J Ge, HB Shi, Y Sun, M Li, YM Lin, and ZJ Yao. Overview of blockchain consensus algorithm. Journal of Information Security, 6(2):85–100, 2021.
[3] Chaya Ganesh, Claudio Orlandi, and Daniel Tschudi. Proof-of-stake protocols for privacy-aware blockchains. In Advances in Cryptology–EUROCRYPT 2019: 38th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Darmstadt, Germany, May 19–23, 2019, Proceedings, Part I 38, pages 690–719. Springer, 2019.
[4] Kostis Karantias, Aggelos Kiayias, and Dionysis Zindros. Proof-of-burn. In Financial Cryptography and Data Security: 24th International Conference, FC 2020, Kota Kinabalu, Malaysia, February 10–14, 2020 Revised Selected Papers 24, pages 523–540. Springer, 2020.
[5] Shubhani Aggarwal and Neeraj Kumar. Cryptographic consensus mechanisms. In Advances in Computers, volume 121, pages 211–226. Elsevier, 2021.
[6] Manpreet Kaur, Mohammad Zubair Khan, Shikha Gupta, Abdulfattah Noorwali, Chinmay Chakraborty, and Subhendu Kumar Pani. Mbcp: Performance analysis of large scale mainstream blockchain consensus protocols. IEEE Access, 9:80931–80944, 2021.
[7] Fan Yang, Wei Zhou, QingQing Wu, Rui Long, Neal N Xiong, and Meiqi Zhou. Delegated proof of stake with downgrade: A secure and efficient blockchain consensus algorithm with downgrade mechanism. IEEE Access, 7:118541–118555, 2019.