觀點 | 去中心化的含義
一. 引言
在密碼學貨幣的世界裡,很少有詞語像“去中心化”一樣,既令人心潮澎湃,引發經久不衰的傳播,同時又那麼困惑。一方面,去中心化被當成區塊鏈(尤其是工作量證明系統)最重要的成果;另一方面,也有人認為工作量證明並沒有(甚至是不可能)實現去中心化,因為出現了大型礦池和強勢的挖礦裝置製造商。
本文第二部分將探討現有文獻中對“去中心化”概念的探討;第三部分將提出我認為的“去中心化”概念;第四部分將討論“去中心化”與“免信任(trustlessness)”之間的關聯;第五部分將給出全文的結論。
二. 文獻
Vitalik 在文章The Meaning of Decentralization 中提到,我們至少應從三個層面判斷一個系統的屬性:架構層 (由多少計算機組成,可以容忍多少節點崩潰)、政治層 (有多少人實際上控制這個系統)以及邏輯層 (整個系統像一個單點還是一個叢集)。Vitalik 認為如此方可涵蓋各式各樣的系統(如法律系統、公司)。此外,他還舉出了去中心化會帶來的幾大優點:容錯性、抗攻擊性、抗勾結性。但是,為使這種定義成為一種有指導意義的學說,我們必須追問幾個問題:(1)不同層面的去中心化定義是否足夠清晰;舉例而言,究竟應當以礦池的數量還是以參與治理的團體數量來評判政治層的去中心化呢?(2)不同層面的去中心化是否明確導向可欲價值的實現;比如,架構層的去中心化會必然產生出抗攻擊性嗎,邏輯層的去中心化會產生什麼價值,還是基本沒有價值呢?(Vitalik 其實回答了這個問題。他認為多數情況下邏輯層的中心化是好事,但也有人認為,在網路環境較差等條件下,邏輯層的去中心化是好事。)
Chris Dixon 的文章Why decentralization matters 亦是常常被引用的一篇文章,在該文中,Chris 認為去中心化的價值在於以之為基礎的創新活動不會被武斷地遏止 ,在此,Chris 並沒有明確定義“去中心化”(他甚至把維基百科也當成是去中心化的例子,因為其中的內容生產不是被有意組織起來的,而是自然生髮出來的),但是可以意識到,要實現他的目標,Vitalik 意義上的架構層和政治層去中心化是必需的。
Tonny Sheng 是另外一位集中討論“去中心化”含義的作者。他尤為反對使用節點數量來衡量去中心化程度,他認為包括上述兩位作者在內,許多人對“去中心化”一詞的探討是有意義的,但仍沒有解決根本的問題。他認為,最好還是別用“去中心化”這樣模糊的詞語了 ,應該使用別的詞以更清楚地描述“抗審查性”。
我相信讀者已經意識到了,上述幾位作者的探討基本上沒有涉及系統中不同節點的差別(Tonny Sheng 本來是最應該討論這一點的作者,因為他探討的案例是 EOS)。雖然這只是視角的選擇,但我更願意從節點開始分析,而不是概覽整個系統。此外,上述幾位作者的結論實踐意義稍弱:我們並不能從中知道,為了讓一個系統變得更加去中心化,我們可以做哪些改進工作。
三. ”去中心化“與系統的壽命
一如所有的寫作者都是站在前人的肩膀上,我在本節中寫下的觀念受到了 StopAndDecrypt和 Nervos 首席架構師、傑出的區塊鏈工程師 Jan的啟發,尤其是後者。我可以毫不猶豫地承認:這些原創觀念的貢獻應歸功於 Jan,我只是把它寫下來而已。
迄今為止,大多數文獻都在討論分散式共識機制的意義、礦池對系統安全性的影響等,但鮮少有人討論過這樣一個問題:有壽命的節點,如何可能組成一個永生的系統 ?一個區塊鏈系統固然能對外部攻擊有一定防禦能力,但內部的潰敗呢?如果這個系統並不能長期存續,所謂的價值儲存豈不也是泡影?
1. 背景
並不是所有型別的節點都對分散式系統的健康和存續有意義:輕節點只從全節點處獲取資訊,對系統沒有貢獻;全節點(儲存了所有鏈資料並獨立完成所有驗證工作的節點)則通過驗證工作構築了對無效交易和無效區塊的防線。全節點可以是或者不是出塊節點,出塊節點(尤其是礦池)對網路的貢獻與全節點的貢獻不是同一種。
但是,人們必須投入計算機資源才能部署全節點,在當前的語境下,這些資源包括:計算能力(廣義上的計算能力,而不是 Hashrate,用於驗證)、硬碟、網路頻寬以及記憶體。並且,此種投入不是一次性的投入,而是在鏈生長的過程中,不斷變化的持續投入 。舉例而言,去年今日,執行全節點需要佔用的記憶體,與今日需要佔用的未必相同;去年一年產生的鏈資料大小,與今年產生的鏈資料大小未必相同。絕大多數情況下,上述四種資源要求中至少有一項會因區塊鏈的普及而提高,比如因待打包的交易增多而產生更高的記憶體佔用;增加區塊大小也會要求更多頻寬。
那麼問題來了,如果有某些項的要求提高得太快,會出現什麼情況呢?無法滿足要求的計算機會發現自己無法同步最新區塊,或者經常性地落後於最新區塊,最後死亡——從網路中消失。節點是有壽命的。運營者主動退出、無法再滿足資源要求,乃至硬體損壞,都可以是節點死亡的原因。
2. 定義及其解釋
因此,我在這裡提供一種“去中心化”的定義:當某個區塊鏈系統在執行中的某個時間段內產生的所有資源要求增量,均低於技術發展所產生的資源增量,則這個系統具備“去中心化”屬性 。舉例來說,若某年的技術進步使硬碟空間可以增加 120MB,網路頻寬增加了10MB/S,計算能力上升了 1GHz,記憶體增加了 20 MB;與此同時,若某區塊鏈系統在該年中產生的鏈資料小於 120MB,頻寬要求上升了 5MB/S,計算能力要求增加不到 1GHz,記憶體佔用的增量小於 10MB;那麼,該系統是去中心化的。符合去中心化定義的系統必定能夠:假設人們的偏好不變,隨時間推移擁有越來越多的全節點 ,因為全節點的相對成本變得越來越低。而不符合該定義的系統,將在鏈自然生長的過程中加速全節點死亡。
此處需要解釋的是:
- 不需要考慮全節點初始化需要的資源數量,因為只要在增量上滿足條件,“去中心化”與其價值追求(即網路中擁有更多全節點)之間的關係便不會被打破;
- 也許有人會認為,可以使用“資源投入與個人收入佔比一定的條件下產生的資源增量”來代替“技術發展產生的資源增量”,我認為這樣替代也是合適的,只不過計量上可能稍微複雜一些;之所以使用“技術發展產生的資源增量”,是因為想到了摩爾定律,如此一來,可供的資源增量便不難計量;
- 使用“小於”而不是“低於其 1/2”並沒有特別明確的理由,換言之,可以把它視為一個心態問題——我並不介意有工程師對此要求更嚴苛一些;只要滿足“小於”這個條件,上述價值便可產生出來;
- 之所以假設人們的偏好不變,是為了這個定義的實用性:毫無疑問,如果人們的偏好會改變(這當然是實情),達成上述價值所需的條件(即所需資源的增量與實際產生的資源增量之間的關係)會變得更嚴或者更鬆,但我認為一位工程師實在沒有理由斷定人們的偏好會往哪個方向變動,即便可以預期這樣一個系統會促進經濟發展因而改變人們的偏好,也不是一個理論上的理由;再說一遍,我並不介意有些人對此要求更高一些;
- 我同樣不懷疑,這樣的定義忽略了許多細節,比如,也許,記憶體也許不僅有大小的區別,還有型別的區別(我不懂硬體),但新增這些條件不會改變其中的邏輯:所需資源增量小於可供資源增量;這也是為什麼我認為可以提出這個定義;
- 終極而言,考慮全節點而不考慮出塊節點,是因為全節點才對網路安全性有決定意義,是全節點的存在約束了出塊節點的行為,而不是相反,具體緣由可見 Jan 的雄文Don't Trust. Verify. ;顯然,只有 100 份賬本的貨幣,和擁有 1000 份賬本的,即便名義上是同一種,實際上也不是同一種。
3. 該定義的不可消除性
眾所周知,現在有工程師開始考慮全節點的激勵問題。當前,在比特幣和以太坊網路中,執行全節點是沒有直接收益的;雖然部署全節點是應用開發和服務提供商業務中的一環,但在大多數情況下,執行全節點是自發行為,沒有收益。但全節點又確實是有意義的,因此有人設想為執行全節點提供經濟激勵,來增加全節點數量,提升網路安全性(相應地,本文提出的“去中心化”概念要求會變低甚至不再存在,因為不再依賴自發的部署行為)。
此類激勵措施分為兩類:第一類是將激勵措施內置於共識協議層,即在區塊鏈系統的經濟模型中明確引入對全節點的激勵;第二類是提供工具,讓全節點可以收取服務費(比如對輕節點) 。第二類激勵與當前的狀態區別不大——當前的礦池也是這樣做的:執行全節點,向礦工收費。
在此我想挑戰一下第一類激勵措施背後的觀念,我認為這並不能解決問題。因為,一旦要為執行全節點提供激勵,就免不了要建立一套新的賬本,用來度量、記錄全節點的貢獻並分發收益,這一套賬本也需要傳輸、計算和儲存,那麼讓誰來儲存和計算這份賬本呢 ?即便你可以說,就讓這些全節點自己來承擔唄,他們也確實需要投入額外的資源,這部分額外的資源又是沒有得到定價的;換言之,你要給礦工的貢獻定價,就會出現驗證礦工工作量的全節點不能得到獎勵,在此基礎上再給全節點的貢獻定價,又會出現一些驗證全節點貢獻的驗證者不能得到獎勵,如此而已,不可窮盡。
邏輯上來說是如此,經濟上來說則需要進一步的論證:如果說所有賬本寫入操作(即出塊)的資源提供者都必須是全節點,那麼可以認為驗證工作也不再是一個沒有得到定價的資源——它變成了出塊節點為了防止別人侵佔自己的利益而付出的費用,即出塊節點為了從事相關業務必須付出的成本。但有兩點使得上述狀態不可能實現:(1)我們無法直接為驗證工作定價,我們只能給驗證工作投入的資源支付報酬;然而一旦確定要為這部分資源支付,這部分資源的投入者就(在另一套賬本中)被轉化為出塊節點 ,而對有效投入的驗證工作仍舊得不到支付——在早期的工作量證明系統中,每個出塊節點都是驗證節點,但當出塊者發現驗證工作無利可圖之後,礦池模式就自然而然出現了,礦工可以無需部署全節點、無需再驗證,而將這部分工作交給礦池層——一旦但在新賬本上礦池層出現,問題就一模一樣地回來了:誰來約束出塊節點呢?或者說,光是礦池之間的相互約束足夠嗎?在新賬本中沒有得到支付的驗證工作,難道是沒有意義的嗎?(2)可以考慮在協議層做出嚴格的限制,阻礙礦池層的出現,然而一旦這樣做,就意味著整個網路要付出高昂的通訊費用,這是一種幾乎無法擴充套件的方案 。
綜上,我在此證明的是:一個公共賬本系統中總會有一部分資源是沒有得到系統本身的定價的,試圖為其定價會要求投入另一些不能得到系統定價的資源,因此一樣會存在未得到支付的資源提供者,一樣會面臨所需資源增加的問題,一樣會存在“中心化”與“去中心化”的區別,一樣要面對鏈生長對這部分節點的影響問題。
總而言之,我認為“去中心化”是公鏈中一個不可取消的元概念 ,內在的原因是出塊和驗證在公共賬本系統中的不同角色;而這個概念捕捉的是節點壽命與公鏈存續之間的關係。因為節點是有壽命的,一個公鏈系統必須是去中心化的,否則便會不斷枯萎。就像個體與自身所處文化的關係一樣,個體毫無疑問為文化的生髮和延續做出了貢獻,而文化若不斷使個體的處境變得更加艱難,這種文化早晚會崩潰。有肉身的個體能組成長生的文化,在於文化真的能讓他們過得更好。
四. “去中心化”與“免信任”的關係
“免信任”是“去中心化”的必要條件。
免信任的含義是:在任何時刻,驗證系統當前狀態的形式正確性(correctness)無需對某個有形實體的信任,而只需要對某一系列抽象規則的知識。這些規則為判定 correctness 確定了一些不依賴於對第三方信任的標準。此外,因關鍵的歷史事件而產生的區塊檢查點(如創世塊以及 The DAO 硬分叉)與“系統是否免信任”無關。這些檢查點只是協助人們選擇他們願意選擇的鏈,而不影響系統的屬性。至於如何將檢查點的存在及其意義公示出來則更像是一個治理問題。換言之,免信任回答的不是“你在哪條鏈上”的問題,而是“你所在的這條鏈(不管叫什麼)是否具有一種可獨立完成所有驗證工作的屬性”的問題。
因此,如果一個系統不是免信任的,那麼人們不需要也不會(有的時候也許不被允許)去執行全節點,討論“系統是不是去中心化”也就沒意義了。而一個系統即便實現了免信任,也未必就實現了去中心化。
五. 結論
我認為,一個具有實踐意義的“去中心化”概念回答的不是一個系統在功能提供方面的問題,而是一個免信任的系統與外在於這個系統的其它資源供應系統之間的關係問題。符合該定義的系統可預期擁有更多全節點,最終實現系統本身的長期存續。
此外,我在本文的推論中大量運用了我在合約經濟學(或者說新制度經濟學,名雖不同,實則一也)中學習到的思維方式,即在人與人的互動行為中,重要的是他們為實現合作所使用的合約形式,該合約必須能夠方便度量和判質。如果有些推論讓人難以理解,或許是因為讀者還不熟悉這種思維方式。而我要說的是,該方法在分散式系統的分析中還有大量用武之地,值得我們去做一些工作,因為很少有人意識到,點對點網路是一種特殊的合約形式,這種合約的特點是我們在做解決方案時必須予以關注的。
[1]: https://ethfans.org/posts/the-meaning-of-decentralization
[2]: https://medium.com/s/story/why-decentralization-matters-5e3f79f7638e
[3]: https://orange.xyz/p/207
[4]: https://hackernoon.com/the-ethereum-blockchain-size-has-exceeded-1tb-and-yes-its-an-issue-2b650b5f4f62
[5]: https://orange.xyz/p/186