logo

不可能三角:區塊鏈最大的謊言

瀏覽數

9

“不可能三角”的提法很流行;“打破不可能三角”、“突破不可能三角”的宣稱也不絕於耳。

這很矛盾。科學意義上的“不可能”就是指無論如何也不可能,那它怎麼可能“被打破”、“被突破”呢?

這不是一篇要蓋棺定論的文章,它的出發點是為了探討,探討區塊鏈領域一個幾乎人人都知曉的概念:不可能三角。

我們要探討它是一個真概念,還是一個偽概念。因為只有當我們分辨出真偽,不再聚焦、不再利用、不再浪費開發能力在偽上,才有可能去探索區塊鏈中真正需要被關注、被解決的問題。

本文分為三個部分,分別是:不可能三角的演變史;對不可能三角的質疑;分佈式系統CAP 定理是真正的不可能三角。

以訛傳訛的不可能三角演變史

區塊鏈不可能三角是指一個區塊鏈系統不可能同時滿足三個角,它必須以部分的犧牲某個角為代價,換取另外角的指標的提升。

1.長鋏版本

在中國,最早提出不可能三角理論的是長鋏。他在2014 年發表了一篇名為《不可能三角形:安全,環保,去中心化》的文章,並引起了廣泛的討論。

不過,這篇文章討論的是加密貨幣的不可能三角,結論是“環保型密碼學貨幣”是不存在的。這與我們如今談論的不可能三角的適用領域完全不同。長鋏是這麼描述不可能三角的:

在此,我提出一個三元悖論:去中心化、安全、環保構成一個不可能三角形。

設計一個既環保又安全的密碼學貨幣,它必然是中心化的,比如PPcoin、Nextcoin、Ripple,它們要么本身就是中心化的架構,要么其去中心化的架構不可維持,它們本質上仍是PayPal 、網銀一樣的中心化驗證機制。

設計一個既環保又去中心化的密碼學貨幣,它必然是不安全的,比如IP 投票制的P2P 貨幣,中本聰起初就已排除了這種可能,他認為“如果決定大多數的方式是基於IP 地址的,一IP 地址一票,那麼如果有人擁有分配大量IP 地址的權力,比如殭屍網絡,就有可能主宰比特幣網絡”。

設計一個安全的去中心化貨幣,它必然是以付出能源與計算力為代價。工作量證明是以去中心化形式構建安全產權認證系統的第一個解決方案,也可能是唯一解決方案。

長鋏提出的“去中心化”和“安全”在用詞上與現今的流行版本一模一樣,但它們所代表的意義卻截然不同,長鋏版本中指的是貨幣的機制和貨幣的安全。

2. Vitalik Buterin版本

流行版本的不可能三角理論來自“Vitalik”,是指一個區塊鏈系統無法同時兼顧去中心化(Decentralization)、可擴展性(Scability)、安全性(Security),這個三角被廣泛地引用進了各種演講、報告、文章,甚至白皮書中。

但它真的是由Vitalik提出來的嗎?

該不可能三角發源於GitHub 以太坊目錄下的一篇文章,名為《On sharding blockchains》,文中首次提出了這個三元悖論(trilemma)。

這篇文章隸屬於以太坊的《Sharding FAQs》系列,由一位名叫James Ray的團隊成員創建並維護。這個系列用來做什麼?用來回答大家關於分片的種種問題。

也就是說,所謂的Vitalik 提出的理論,其實只是以太坊團隊成員在一篇回答社區問題的文章中提及,不僅與Vitalik 無關,不僅不是論文,它連主題性文章都算不上。但真相還不止於此。

為清晰起見,逐條說明關於“Vitalik” 版不可能三角的一些事實。

1.原文用的是“This sounds like there's some kind of scalability trilemma at play”,再結合上下文,會發現不可能三角這一理論的提出是沒有經過任何邏輯的、系統的論證,作者只是列舉了一些問題後就提出了這個觀點。而且作者在文中用的就是不確定的表達,卻在後來被人們當作了無疑的真理。 

2.原文的上下文都在討論“scalability”,甚至作者也稱其為“scalability trilemma”,也就是說,這個三角本是針對“區塊鏈可擴展性”的,但卻被擴大到“區塊鏈”,從Scalability Trilemma 演變成了Blockchain Trilemma。

3.對於三個角:Decentralization 、Scalabilit、Security,作者給出了明確的定義,比如安全是“being secure against attackers with up to O(n) resources”。也就是說,作者的三角是限定狀態下,並基於這種限定狀態進行討論,但卻被擴大到無限定條件的區塊鏈。

不過,“Vitalik”不可能三角最大的問題還不是上述事實,而是提出這個觀點的環境。它出現在用來介紹以太坊分片技術的文章中。

寫過論文的人知道,為了證明自己的研究解決了問題,第一步就是提出問題;為了證明自己的研究厲害,第一步就是把問題描述的很重要、很難解決。《On sharding blockchains》這篇文章的結構正是如此。

首先通過對現狀的描述,給出“不可能三角”這個問題;接下來分析多種方法,指出別人無法解決這個問題;最後提出自己的方案,論證該方法可以如何完美地解決問題。

沒錯,如果耐心一些,把“Vitalik”提出不可能三角理論的文章看完,就會發現以太坊已經通過它的分片技術解決掉這個三角難題了。所謂的“不可能”,在它誕生的第一天就被論證為“可能”了。

James Ray 在文章中寫下這個不可能三角,只是為了論證以太坊通過分片技術可以實現可擴展性,只是為了證明we can break through scalability trilemma。

關於這個三角,文中定義清晰、描述嚴謹,並無問題,只是在後來被多維度誤解了。下圖是以太坊在這個問題上能實現的解決程度。

