概述
隨著區塊鏈技術的發展和各種競爭幣的相繼湧現 , 研究者提出多種不依賴算力而能夠達成共識的機制 , 例如點點幣的權益證明 (Proof of stake, PoS) 共識和比特股發明的授權股份證明機制 (Delegated proof of stake, DPOS) 共識機制等。區塊鏈共識層即封裝了這些共識機制。例如以太坊,在一個高度自治的去中心化分散式系統中,如何使各節點達成共識是以太坊的核心內容,也是分散式系統所面臨的不可避免的問題。以太坊採用了基於工作量證明的共識機制,讓一個決策權分散的系統達成一致。各個節點通過算力競爭解決一個數學難題,並對第一個解決出來的節點進行獎勵,從而促進整個網路實現算力競爭。在以太坊中使用的工作量證明哈希函式是Ethash,該哈希算法已經被證明沒有有效的辦法進行逆向運算,只能通過嘗試求解。每一次的挖礦過程首先根據區塊頭中的難度係數計算出一個目標值,然後對區塊頭中的信息和一個隨機數進行哈希,得到的哈希值小於目標值則認為挖礦成功,該隨機數則是這次運算的解。因為哈希算法的特點,所以每次輸入即使只有一位不同也會造成哈希值差異很大,因此通過哈希算法的不可逆性使該求解過程只與計算機算力有關。該求解過程雖然會消耗大量算力,但是對解的驗證卻十分簡單,只需要進行一次哈希運算後與目標值進行比較便可校驗。而攻擊者倘若想要偽造區塊信息並添加到區塊鏈中,則需要聯合全網51%的算力來同時進行偽造,因此通過工作量證明的共識機制實現了以太坊一致性的問題。
工作量證明共識
工作量證明 (Proof of work,PoW)共識:中本聰在其比特幣奠基性論文中設計了PoW 共識機制 , 其核心思想是通過引入分散式節點的算力競爭來保證數據一致性和共識的安全性。比特幣系統中,各節點 ( 即礦工 ) 基於各自的計算機算力相互競爭來共同解決一個求解複雜但驗證容易的 SHA256 數學難題 (即挖礦), 最快解決該難題的節點將獲得區塊記賬權和系統自動生成的比特幣獎勵。該數學難題可表述為:根據當前難度值,通過搜尋求解一個合適的隨機數 (Nonce) 使得圖中區塊頭各元數據的雙 SHA256 哈希值小於或等於目標哈希值。比特幣系統通過靈活調整隨機數搜尋的難度值來控制區塊的平均生成時間為 10 分鐘左右。一般說來,PoW 共識的隨機數搜尋過程如下:
步驟1。蒐集當前時間段的全網未確認交易,並增加一個用於發行新比特幣獎勵的Coinbase 交易,形成當前區塊體的交易集合;
步驟2。計算區塊體交易集合的Merkle 根記入區塊頭,並填寫區塊頭的其他元數據,其中隨機數Nonce 置零;
步驟 3。隨機數 Nonce 加1;計算當前區塊頭的雙 SHA256 哈希值,如果小於或等於目標哈希值 ,則成功搜 索到合適的隨機數並獲得該區塊的記賬權;否則繼續步驟3直到任一節點搜尋到合適的隨機數為止;
步驟4。如果一定時間內未成功,則更新時間戳和未確認交易集合、重新計算 Merkle 根後繼續搜尋。符合要求的區塊頭哈希值通常由多個前導零構成,目標哈希值越小,區塊頭哈希值的前導零越多,成功找到合適的隨機數並“ 挖 ”出新區塊的難度越大。 據區塊鏈實時監測網站 Blockchain。info 顯示 ,截止到 2016 年2月,符合要求的區塊頭哈希值一般有 1前導零,例如第 398346 號區塊哈希值為“0000000000000000077f754f22f21629a7975cf ···”。按照機率計算,每 16 次隨機數搜尋將會有找到一個含有一個前導零的區塊哈希值,因而比特幣17 位前導零哈希值要求 16 17 次隨機數搜尋才能找到一個合適的隨機數並生成一個新的區塊。由此可見,比特幣區塊鏈系統的安全性和不可篡改性是由PoW 共識機制的強大算力所保證的,任何對於區塊數據的攻擊或篡改都必須重新計算該區塊以及其後所有區塊的SHA256 難題,並且計算速度必須使得偽造鏈長度超過主鏈,這種攻擊難度導致的成本將遠超其收益。據估計,截止到2016年1月,比特幣區塊鏈的算力已經達到800000000Gh/s, 即每秒進行8×10 18 次運算,超過全球 Top500 超級計算機的算力總和。PoW共識機制是具有重要意義的創新,其整合了比特幣系統的貨幣發行、交易支付和驗證等功能, 並通過算力競爭保障系統的安全性和去中心性;PoW 共識機制同時存在著顯著的缺陷,其強大算力造成的資源浪費 (如電力) 歷來為研究者所詬病,而且長達10 分鐘的交易確認時間使其相對不適合小額交易的商業套用。
權益證明 共識
權益證明 (Proof of stake, PoS) 共識:中本聰在2010 年提出的幣齡概念,幣齡的定義是貨幣所持有的時間段,即將貨幣的金額與所持有的時間進行數學運算後得出的結果。而PoS 機制正是基於幣齡這個概念提出的,PoS共識機制也可以保證區塊鏈去中心化可信的運行。PoS 共識機制的目的是提供一種在分散式系統中達成共識的方法。不同於工作量證明的共識機制,該機制中節點生成一個新的區塊時會提供一種證明,證明該區塊在被網路接受之前獲得過一定數量的貨幣。生成一個區塊需要輸入一定數量的貨幣,這樣可以證明該節點對貨幣的所有權。而這些貨幣將影響到生成區塊時挖礦過程的難度係數。在基於權益證明的區塊中定義了一種新的交易稱之為利息幣交易。利息幣的交易與傳統的交易不同,利息幣交易過程中會消耗交易者的幣齡從而獲取在網路中生成區塊的權利,同時也獲得對 PoS 機制下的造幣的權利。利息幣中首先要輸入一定的核心(Kernel),接下來的過程與 PoW 機制中挖礦過程類似,同樣是通過求解隨機數,使其經過哈希計算滿足目標值。但是 PoS 共識機制中,哈希計算對隨機數求解時,會降低求解難度,這樣會極大的縮小尋找隨機數的空間,從而減少能源的消耗。因此 Kernel 消耗的越多,哈希計算空間則會越小,隨機數的計算則越容易。與PoW 機制中所有節點的目標值一樣不同,PoS 機制中各節點的目標值不同,因此權益大的節點要更加容易挖礦。在校驗方面,該機制中對主鏈的判斷不再是通過難度係數判斷,而是通過對幣齡的消耗進行判斷。因為在區塊中的每筆交易都會消耗幣齡,最終區塊鏈選擇幣齡消耗最多的鏈作為主鏈。這樣的設計也降低了基於PoW 共識機制所提出的51%的算力攻擊問題,因為在 PoS 共識機制中,節點首先要控制眾多的貨幣達到足夠的幣齡後才可以偽造區塊進行攻擊,而這個過程所要消耗的成本要遠高於集中全網51%的算力的成本。同時攻擊者在攻擊主鏈時會消耗幣齡,對於攻擊者來說也是一種損失。PoS 共識機制中,挖礦的過程不僅和節點的算力有關,也和節點的權益相關。權益大的節點的挖礦過程會比權益小的節點更加容易,從而提高了挖礦效率,減少算力浪情況,PoS 機制的出現也說明人們逐漸意識到 PoW 機制所帶來的算力浪費的問題。然而PoS 機制從本質上並沒有擺脫挖礦的束縛,節點仍需要進行挖礦,因此還是會造成較大的算力浪費。
拜占庭共識機制
區塊鏈可以被看作是一個去中心化的共享資料庫,並且可以抵禦任何節點的攻擊和惡意行為。通常來說,拜占庭容錯(Byzantine Fault Tolerance,BFT)共識協定是可以容忍惡意行為的共識協定。該共識機制叫做拜占庭的原因是這種容忍惡意行為的問題和歷史中拜占庭將軍嘗試通過使者來通知其他將軍一同攻打羅馬,然而其他將軍中可能存在叛徒的場景非常相似,因此採用了拜占庭共識機制這個名字。
當一個進程停掉了,該進程只是無法繼續工作。但是拜占庭錯誤,程式錯誤可以是任意形式的。系統崩潰的處理過程很簡單,因為在這個過程中進程不會對其他進程傳送假訊息。系統只需要容忍這個錯誤並通過半數以上的進程同意,便可以達成共識,因此在這種情況下系統可以容忍一半的程式停掉。如果發生錯誤的進程是f,那么要求該系統至少有 2f+1 個進程。但是拜占庭錯誤更加複雜,假如一個系統中有 2f +1 個進程,其中個進程發生拜占庭錯誤,那么他們可以協商並傳送相同的信息給另外 f+1 個沒有錯誤的進程,在這種情況下,系統仍會發生錯誤。因此一個拜占庭系統中可以容忍錯誤進程的數量要小於不是拜占庭系統的進程數量。實際上,這個系統的限制條件是 f< 1/3N,其中N是系統中所有的進程數。該機制便是拜占庭機制。
在 1999 年,Castro 和 Liskov提出了實用容錯拜占庭(Practical Byzantine Fault Tolerance,PBFT)機制,首次提出了實用的拜占庭容錯機制,該機制下 TPS可以達到 10 萬以上,因此該機制在工業系統中得到了廣泛的套用。而 Hyperledger區塊鏈項目也正是使用了該機制,但該項目仍處於開發階段,同時該項目更加注重的全球化賬本的管理工作。一方面,PBFT共識機制可以很好的解決分散式系統中的共識問題,尤其在聯盟鏈中對容錯率不太高的情況下。然而另一方面該機制會在發生拜占庭錯誤時進行大量訊息傳遞,這對於網路開銷是昂貴的。
授權股份證明共識機制
授權股份證明(Delegated Proof of Stake, DPoS)機制是在可信的加密貨幣網路中,提供事務處理和去中心化的共識協定的一種方法,目的是為了減少基於PoW 共識機制中的算力浪費和資源開銷。DPoS共識機制和董事會投票表決有些類似。在一個去中心化系統中,將決策權力分發給所有股東,而當股東投票超過 51%時,則認為該決定被通過,並且該決定不可逆。在該機制中有一個重要角色叫做代表,代表是生成區塊的節點,想要成為代表首先要支付一定的保障金來保證代表的可信性。而用戶則擁有選舉代表的權利。每個用戶可以投票選舉一個值得信任的代表,在全網中獲票最多的前 n 個代表則有生產區塊的權利,這 n 個代表持有的票數相當於該節點持有的股數。這 n 個代表將按時間表進行輪流生產區塊,生成的區塊通過的股票數超過51%則認為區塊生成成功,代表每生成一個區塊將從區塊中交易的手續費中獲得收益。而這些收益也將是代表維持線上參與的獎勵機制。DPoS 共識機制中,代表的可靠性顯得格外重要,在股東選取代表時,股東可以看到代表出塊的錯誤率,從而股東可以正確的選擇代表。另一方面,代表出塊是按時間輪流產生,因此當一個代表錯誤的產生一個區塊時,只要不得到 51%的認可,那么該區塊將會在下一個時間段由其他的代表生成。可以說 DPo S 共識機制相比與 PoS 共識機制更加有效。DPoS 共識機制是真正意義上擺脫挖礦的共識機制,然而該機制依賴於所有參與者的投票,當參與度不夠的時候,那么代表往往會集中在全網中持有大量選票的持有人手中,從而失去了去中心化的特點。