共識是政治的事務。相反地,科學只需要一個剛好是正確的研究者,這意味著他或她有可以透過實際世界來驗證的結果。在科學中,共識是無關緊要的。重要的是結果能夠被重複驗證。歷史上最偉大的科學家之所以偉大,正是因為他們打破了共識。沒有所謂的共識科學。如果它是共識,那它就不是科學。如果它是科學,那就沒有共識。就是這樣。
Consensus is the business of politics. Science, on the contrary, requires only one investigator who happens to be right, which means that he or she has results that are verifiable by reference to the real world. In science consensus is irrelevant. What is relevant is reproducible results. The greatest scientists in history are great precisely because they broke with the consensus. There is no such thing as consensus science. If it’s consensus, it isn’t science. If it’s science, it isn’t consensus. Period.>
前一篇提到web3的去中心化是包含密碼學與P2P點對點傳輸,今天要聊第三個基石:共識算法/機制 (consensus algorism or mechanism)
剛開始進入幣圈的時候,一直搞不清楚平常講的共識機制或稱共識演算法,跟決定BIPs (Bitcoin Improvement Proposals) /EIP (Ethereum Improvement Proposals)的關係。
我覺得可以將前者稱為「節點共識」或「鏈上共識」,後者是「政治共識」或「鏈下共識」(這也是為什麼以太坊治理強調鏈下治理 off-chain governance),而今天主要討論技術面,所以是前者,而後者是決定、改變前者的過程,我們改天再說。
由於語言與文字紀錄是人類作為一個物種與眾不同的地方,Web3 - 區塊鏈的技術,並不是什麼神奇的魔法,只是紀錄某個人類群體想紀錄的東西,並且讓這個紀錄能夠可靠、(相對)便宜、廣泛而快速的讓這群體內(甚至群體外)的任何人閱覽,就如昨天提到P2P檔案共享。所以,現實中應用web3的場景,應該回歸到他的本質,而不是事事上鏈,人人發幣,將web3當作社會苦難普渡眾生的萬靈丹。
但反過來說,任何現代社會大家在意的記錄,都可能有區塊鏈可以適用的場景。即使你我素昧平生,我很有信心的可以猜測你最在意的紀錄,是你銀行的存款或是持有股票的張數——因為我們都非常在意個人財務資訊,這也是為什麼區塊鏈技術最快發展的是加密貨幣/資產與去中心化金融(Defi)。
正是因為去中心化的價值在於傳遞與記錄訊息,每一個節點理想上都要同步所有資訊,但是總會出現(不)發送與(拒絕)接收訊息節點,而這些節點的錯誤也可能出自於合理的原因,所以我們仍要想辦法維持整個區塊鏈的正常運作,就必須要找到一個大家可以接受的運算規則,aka節點間的共識。
但介紹演算法之前,覺得應該先推薦FLP 不可能定理。FLP 是取名自論文 Impossibility of distributed consensus with one faulty process的作者Fischer, Lynch及Paterson的縮寫。該定理證明在一個異步的分散式系統中,如果允許即使一個節點可能失敗(崩潰故障),那麼沒有算法能夠確保在所有情況下達成共識。
FLP 不可能定理在分散式計算領域具有里程碑意義。它證明了在異步分散式系統中,如果允許至少一個節點可能失敗
,則不能確保在所有情況下都達成共識。這個定理對許多分散式共識算法的設計有深遠影響,因為它基本上設定了一個不能突破的限制。此定理特別對拜占庭容錯(BFT)和崩潰容錯(CFT)等算法的設計和理解有重要影響。它解釋了為什麼在許多情況下,需要某種形式的同步性、時序假設或其他非異步機制來達成共識。
這是一個學術圈寫到滿出來的題目,其複雜程度更勝於crypto的分類,慶幸看到一篇2023年的論文A Taxonomic Hierarchy of Blockchain Consensus Algorithms: An Evolutionary Phylogeny Approach綜整過往的分類,其中有張圖融合政治學的詞彙分享在下方,有興趣的朋友可以找這篇論文來看看更多細節。
以下是常見的共識演算法的分類
Paxos: 這是一個用於非區塊鏈的分散式系統來達成共識的算法。它經常用在數據庫和文件系統中,例如 Google Chubby 分散式鎖定服務。Paxos 是具有容錯能力的,但實作起來可能較為複雜。
Raft: 這是一個簡單、易於理解的 Paxos 替代方案,用於達成像數據庫和儲存系統這樣的分散式系統中的共識,例如 etcd 分散式鍵值存儲。
BFT (Byzantine Fault Tolerance): 這是一個能在某些節點不可靠或惡意的情況下正常運作的共識算法的通稱。BFT算法經常用在需要節點互相信任到某種程度的許可型區塊鏈中。
PBFT (Practical Byzantine Fault Tolerance): 是 BFT 的一個進階版,旨在有效地運作在異步系統中。PBFT 經常用在許可型區塊鏈。
Tendermint: 這是一個用於各種區塊鏈平台的 BFT 共識算法,以其強大的終結性特點而聞名,並經常用在 Proof-of-Stake 系統中。Tendermint 也用於 Cosmos 區塊鏈生態系統。
Ouroboros Byzantine: 這是 Ouroboros 的一個版本,增加了拜占庭容錯特性。用於 Cardano,它結合了 PoS 和 BFT 功能。
PoW (Proof of Work): 用於比特幣和其他加密貨幣。它要求節點解決計算問題以驗證交易並創建新區塊。
Ethash: 這是以太坊使用的特定 PoW 算法,旨在某種程度上阻止ASIC挖礦。
PoS (Proof of Stake): 根據節點持有的幣數量來選擇驗證交易和創建新區塊的節點。以太坊 2.0 使用這一算法。一般認為 PoS 算法比 PoW 更節能。
PPoS (Pure Proof of Stake): 用於 Algorand,這是 PoS 的一個變種,設計得更為平等,允許所有代幣持有人有機會提議區塊。
Ouroboros: 用於 Cardano 的一種 PoS 算法,也整合了拜占庭容錯的元素。
DPoS (Delegated Proof of Stake): 這是一種變體,其中持幣人會投票選出少數節點來進行驗證。
PoA (Proof of Authority): 這是一種依賴於一組預先批准的驗證者(即網絡中已知和受信任的節點)的共識算法。PoA 算法經常用在性能和可擴展性很重要的私有或聯盟區塊鏈中。
PoH (Proof of History): 這是一種使用可驗證的時間記錄來排序交易的共識算法。PoH 算法旨在提高效率和可擴展性,並用於像 Solana 這樣的區塊鏈中。
Tendermint: 雖然主要是一種 BFT 算法,它經常與 PoS 機制一同用於驗證者選舉,因此也可以看作是一種混合型算法。
這篇文章先介紹鏈上共識與鏈下共識,再根據文獻整理出主要的共識機制,預計再劃一個流程圖就使用者/開發者的視野,去選擇什麼樣的共識機制適合特定場域。
共識本身即是政治。雖然科技進步帶來無限想像,但所有鏈上共識,都奠基於鏈下共識,這也是為什麼以太坊治理從PoW轉換至PoS需要耗時好幾年的原因——共識需要妥協,衝突是必然的結果。
參考資料:
Michael Crichton, Lecture at the California Institute of Technology titled “Aliens Cause Global Warming” 2003
Kim, H.; Kim, D. A Taxonomic Hierarchy of Blockchain Consensus Algorithms: An Evolutionary Phylogeny Approach. Sensors2023,23,2739. https:// doi.org/10.3390/s23052739
區塊鏈技術指南,https://poweichen.gitbook.io/blockchain-guide-zh/distribute_system