立不住腳的不可能三角

不可能三角得到廣泛的認可,除了與長鋏或Vitalik 的知名度有關,更多的是因為這個理論看上去是正確的。但它真的經得起推敲嗎?

不妨問問自己三個問題:

1.什麼叫去中心化?什麼叫可擴展性?什麼叫安全性?能確切的回答它們各自的含義嗎?如果一個理論中的概念都無法準確定義,該理論有什麼價值?

2.把三個角變成兩個角,“不可能”的矛盾關係還存在嗎?把三個角變成四個角,“不可能”的矛盾關係還存在嗎?如果存在,提“不可能”三角的獨特意義何在?

3.不可能三角對區塊鏈項目的工程實現有什麼實際的指導作用?

“可擴展性”在少數版本中被替換成了“性能”,但即使沒被替換,人們在語義上也是用“可擴展性”來指“性能”。但這兩個概念是不具備等價性的,擴展性只是提高性能的方法之一,性能只是擴展性實現的功能之一。下圖是常見的不可能三角的版本。

EOS 的21 個節點常被用來證明不可能三角的正確性,人們認為它是犧牲了“去中心化”,換來了“性能”,但當我們擔心EOS 的“去中心化” 時,擔心的是什麼?擔心的是EOS 因為中心化而不夠“安全”,去中心化與安全是緊密相關的。

“去中心化”和“性能” 是不可能兩角的說法反而比不可能三角更為精準,僅僅兩角就能說明區塊鏈現階段的狀況。

另一個角度,犧牲去中心化和可擴展性就能保證區塊鏈系統的安全嗎?顯然不是。安全很大一部分是純技術的解決方案。那麼不可能三角中的安全指的是什麼?提這種局限的安全的意義又何在?

除了用於“吹牛”,不可能三角似乎對區塊鏈項目的工程實現沒有任何實際的指導作用。我們無法想像一個項目的負責人對團隊成員說,“為了提高性能,我們可以對系統的安全性做一些犧牲”,也無法想像負責人會說“為了去中心化,這個系統不要求高性能” 。

事實也正是如此。從來沒有一個項目說自己為了提高不可能三角的某個指標,而犧牲了其他的指標,他們說的是自己“突破了不可能三角”。

如果說不可能三角是真概念,那麼它最大的意義恰恰就是告訴項目方,系統必須要在這三個指標間做出取捨,而不是“突破”,可以突破的都不叫“不可能”。

分佈式系統CAP 定理是真正的不可能三角

追究不可能三角的真偽,一方面是因為偽概念給了偽項目生存的土壤,這很糟糕;另一方面是希望人們能把焦點集中到真正的問題上。

在區塊鏈,有價值的不可能三角是分佈式系統CAP 定理。它是指分佈式系統無法同時確保一致性(Consistency)、可用性(Availability)和分區容忍性(Partition Tolerance)。

Eric Brewer 在ACM PODC 會議(ACM Symposium on Principles of Distributed Computing,分佈式計算領域的頂級學術會議)上首次提出了CAP 猜想,之後,麻省理工學院的Seth Gilbert 和Nancy Lynch 從理論上證明了該猜想,使之成為一個定理。

CAP 定理是分佈式系統領域最重要的原理之一,深刻影響著分佈式計算與系統設計的發展。

CAP 定理一致性、可用性和分區容忍性的具體含義如下:

1. 一致性:如果系統對一個寫操作返回成功,那麼之後的讀請求都必須讀到這個新數據;如果返回失敗,那麼所有讀操作都不能讀到這個數據,對調用者而言數據具有強一致性。

2. 可用性:所有讀寫請求在一定時間內可以得到響應,不會一直等待。

3. 分區容忍性:系統中的網絡可能發生分區故障,即節點之間的通信無法保障,但這不影響系統正常服務。

CAP 定理認為分佈式系統最多只能同時實現上述三個要素中的兩個。在某時刻如果滿足AP,即分隔的節點對外服務,但不能相互通信,這將導致狀態不一致,不能滿足C;如果滿足CP,那麼在網絡分區的情況下為達成C,請求只能一直等待,這將無法滿足A;如果滿足CA,即在一定時間內要達到節點狀態一致,則要求不能出現網絡分區,這將不能滿足P。

這一結論告訴設計者不要浪費時間去研究如何兼顧這三要素,因為根本不可能,在進行分佈式架構設計時,必須根據具體系統的需求做出取捨。                                                   

不可能三角並不是限制,它反而在正確的道路上開拓了設計師的思路,讓他們在多樣化的取捨方案下設計出了多樣化的系統。

過去十幾年裡湧現出不計其數的分佈式的新系統,正是基於數據一致性和可用性的相對關係產生的——對於分佈式系統,分區容忍性必須滿足,否則該系統就毫無意義,因此其實是在一致性和可用性之間做選擇。

區塊鏈系統的設計也正是如此。

在區塊鏈中,一致性是保證各個鏈的各個節點讀出來的數據都一樣,可用性是保證各個鏈的各個節點可以在不同步完全的情況下實現交易,而因為節點是分佈的,分區容錯性是必須要保證的。基於這三個要素和對三個要素的取捨,有了BFT 類共識、PoW 類共識和其他共識算法。

就像沒有一個通用的分佈式系統,也沒有通用的共識算法。CAP 定理指導著區塊鏈共識和治理的設計,決定著其分佈式系統的功能和實現。

不可能三角的迷人之處在於:科學告訴我們什麼是不可能的,而工程告訴我們可以付出一些代價,把它變成可行。CAP 定理具有這種帶張力的美感,反觀流行版本的不可能三角,一點兒都不具備。