共識算法是所有區塊鏈/DAG的基礎,它們構成了區塊鏈/DAG平臺中的最重要部分。如果沒有共識算法,我們得到只是一個不可寫的啞(dummy)數據庫。
我將在本文中盡可能列出所有主要的共識算法,評估各自的優劣之處。如果讀者發現有所遺漏,或是存在錯誤,希望能通過評論指出。此外,我個人也在逐步深入研究共識算法及其對經濟的影響,為此本文也將做定期的更新。
下面列出共識算法。
1. 工作量證明(PoW,Proof of Work)
優點: 自2009年以來得到了廣泛測試,目前依然得到廣泛的使用。
不足:速度慢。耗能巨大,對環境不好。易受“規模經濟”(economies of scale)的影響。
使用者:Bitcoin、Ethereum、Litecoin、Dogecoin等。
類型:有競爭共識(Competitive consensus)。
解釋:PoW是是首個共識算法。它是由中本聰在他的論文中提出的,用于建立分布式無信任共識并識別“雙重支付”(double spend)問題。PoW并非一個新理念,但是中本聰將Pow與加密簽名、Merkle鏈和P2P網絡等已有理念結合,形成一種可用的分布式共識系統。加密貨幣是這樣系統的首個基礎和應用,因而獨具創新性。
在PoW的工作方式中,區塊鏈參與者(稱為“礦工”)要在區塊鏈中添加一塊交易,必須解決某種“復雜但是無用”的計算問題。
本質上,這種做法可確保礦工花費了一些金錢或資源(礦機)完成工作,這表示了它們將不會損害區塊鏈系統,因為對系統的損害也將會導致投資的損失,進而損害他們自身。
為保證運行區塊時間不變,問題的復雜性會發生變化。有時,會存在多名礦工同時解決了問題。在這種情況下,每位礦工從中選取一個區塊鏈,并以選取最長鏈者為獲勝者。因此,如果假定大多數礦工工作在同一個鏈上,那么成長最快的鏈將成為最長和最值得信任的鏈。這樣,只要由礦工提交的工作有超過一半是值得信任的,那么Bitcoin就是安全的。
2. 權益證明(PoS,Proof of Stake)
優點:節能、攻擊者代價更大、不易受“規模經濟”的影響。
不足:“無利害關系“(Nothing at stake)”攻擊問題。
使用者:Ethereum(即將推出)、Peercoin、Nxt。
類型:有競爭共識。
解釋:PoS是作為Pow的替代技術提出的,意在解決PoW的一些內在問題。PoS沒有使用挖礦方法,而是用戶必須具有系統中的一些權益(幣)。因此,如果用戶擁有10%的權益(代幣),那么該用戶挖掘下一個區塊的可能性就是10%。
挖礦為解決計算上的挑戰,需要運行各種加密計算,這需要耗費大量的算力。算力將轉變為PoW所需的大量電能。據估計在2015年時,一個Bitcoin交易所需的電力,可達1.57個美國家庭一日所需的電力。PoS的提出是為了節約電力耗費。
在PoS中,一個美元就是一個美元。例如,假定有一萬名每位每分鐘花費1美元(一年8760萬美元)的礦工,要比一位具有每分鐘花費一萬美元挖掘礦池能力的礦工擁有更少的哈希能力(Hashing Power)。但是在PoS中不支持一次用光所有算力,一美元就是一美元。因此PoS不易受“規模經濟”的影響。
此外,攻擊PoS系統也要比攻擊PoW系統的代價更大。引用Vlad Zamfir的說法:
在PoS中,重復51%攻擊的代價,可類比為每額外運行一輪,都會“燒毀你的ASIC農場”。
這意味著,每次攻擊PoS系統,攻擊者都會失去自己的權益。而在PoW中,攻擊者不會丟失挖礦設備,或是代幣。對PoW系統的攻擊只會使攻擊本身難以執行。
但是PoS會在“無厲害關系”上出問題。這種對多個區塊歷史(forks)投票的方式不會讓區塊生成器有任何損失,進而阻礙了達成共識。
在 PoS 中,你可以在區塊鏈的雙方押注資產(“無厲害關系”問題)。而在 PoW 中,你不能從鏈的兩個方向同時挖礦,因為這難以實現。
不同于 PoW 系統(用戶為擴展鏈必須做大量的計算),PoS 在多個鏈上工作的代價很小。有一些項目試圖通過多種方式解決這個問題(參見“擴展閱讀”)。例如,一個解決方案就是上文所介紹的,對不好的驗證者做懲罰。
3. 延遲工作量證明(dPoW,Delayed Proof-of-Work)、
優點:
節能、安全性增加、可以通過非直接提供 Bitcoin(或是其它任何安全鏈),添加價值到其它區塊鏈,無需付出 Bitcoin(或是其它任何安全鏈)交易的代價。
不足:
只有使用 PoW 或 PoS 的區塊鏈,才能采用這種共識算法。
在“公證員激活”(Notaries Active)模式下,必須校準不同節點(公證員或正常節點)的哈希率,否則哈希率間的差異會爆炸(下文將給出詳細解釋)。
采用者:Komodo
類型:協同型共識(Collaborative consensus)
解釋:dPoW 是一種混合共識方法,允許一個區塊鏈利用第二個區塊鏈的哈希算力(Hashing Power)所提供的安全。該機制是通過一組公證員節點(Notary Node)實現的。公證員節點實現將第一個區塊鏈的數據添加到第二個區塊鏈中。進而,第二個區塊鏈請求在兩個區塊鏈間達成妥協,弱化第一個區塊鏈的安全。Komodo是首個使用該共識方法的區塊鏈,它就是附加于 Bitcoin 區塊鏈之上的。
使用 dPoW 的區塊鏈也可以使用 PoW 或 PoS 共識方法工作,并可以附加在任何采用 PoW 的區塊鏈上。但對于由 dPoW 提供安全的區塊鏈,當前 Bitcoin 給出了最高安全層級的哈希率。下圖展示了主區塊鏈的單個記錄以及其所附著的 PoW 區塊鏈。
dPoW 系統中有兩種類型的節點:公證人節點和正常節點。64 個公證人節點是由 dPoW 區塊鏈的權益持有者(stakeholder)選舉產生的,它們可從 dPoW 區塊鏈向所附加的 PoW 區塊鏈添加經公證確認的塊。一旦添加了一個塊,該塊的哈希值將被添加到由 33 個公證人節點簽署的 Bitcoin 交易中,并創建一個哈希到 Bitcoin 區塊鏈的 dPow 塊記錄。該記錄已被網絡中的大多數公證人節點公證。
為避免公證人節點間在挖礦上產生戰爭,進而降低網絡的效率,Komodo 設計了一種采用輪詢機制的挖礦方法。該方法具有兩種運行模式。在“無公證人”(No Notary)模式下,支持所有網絡節點參與挖礦,這類似于傳統 PoW 共識機制。而在“公證人激活”(Notaries Active)模式下,網絡公證人使用一種顯著降低的網絡難度率挖礦。“公證人激活”模式下,允許每位公證人使用其當前的難度挖掘一個區塊,而其它公證人節點必須采用 10 倍難度挖礦,所有正常節點使用公證人節點難度的 100 倍挖礦。
但這會導致一些問題。我在與 Komodo 創始人的一次談話中提及,這將導致公證人礦工和正常礦工間的哈希率存在很高的差異:
圖 本文作者與 Komodo 創始人間就不一致性問題進行交流的截圖
dPoW 系統在設計上支持區塊鏈在沒有公證人節點的情況下繼續運行。在這種情況下,dPoW 區塊鏈可以基于初始的共識方法繼續運行,但將不再具有所附著區塊鏈增添的安全。
所有使用 dPoW 的區塊鏈可增加安全,同時降低能耗。例如,Komodo 使用 Equihash 哈希算法防止使用 ASIC 挖礦。其公證人節點依賴于一種輪詢挖礦方法,獎勵機制考慮了降低節點間競爭的可能性。這些節點將會引發過度耗能或算力。
此外通過非直接提供 Bitcoin 安全,Komodo 這類 dPoW 區塊鏈可以向其它區塊鏈添加價值,無需付出任何 Bitcoin 交易的代價。Komodo 此后附著到 Bitcoin,而第三個使用 dPoW 的區塊鏈可以將自身附著到 Komodo。使用這種方式,dPoW 區塊鏈不必直接附著到 Bitcoin 區塊鏈,就從 Bitcoin 的高哈希率中受益。
最后一點,公證人節點和正常節點分離的功能,確保了初始共識機制在公證人節點失敗時繼續運行。這種相互獨立性建立了一種獎勵機制,使得其它網絡無需依賴于 Bitcoin 網絡的直接功能,即可支持 Bitcoin 網絡的繼續維護。
4. 授權 PoS(DPoS,Delegated Proof-of-Stake)
優點:
節能、快速、高流量博客網站Steemit就使用了它。EOS 的塊時間是 0.5 秒。
不足:
略為中心化、擁有高權益的參與者可投票使自己成為一名驗證者。這是近期已在 EOS 中出現的問題。
采用者:BitShares、Steemit、EOS、Lisk、Ark。
類型:協同型共識
解釋:在 DPoS 系統中,權益持有者可以選舉領導者(或稱為見證人,Witness)。經權益持有者授權,這些領導者可進行投票。該機制使得 DPoS 要快于正常的 PoS。
例如,EOS 中選舉出 21 位見證人,并且有一堆節點(潛在的見證人)作為候選者。一旦見證人節點死亡或是做出了惡意行為,新節點就會立刻替代見證人節點。見證人會因為生成區塊而獲得一筆支付費用。該費用是由權益持有者設立的 。
通常,所有節點采用輪詢方式,一次生成一個區塊。該機制防止一個節點發布連續的塊,進而執行“雙重支付”攻擊。如果一個見證人在分配給他的時間槽中未生成區塊,那么該時間槽就被跳過,并由下一位見證人生成下一個區塊。如果見證人持續丟失他的區塊,或是發布了錯誤的交易,那么權益持有者將投票決定其退出,用更好的見證人替換他。
在 DPoS 中,礦工可以合作生成塊,而不是像在 PoW 和 PoS 中那樣競爭生成。通過區塊生成的部分中心化,DPoS 的運行可以比其它共識算法呈數量級快。
5. 權威證明(PoA,Proof-of-Authority)
優點:節能、快速。
不足:略為中心化。雖然可用于公有區塊鏈,但是通常用于私有區塊鏈和許可區塊鏈。
使用者:POA.Network、Ethereum Kovan testnet、VeChain。
類型:協同型共識。
解釋:基于 PoA 的網絡、事務和區塊,是由一些經認可的賬戶認證的,這些被認可的賬戶稱為“驗證者”(Validator)。驗證者運行的軟件,支持驗證者將交易(transaction)置于區塊中。該過程是自動的,無需驗證者持續監控計算機,但需要維護計算機(權威節點)不妥協(uncompromised)。
驗證者必須滿足以下三個條件:
1. 其身份必須在鏈上得到正式驗證,信息可在公有可用域中交叉驗證。
2. 其資格必須難以獲得,這樣所得到的驗證塊的權利才彌足珍貴(例如,潛在的驗證者需要獲得公證書)。
3. 建立權威的檢查和程序必須完全統一。
使用 PoA,每個個體都具有變成驗證者的權利,因此存在一旦獲取就保持驗證者位置的動機。通過對身份附加一個聲譽,可以鼓勵驗證者去維護交易的過程。因為驗證者并不希望讓自己獲得負面聲譽,這會使其失去來之不易的驗證者地位。
6. 權重證明(PoWeight,Proof-of-Weight)
優點:節能、高度可定制和可擴展
不足:可能難以實現激勵、
采用者:Algorand。
類型:有競爭共識。
解釋:權重證明(PoWeight)是一類很寬泛的共識算法,它基于Algorand共識模型。其基本理念是在 PoS 中,用戶所擁有的網絡中令牌的百分比,表示了該用戶“發現”下一個區塊的概率。PoWeight 系統中還使用了其它一些相對加權值,實現包括聲望證明(PoR,Proof of Reputation)和空間證明(Proof of Space)。
7. 聲譽證明(PoR,Proof of Reputation)
優點:非常適用于私有區塊鏈和許可區塊鏈。
不足:只能用于私有區塊鏈和許可區塊鏈。
采用者:GoChain。
類型:協同型共識。
解釋:PoR 類似于 PoA。GoChain 文檔中給出了如下描述:
PoR 共識模型依賴參與者在保持網絡安全中的聲譽。參與者(區塊簽名者)必須具有足夠重要的聲譽。一旦他們嘗試欺騙系統,那么他們將要面對嚴重的財政上的和自己名聲上的后果。這是一個相對的概念,如果他們被抓到試圖欺騙,那么幾乎所有的業務將會受到嚴重的影響。規模越大的企業,通常將會失去更多。這樣,相比使用更少的企業(即更小規模的商業),規模更大的企業更易于被選定。
一旦一個企業證明了自己的聲譽,并通過了驗證,那么他們必須經投票參與到權威節點網絡中。這時,PoR 的操作與 PoA 網絡一樣,即只有權威節點可以簽名并驗證區塊。
8. 所用時間證明(PoET,Proof of Elapsed Time)
優點:
參與代價低。更多人可輕易加入,進而達到去中心化。
對于所有參與者而言,更易于驗證領導者是通過合法選舉產生的。
控制領導者選舉過程的代價,是與從中獲得的價值成正比的。
不足:
盡管 PoET 的代價低,但是必須要使用特定的硬件。因此不會被大規模采納。
不適用于公有區塊鏈。
采用者:HyperLedger Sawtooth
類型:有競爭共識
解釋:PoET 共識機制算法通常用于許可區塊鏈網絡,它可決定網絡中獲得區塊者的挖礦權利。許可區塊鏈網絡需要任何預期參與者在加入前驗證身份。根據公平彩票系統的原則,每個節點具有同等的可能成為勝出者。PoET 機制賦予大量可能的網絡參與者以平等勝出的機會。
PoET 的工作機制如下:網絡中的每位參與節點都必須等待一個隨機選取的時期,首個完成設定等待時間的節點將獲得一個新區塊。區塊鏈網絡中的每個節點會生成一個隨機的等待時間,并休眠一個設定的時間。最先醒來的節點,即具有最短等待時間的節點,喚醒并向區塊鏈提交一個新區塊,然后廣播必要的信息到整個對等網絡中。同一過程將會重復,以發現下一個區塊。
在 PoET 網絡共識機制中,需要確保兩個重要因素。第一,參與節點在本質上會自然地選取一個隨機的時間,而非某一個參與者為勝出而刻意選取了較短的時間。第二,勝出者的確完成了等待時間。
PoET 理念是由著名的芯片制造巨頭 Intel 于 2016 年早期提出的。Intel 為解決“隨機領導者選舉”的計算問題,實現了一個可用的高科技工具。
這種內在機制允許應用在受保護的環境中執行受信任的代碼,它確保了上面提出的兩個要求得到滿足,即隨機選擇所有參與節點的等待時間,以及勝出參與者真正完成了等待時間。
這種在安全環境中運行可信代碼的機制也同時考慮到了其它一些網絡的需求。它確保了受信代碼的確運行在安全環境中,并不可被其它外部參與者更改。它也確保了結果可被外部參與者和實體驗證,進而提高了網絡共識的透明度。
PoET 通過控制代價實現了共識過程,該代價依然是與從過程中獲得的價值成正比。這是保證加密貨幣經濟持續繁榮的一個關鍵需求。
9. 容量證明(PoC,Proof of Capacity),也稱為空間證明(PoSpace,Proof of Space)
優點:
它類似于 PoW,只是使用空間替代了計算。因此更加環境友好。
可用于惡意軟件檢測。通過確定處理器的 L1 緩存是否為空(例如,具有足夠空間在沒有緩存未命中的情況下計算 PoSpace 過程),或是包含一個拒絕被逐出(evicted)的例程。
可用于反垃圾郵件措施,以及防范拒絕服務(DoS)攻擊。
不足:激勵機制可能存在問題。
使用者: Burstcoin、Chia、SpaceMint。
類型:協同型共識。
解釋:PoSpace,也稱為 PoC,通過分配一定數量的內存或磁盤空間用于解決服務提供者所提供挑戰的方式,顯示了某個人對某個服務(例如發送郵件)具有合法的興趣。該理念是由 Dziembowski 等在 2015 年形式化定義的。雖然 Ateniese 等人的論文名稱也是“Proof-of-space”,但它事實上一種采用 MHF(Memory Hard Function,一種計算代價取決內存的哈希算法)的 PoW 協議。
PoSpace 非常類似于 PoW,只是使用存儲替代了 Pow 中的計算。PoSpace 與 MHF 和可回收性證明(PoR,Proof of Retrievability)有關,但也在很大程度上存在著差異。
PoSpace 是由證明者 (Prover) 發送給驗證者 (Verifier) 的一小塊數據,該數據確認了證明者已經保留了一定量的空間。出于實用性上的考慮,驗證過程需要盡量高效,即消耗盡可能少的空間和時間。出于公平性上的考慮,如果驗證者沒有保留所聲明數量的空間,那么它應該難以通過驗證。PoSpace 的一種實現方式是通過使用一個難以實現 Pebbling 的圖。驗證者請求證明者構建對一個“非 Pebbling 圖”標記。證明者提交標記,進而驗證者請求證明者在提交中開放多個隨機位置。
由于存儲的通用本質,以及存儲所需的更低耗能,PoSpace 被認為是一種更公平、更綠色的替換方法。
10. 歷史證明(PoHistory,Proof of History)
采用者:Solana
解釋:其基本理念是不相信交易中的時間戳,而是證明交易在某個事件之前或之后的某個時刻發生。
如果我們對某期《紐約時報》的封面拍了張照片,那么我們就創建了一個證明,即我們的拍照時間是在該報紙發行之后,或許也可能是我們有某種途徑影響了紐約時報的正常發行。我們可以使用 PoHistory 創建一個歷史記錄,證明一個事件是發生在特定時間之后的。
PoHistory 是一種高頻可驗證延遲函數(VDF,Verifiable Delay Function)。VDF 求值需要完成特定數量的順序步驟,然后生成一個唯一的輸出。該輸出可被高效地和公開地驗證。
VDF 的一個特定實現使用了持續運行于其上的順序抗預映射哈希(Pre-image Resistant Hash),其中前一次循環生成的輸出將用于下一次循環的輸入。計數和當前輸出形成周期性記錄。
如果使用了 SHA256 哈希函數,那么不使用 2128核的暴力攻擊,該過程是不可能并行化的。
因此我們可以確認,每個計數器在生成過程中都的確經歷了一定的時間。進而,每個計數器記錄的順序與實時情況是一致的。
11. 權益流通證明(PoSV,Proof of Stake Velocity)
采用者:Reddcoin
解釋:PoSV 是作為 PoW 和 PoS 的一種替代方法而提出的,其目的是提高 P2P 網絡的安全性,進而用于確認 Reddcoin 交易。Reddcoin 是一種加密貨幣,專為加速數字化時代的社交交互而提出的。PoSV 在設計上鼓勵所有者(權益)和活動(流通),直接對應于 Reddcoin 作為真實貨幣的兩個主要功能,即存儲價值和交換中介。Reddcoin 也可在異構社交場景中作為計量單位使用。
12. 重要性證明(PoImportance,Proof of Importance)
優點:在權益計算方面要優于 PoS。
使用者:NEM
解釋:NEM 共識網絡不僅依賴于代幣的數量,而且依賴于生成系統行動得到回報的可能性。區塊收益機率是各種因素之一,此外還包括不好的名聲(受控于不同的框架設計目的)、差額,以及從該處做出和得到的交易數量。它也被稱為“重要性計算”(Importance Calculation),因為它可為“有用的”系統成員提供更全面的圖像。
一名用戶要具有資格執行重要性計算,其賬戶余額至少需要為 10000 枚 XEM。考慮到只有不到 90 億枚 XEM 在流通,實現這一目標并非過于昂貴。在未來 10000 枚 XEM 的閾值有可能會發生變化,但就目前而言,它仍然沒有變化。重要性計算是使用特定算法完成的,而不僅僅考慮用戶份額的概率和規模。
需要指出的是,NEM 的 PoImportance 對任何操控都具有抵制力。該共識的底層機制可緩解女巫攻擊(Sybil Attack)和循環攻擊問題。謹記,“PoImportance 并非 PoS”,盡管兩者很容易被同等看待。
13. 燒毀證明(PoBurn,Proof of Burn)
采用者:Slimcoin、TGCoin(第三代代幣)。
解釋:PoBurn 并非在昂貴的計算設備上一擲千金,而通過發送代幣到一個不可檢索地址實現“燒錢”(Burn)。將代幣發送到一個并不存在的地址,用戶將根據某個隨機選擇過程,獲得整個生命時間內對系統挖礦的特權。
PoBurn 有多種實現方式,礦工可以燒毀原生的貨幣,或者燒毀一些其它區塊鏈的貨幣,例如比特幣等。燒毀的代幣越多,用戶就越有機會被選中去挖掘下一個區塊。
隨時間的流逝,用戶在系統的權益會得到弱化。因此,最終用戶為增加在這個博彩中被選中的機會,會考慮燒掉更多的代幣(這可類比于比特幣的挖礦過程,用戶必須不斷投資更現代的計算設備以維持哈希能力)。
盡管 PoBurn 是一種有意思的 PoW 替代者,但是該協議依然會毫無必要地浪費資源。另一個批評是,挖礦能力只會偏向于那些愿意燒掉更多錢的人。
14. 身份證明(PoI,Proof of Identity)
解釋:PoI 是一塊表示了加密事實的數據。它支持用戶指定一個私鑰,并對應到一個經認證的身份,加密將附著到一個指定的交易。來自于某些組中的每個個體都可以創建 PoF(因為它只是一塊數據),并將該數據展示給其它任何處理節點的人。
15. 活動證明(PoActivity,Proof Of Activity)
使用者:Decred
解釋:為避免出現惡性通貨膨脹(當大量貨幣充斥系統時就會發生),比特幣將只生成兩千一百萬枚。這意味著,在某些時候,比特幣區塊獎勵補貼將終止,比特幣礦工將只能收取交易費用。
一些人猜測這可能會導致由“公地悲劇(Tragedy of the commons)”所引發的安全問題,人們出于自身利益考慮行事并破壞系統。因此,人們提出了PoActivity作為一種替代 Bitcoin 的激勵結構。PoActivity 是一種結合了 PoW 和 PoS 的混合方法。
在 PoActivity 中,挖礦一開始使用的是傳統的 PoW,礦工們爭相解決加密難題。根據實現,挖掘的區塊不包含任何交易,它們更像模板。因此,勝出的區塊將只包含頭部信息,以及礦工的獎勵地址。
此時,系統將切換到 PoS。PoActivity 根據頭部信息選擇一組隨機驗證者對新區塊簽名。如果一位驗證者所擁有的系統中代幣越多,那么該驗證者被選中的可能性也會越大。一旦所有驗證者已簽名,那么模板就會變成一個完整的區塊。
如果在完成區塊時,某些選定的驗證者是不可用的,那么就選擇下一個勝出區塊,并選擇一組新的驗證者,依此類推,直到區塊收到到正確數量的簽名。費用由礦工和在區塊上簽名的驗證者分攤。
對 PoActivity 的批評包括挖掘區塊耗能過高(與 PoW 一樣),以及無法阻止驗證者做雙重簽名(與 PoS 一樣)。
16. 時間證明(PoTime,Proof of Time)
使用者:Chronologic
解釋:PoTime 是一種由 Chronologic 提出的共識算法。Chronologic 設計構建一種獨立的區塊鏈,其首席開發人員提出:我們的問題在于,Solidity 中一個變量可存儲的最大數是 1076 的數量級。這使我們很難處理時間生成和令牌生成。
17. 存在證明(PoExistence,Proof of Existence)
使用者:Poex.io、HeroNode、DragonChain。
解釋:PoExistence 是一種在線服務,它通過比特幣區塊鏈對交易打時間戳,驗證在特定時間是否存在計算機文件。PoExistence 是作為一項開源項目在 2013 年提出的,由 Manuel Araoz 和 Esteban Ordano 開發。
用例:
不泄露實際內容的數字簽署協議(Digital Sign Agreement)。
不泄露實際數據,展示數據的屬主。
記錄時間戳。
證明屬主。
檢查文檔完整性。
18. Ouroboros
采用者:Cardano
解釋:Ouroboros 是 Cardano 使用的共識算法。它是 PoS 的一個變種,具有嚴格的安全性保證。
19. 可收回證明(PoR,Proof of Retrievability)
采用者:Microsoft
解釋:PoR 是一種緊湊證明,表示文件系統(證明者)中的目標文件 F 對客戶端(驗證者)而言是完整的。由于使用 PoR 比傳輸文件 F 本身而言具有更低的通信復雜性,因此 PoR 對于構建高可靠的遠程存儲系統是一種頗具吸引力的構建模塊。作為一種共識算法,PoR 對于云計算系統非常有用。
20. 拜占庭容錯(Byzantine Fault Tolerance)
優點:高速、可擴展。
不足:通常用于私有網絡和許可網絡。
采用者:Hyperledger Fabric、Stellar、Ripple、Dispatch
解釋:拜占庭將軍問題是分布式計算中的一個經典問題。問題描述為,幾位拜占庭將軍分別率領部隊合力包圍了一座城市。他們必須一致決定是否發起攻城。如果一些將軍在沒有其他將軍參與的情況下決定發起攻城,那么他們的行動將以失敗告終。將軍們之間相互隔著一定的距離,必須依靠信息傳遞進行交流。 一些加密貨幣協議在達成共識時使用了特定版本的 BFT,每種版本都具有各自的優缺點:
實用拜占庭容錯(PBFT,Practical Byzantine Fault Tolerance):首個提出的該問題解決方案稱為“實用拜占庭容錯”(PBFT),當前已被 Hyperledger Fabric 采用。PBFT 使用了較少(少于 20 個,之后會稍有增加)的預選定將軍數,因此運行非常高效。它的優點是高交易通量和吞吐量,但是不足之處在于是中心化的,并用于許可網絡。
聯邦拜占庭協議(FBA,Federated Byzantine Agreement):另一類拜占庭將軍問題的解決方案是 FBA,已被 Stellar 和 Ripple 等代幣使用。FBA 的通用理念是每個拜占庭將軍負責自身的鏈、消息一旦到來,通過排序建立事實。在 Ripple 中,將軍(驗證者)是 Ripple 基金會預先選定的。在 Stellar 中,任何人都可以成為驗證者,需要用戶選擇去相信哪個驗證者。
由于 FBA 可提供令人難以置信的吞吐量、低交易開銷和網絡擴展性,我相信 FBA 類公式算法是目前提出的最好的分布式共識發現算法。
21. 授權拜占庭容錯算法(dBFT,Delegated Byzantine Fault Tolerance)
優點:快速、可擴展。
不足:每個人都爭相成為根鏈。其中可能存在多個根鏈。
采用者:Neo。
解釋:授權拜占庭容錯算法,簡稱 dBFT,是一種支持通過代理投票實現大規模參與共識的拜占庭容錯共識算法。在 Neo 中,令牌持有者可以通過投票選取其支持的 bookkeeper。之后,選定的 bookkeeper 組采用 BFT 算法達成共識,并生成新區塊。Neo 網絡中的投票是實時的,而非因人而異的。
dBFT 可為具有個共識節點的共識系統提供\(f = {{n-1} \over 3}\)容錯。這種容錯也涵蓋了安全性和可用性、不受將軍和拜占庭錯誤影響,并且適合任何網絡環境。dBFT 具有很好的最終性(finality),這意味著一旦最終確認,區塊將不可分叉,交易將不可再撤銷或是回滾。
Neo 的 dBFT 機制生成一個區塊需 15 到 20 秒鐘。交易吞吐量測定約為 1000 TPS。這對于公共區塊鏈而言,這是很好的性能。通過一定優化,dBFT 具有達到一萬 TPSS 的潛力,這樣就可支持大規模的商業應用。
dBFT 中加入了數字身份技術,這意味著 bookkeeper 可以是真實的個人,也可以是某些機構。因此,dBFT 根據存在于其本身之中的司法判決,可以凍結、撤銷、繼承、檢索和擁有代幣兌換權。它有利于實現合規金融資產在 Neo 網絡中的注冊。Neo 網絡從設計上,就是在必要時為此提供支持。
22. RAFT
優點:
模型比Paxos更簡單,但提供了同等的安全性。
有多種語言的實現可用。
不足:通常用于私有網絡和許可網絡。
采用者:IPFS Private Cluster、Quorum。
解釋:Raft 是一種是設計用于替代Paxos的共識算法。它的本意就是通過實現邏輯分離,比 Paxos 更易于理解。但是它也可以通過形式化證明是安全的,并提供了一些額外的特性。Raft 提供一種在計算系統集群中實現分布狀態機的通用方式,確保了集群中的每個節點在同一組狀態轉移上取得一致。它具有一系列的開源參考實現,包括Go、C++、Java、Scala等語言的完全聲明實現。
Raft 通過選取領導者實現共識。在 Raft 集群中,一個服務器可以是領導者(leader),也可以是追隨者(follower),也可以作為一些特定選舉情況下(例如缺少領導者)的候選者。領導者負責向追隨者發送日志副本。領導者通過發送心跳消息,定期通知追隨者自身的存活情況。每位追隨者維護一個超時(通常在 150 到 300 毫秒之間),正常情況下應在此時間范圍內收到領導者的心跳。一旦收到心跳,超時就會重置。如果沒有收到心跳,那么追隨者就將自身狀態更改為候選者,并開始領導者選舉。
23. 恒星共識(Stellar Consensus)
優點:去中心化控制、低延遲、靈活的信任機制、漸進安全(Asymptotic security)。
采用者:Stellar
解釋:恒星共識基于上文介紹的聯邦拜占庭共識(FBA)。
恒星共識協議(SCP,Stellar Consensus Protocol)提供了一種不依賴閉合系統實現準確記錄金融交易而達成共識的方法。SCP 具有一組可驗證的安全屬性,這些屬性根據如何安全地保持活力而做了優化。一旦出現分區或不當行為節點,它將會終止網絡過程,直至達成共識。SCP 同時具備四種屬性:去中心控制、低延遲、靈活信任機制和漸進安全。
24. 置信度證明(PoB,Proof of Believability)
優點:
通過使用一種稱為“Servi”的理念,PoB 比傳統 PoS 更加去中心化(細節在下文給出)。
相比于傳統的 PoS,具有更快的最終性(Finality)。
采用者:IOST
解釋:傳統的 PoS 共識機制面臨的主要挑戰是趨向于中心化。為了降低這種風險,IOST 引入了“Servi”概念。Servi 不僅衡量了用戶對社區的貢獻,而且鼓勵成員為 IOSChain 的持續發展做出貢獻。Servi 具有以下屬性:
不可交易性(Non-tradable):由于 Servi 并非設計作為一種交換媒介,因此 Servi 不能以任何方式交易或做交換。
自毀性(Self-destructive):驗證區塊后,系統將自動清除驗證者擁有的 Servi 余額。通過這種方式,具有高可信度分值的節點可輪流驗證區塊,確保了公平區塊的生成。
自發行性(Self-issuance):Servi 在做出某些貢獻之后(例如,提供社區服務、估其他實體提供的服務,以及其它一些特殊貢獻),將會自動生成并存入用戶帳戶。
傳統的區塊鏈系統在安全性和吞吐量間存在著固有的折衷,具體取決于分片(shard)的大小。具有大量小分片的系統可提供更好的性能,但抵抗不良行為者的穩定性低,反之也是如此(這也是 Casper 面臨的一個問題)。為了在保持安全和提高吞吐量的情況下打破這種權衡,IOST 創新性地提出了一種用于 IOSChain 的 PoB 共識協議。PoB 確保了節點產生行為不端的可能性微乎其微,同時通過確定分片規模(size-one-shard),顯著地提高了交易吞吐量。
PoB 共識協議使用一種分片內“可信度優先”的方法。該協議將所有的驗證者分為兩組,一組是可信的聯盟,另一組是正常的聯盟。在第一階段,可信的驗證者快速地處理交易。之后在第二階段,普通驗證者對交易做抽樣并驗證,提供最終結果,確保可驗證性。節點被選入可信聯盟的機會是由可信度分值確定的。可信度分值由多個因素計算,包括令牌余額、對社區的貢獻、評論等。具有較高可信度分值的人,更有可能被選入可信聯盟。可信驗證者遵循一定的程序,決定已提交的交易及其訂單的集合,并按順序處理它們。可信驗證者也會構成一些較小的組,甚至可以每組一名驗證者。交易將在這些可信驗證者之間隨機分配。因此,PoB 會產生具有極低延遲的較小區塊。
但是,由于只有一個節點在執行驗證,因此 PoB 可能會存在安全問題。行為不當的驗證者可能會提交一些已損壞的交易。為了解決這個安全問題,PoB 指定了一個采樣概率。普通驗證者根據概率對交易做采樣,并檢測交易的不一致性。如果驗證者被檢測出存在不良行為,那么該驗證者將會失去所有系統中的令牌和聲譽,而被欺詐的用戶將獲得所有損失的補償。“可信度優先”使處理交易非常快,因為只有一個(可信的)驗證者執行驗證,并且該驗證者不太可能存在行為不端。
25. 有向無環圖(DAG,Directed Acyclic Graphs)
優點:
由于 DAG 的非線性結構,它是高度可擴展的、快速、節能、立即實現終結性(Finality)。
不足:只能通過使用 Oracle 實現智能合約。
采用者:Iota、HashGraph、Byteball、RaiBlocks/Nano。
解釋:DAG 是一種更通用形式的區塊鏈。由于其獨特結構,DAG 內在支持高可擴展性,因此也得到了廣泛的使用。
從根本上說,任何區塊鏈系統都具有線性結構,因為區塊是依次添加到鏈中的。這使得相比于并行向鏈中添加區塊,線性區塊鏈在本質上是非常緩慢的。但是對于 DAG 而言,每個區塊和交易只需數個前期區塊得到確認,就可以并行地添加到區塊和交易中。這意味著,DAG 在本質上是高可擴展的。
DAG 存在多種變體,取決于:
· 如何選取前期區塊驗證的算法,也稱為“Tip 選擇算法”。
· 交易完成的順序。
· 如何抵達完成狀態。
下面列出一些廣為使用的 DAG 項目。
25.1 Tangle(IOTA)
解釋:Tangle是一種 DAG 共識算法,由 IOTA 使用。為了發送一個 IOTA 交易,用戶需要驗證接收到的前兩個交易。在更多交易添加到 Tangle 的情況下,這種二對一、前瞻性支付的共識可加強交易的有效性。由于共識是由交易確定的,因此理論上,如果有人可以生成三分之一的交易,那么他就可以說服網絡中的其余部分,使得他的無效交易變成有效的。一旦交易量足夠大,使得個人難以創建三分之一交易量,這時 IOTA 就會在一個稱為“協調器(The Coordinator)”的中心節點上對網絡中的所有交易做“復核”(double-checking)。按 ITOA 的說法,協調員的工作類似于輔助輪。一旦 Tangle 達到一定的規模,協調員就會被從中移除。
25.2 Hashgraph
解釋:Hashgraph 是由 Leemon Baird 開發的一種 Gossip 協議共識。節點隨機與其它節點共享自身已知的交易,最終所有交易都被以 Gossip 協議傳播到(Gossip around)到所有節點。Hashgraph 對于私有網絡是一個很好的選擇。但我們并不會看到它實現在以太坊這樣的公共網絡中,或是不通過 Gossip 協議隨機傳播交易。
25.3 Holochain
解釋:Holochain 十分類似于 HashGraph,但不同于 Hashgraph。它提供了一種可用于構建去中心化應用的數據結構。用戶可以具有自己的鏈,并向其中添加包括金融交易在內的數據。鏈可以采用復雜的方式合并、拆分和交互。數據以去中心化的方式存儲(類似于 Bittorrent)。數據具有一個哈希值,即一個對應于數據的數學指紋。如果有人意圖篡改數據,那么我們就會注意到在數據和哈希值之間存在不匹配,這樣就可拒絕數據為無效的。數字簽名保證了數據的作者身份。Holochain 可看成是“Bittorrent+git+ 數字簽名”。
25.4 Block-Lattice(Nano)
解釋:Nano(以前稱為 Raiblocks)是以纏繞在區塊鏈上的方式運行,這種方式被稱為“塊狀格子”(Block-lattice)。在 Block-lattice 結構中,每個用戶(地址)都有自己的鏈,只有用戶本身可寫,每個用戶都擁有所有鏈的副本。
每個交易都可分解為發送者鏈上的發送區塊,以及接收者鏈上的接收區塊。Block-lattice 看上似乎太簡單,以至于無法工作,但它已經在實際運行了。Block-lattice 的獨特結構的確無法抵制一些獨特的攻擊向量,例如 Penny-spend 攻擊。在這種攻擊中,攻擊者通過向大量空錢包發送數額可忽略不計的金錢,導致必須要追蹤的鏈數量急劇膨脹。
25.5 SPECTRE
解釋:SPECTRE,即“序列化 PoW 事件并通過遞歸選舉確認交易”(Serialization of Proof-of-work Events, Confirming Transactions via Recursive Elections),是提議的一種 Bitcoin 擴展解決方案。它利用 PoW 和 DAG 的組合實現可擴展的共識。在 SPECTER 中,一個挖掘的區塊指向多個父節點,而不僅僅是單個節點,這使得網絡每秒可以處理多個區塊。而挖掘指向某些父區塊的區塊,這將支持區塊的有效性。與 PoW 的“最長鏈勝出”的原則相比,SPECTER 使用的原則可描述為“擁有最多子節點的區塊勝出”。SPECTRE 尚未得到實際運行測試,因此可能會存在一些新的攻擊向量。但我認為,SPECTRE 很有可能成為一種修正 Bitcoin 問題的潛在好做法。
25.6 ByteBall
解釋:ByteBall 使用 DAG 建立交易間的偏序關系,此外還在 DAG 中添加了“主鏈”(MC,Main Chain)。
圖 DAG 中加粗顯示的“主鏈”
MC 允許在交易間定義全序關系,即更早加入(直接或間接)MC 的交易,必定更早出現在全序中。如果存在“雙重支付”問題,那么將視較早出現在全序中的交易版本為有效的,而其它所有的交易均被視為是無效的。
根據交易在圖中的位置,MC 可得到確定性的定義。相關詳細信息,請參閱白皮書。作為一般性規則,MC 傾向于采納由一些總所周知用戶所給出的交易,這樣的用戶被稱為“證人”(Witnesses)。證人列表是由用戶自己定義的,因為列表中包括了用戶發布的每個交易。然后,MC 沿著 DAG 內路徑推進。推進原則包括:
· MC 上相鄰交易的證人列表要么完全相同,要么只存在一個突變。
· 與其它鏈相比,MC 中為經過最多數量的由見證人認證的交易。
ByteBall 也是首個在系統中包含 Oracle 的平臺。Oracle 是在 DAG 中添加智能合約功能所必需的。