在每個人都在談論「DeFi」和「Staking Economy」的時候,鏈聞希望帶領中國的加密貨幣社區考慮另外一個值得討論的話題:「治理」。治理是一個社會學話題,也是一個技術話題。

最近,鏈聞已經連續發表文章,通過「公地悲劇」爲切入口,討論關於開放社區的 治理原則治理框架

今天,我們通過技術的視角審視關於去中心化應用的治理問題。這篇文章有些燒腦,它提出了一個嶄新的視角,即從應用治理的角度來看應用該選擇什麼樣的公鏈做開發。

受訪者:劉毅,Random Capital 合夥人
採訪 & 撰文:李畫
來源:鏈聞 ChainNews

讓我們先從區塊鏈的存在意義說起。區塊鏈能帶來的最大好處之一,是降低交易成本,重要原因在於它能夠最小化信任。但如果在對去中心化應用進行升級和修改時,不是以去中心化治理的方式來完成的,顯然就會破壞掉這種信任。

不同的公鏈對應用的治理有不同支持程度。比如以太坊不支持應用的去中心化治理,Polkadot 則支持應用的鏈上去中心化治理。

激進一點來講就是,智能合約方式的應用都不支持去中心化治理,這類應用更應該被定義爲可驗證應用;應用鏈方式的應用支持去中心化治理,它們纔是真正的去中心化應用。

不過需要注意的是,本文只是提出了一個可供討論的觀點,並不是做出某種結論,其目的是爲了探索「鏈上治理」這個領域的各種可能性。

就這個話題,我們邀請了 Random Capital 合夥人劉毅詳細講述他的看法。

劉毅是區塊鏈和大數據技術專家,有 20 年多種資本市場投資經驗,自 2013 年初便開始投資比特幣,並長期從事區塊鏈天使投資。除了是區塊鏈和大數據技術專家之外,劉毅還有着生物學的研究背景,這或許正是他能從「進化」角度出發對區塊鏈進行思考的重要原因。

請關注「應用治理」,這是 DApp 的阿喀琉斯之踵劉毅,Random Capital 合夥人,清華大學碩士,區塊鏈和大數據技術專家。20 年多種資本市場投資經驗,比特幣早期投資者

區塊鏈通過「信任最小化」降低交易成本

問:在你看來,目前去中心化應用(DApp)的發展遇到了什麼瓶頸?

劉毅:爲什麼這麼多年智能和約平臺上沒出現真正的去中心化應用,很重要的原因是這些應用不能被修改。應用本身不能修改、不能演進的話,就無法被「進化」驅動,也就不會帶來什麼革命性的東西。我們做互聯網應用或者手機應用,幾周就要對應用做一次升級,去增強功能或者適應新的需求。

此外,所有的程序都會有 bug,bug 不能修復就會帶來一系列嚴重的問題,甚至會導致整個應用的失敗。

問:不過我們看到也存在一些修改應用的方法?

劉毅:是的,但在區塊鏈上,我們必須以去中心化治理的方式對應用進行修改。

區塊鏈創造的是一個高效的市場,一個交易協議,用這個協議去參與交易的話,能夠降低交易成本。交易成本是最核心的一個概念,人類的經濟活動,包括互聯網、比特幣、區塊鏈,它們帶來的革命都可以用降低交易成本來解釋。

去中心化應用是用加密技術實現的交易協議,它夠降低交易成本中最大的一部分——信任成本。或者我們叫「信任最小化」,交易的參與者只需要信任整個加密協議網絡,不需要信任交易對手。

而「治理」就是修改、完善加密協議的過程。治理是必須的,否則加密協議就只能是僵死的。但如果治理是中心化的,加密協議就會跟中心化互聯網巨頭的業務沒有區別;只有治理是去中心化的,才能最小化信任。

問:怎麼理解「交易成本」?

劉毅:交易成本有很多種,從找到交易對手,到跟他討價還價,到決定完成交易,到簽署合同,到執行交易,到發生爭議後的解決方法等等。爲了完成這筆交易,會發生多種類型的交易成本。

貨幣的每一次更新換代都是因爲新的替代品能夠降低交易成本,這裏最主要的是支付成本。支付成本本身也很複雜,它包括把貨幣帶到交易現場交給你,你來鑑別這個貨幣的真僞,然後再把這個貨幣帶離交易現場。

紙幣代替鑄幣是降低支付成本,鑄幣代替貴金屬貨幣也是,因爲鑄幣的一個銀錠就是一兩,你不用稱也不用剪,這就降低了支付成本。從紙幣到數字貨幣,從數字貨幣到密碼貨幣,也都是在降低支付成本。

問:密碼貨幣是如何降低交易成本的?

劉毅:比特幣早期用例一個是跨國轉賬、跨國支付,一個是暗網交易。在這兩類交易裏,它都有非常明顯的支付成本的優勢。在後一種交易裏,比特幣還能降低交易成本中的隱私暴露的成本。

所以,比特幣發展起來並不是因爲它是一個投機品,而是它在特定的交易場景裏就是一個更好的貨幣。它代表的是第一代的密碼貨幣。

問:區塊鏈是怎麼降低交易成本的?

劉毅:以太坊來說,以太坊提供一個圖靈完備的虛擬機,你可以通過它實現可編程的密碼貨幣,這是第二代的密碼貨幣。

這種密碼貨幣不僅具備比特幣的優點,還能夠通過可編程和自動執行這些特性,降低信任成本,而信任成本一直是交易成本里特別大的一部分。

比如你參加某個募資,打了以太到智能合約後,並不會擔心得不到代幣,因爲智能合約裏寫定了,你只需要相信以太坊和這個合約就可以。

除了那種一手交錢一手交貨、而且你能鑑定貨幣質量的簡單交易以外,你都要在交易中一定程度的信任對方,或者說你要承擔交易對手風險。

這個風險本身就是成本。如今在有效市場裏所有的風險都可以被定價,風險大其實就相當於你投入的成本高。如何降低這個風險?只能找成名已久的大的公司交易,相信這個運營實體。

這帶來的問題就是中心化。比如你要去納斯達克上市,你就只能找高盛、摩根士丹利這幾大投行,它們已經把這個業務給壟斷了,其他的小玩家進不來,小玩家提供不了信任。

這時候它們作爲中介就會不斷地去擠壓兩邊的利潤,把自己的利潤最大化,但你沒有辦法去把它給幹掉,因爲在它壟斷的情況下,你沒有其他方式去產生信任、創造信任。

這其實就是區塊鏈要解決的最大的一個問題,就是去中心化、信任的最小化。從經濟學角度來說,信任最小化纔是區塊鏈存在的最重要的意義。

問:區塊鏈是如何做到信任最小化的?

劉毅:智能合約就是一個協議,它是由以太坊保證執行的,只要你相信以太坊,信任這個協議,你就可以相信這件事,而不需要去相信交易對手方,這就做到了信任的最小化。

你爲什麼相信以太坊?因爲以太坊是去中心化的運作方式,你相信任何一個個體或組織都不可能去控制以太坊。比如某個智能合約募集到了 20 億美元,它能拿出 10 億美元去賄賂以太坊,把這個合約給改掉嗎?是不可能的,這就是我們信任以太坊的基礎。

那你爲什麼相信智能合約?因爲它是可驗證的。

不過這種可驗證性帶來了矛盾:要想可驗證,就不能修改、不能升級應用;不能修改應用限制了應用自身的創新和發展;可一旦修改應用,又會破壞其可驗證,沒法最小化信任。這就是去中心化應用的阿喀琉斯之踵。

智能合約平臺上的應用修改方法

問:那麼現在大家是如何解決去中心化應用的修改問題?

劉毅:其實有程序員提出了用 delegatecall() 這種模式繞開智能合約不能被修改的限制,實現應用的可修改、可升級。我在後邊介紹這種方法。

因爲智能合約不能被修改,目前比較多的做法就是去做一個新的智能合約,讓大家遷移到這個智能合約裏來。

比如 Augur 的版本 2 跟版本 1 就是相互獨立的兩套智能合約。版本 1 市場會在 2019 年 9 月 15 號被關閉,用戶如果在版本 1 上創建延續到 9 月 15 號之後的預測市場,就要受影響。

這會給直接或間接使用 Augur 的用戶帶來不便,還有可能造成部分用戶的財產損失,以及喪失一部分網絡效應。

你還會發現 Augur 版本 1 到版本 2 的升級間隔了將近 1 年時間,但其實有很多早已發現的 bug 要解決,以及新增的功能要上線。但因爲升級就會傷筋動骨,所以不可能頻繁升級,不可能快速迭代。

這種升級方式還有一個很大的問題就是依賴於用戶對項目方的信任。Augur 是知名項目,融資規模大,用戶對項目方會比較信任,不會太過擔心新的智能合約的信任問題。

但是有些應用是小團隊開發的,甚至是由匿名開發者開發,類似 Augur 這樣的升級幾乎不可信,新版本的合約無法繼承老版合約的網絡效應,一切需要從零開始。

問:delegatecall() 模式是如何實現對應用的修改的?

劉毅:delegatecall() 是一個函數,我們可以用一張圖來說明。圖中方框都是智能合約,用戶對該應用的交易請求是發給代理合約 Proxy 的,Proxy 沒有業務處理邏輯,它的作用是把這個請求轉發給實際的處理合約 V1,數據則存到專門的存儲合約 Key-value store 上。

請關注「應用治理」,這是 DApp 的阿喀琉斯之踵

代理合約保存着指向處理合約的指針,升級應用就是寫一個新的處理合約 V2,把代理合約的指針從指向 V1 變爲指向 V2,那麼 V1 就被廢掉了。這個變動的過程應用的使用者是感受不到的,因爲數據並沒有動。

現在以太坊上覆雜的智能合約幾乎全都採用這種模式開發,他們管這叫應用的「可升級性」,一些標準庫已經實現了這種模式。

問:delegatecall() 模式會破壞信任最小化嗎?

劉毅:會。delegatecall() 模式的缺點就在於它破壞了可驗證性。我看了某個智能合約代碼,認爲可以信任它,然後我就用了,但是用着用着你把裏邊的一些東西給改掉了,而且改的時候是不需要通知我的。

用戶要不要信任這樣的應用?有兩種情況。第一種是用戶通讀了智能合約,知道合約中哪些邏輯是可以被改變的,哪些邏輯是不可以被改變的。如果用戶認爲可以被改變的部分不影響對智能合約的信任,也就是說不管可變的東西怎麼變,都沒有破壞我們之間的約定,那信任還是可以延續的。

但這個信任門檻其實很高,因爲即使用戶能讀懂智能合約代碼,也不太可能說把裏面所有的邏輯分支都給理解清楚了。

這是我不喜歡這種可升級模式的原因,它把智能合約原本的可驗證性給破壞了,但又沒有帶來新的東西。

它最後其實又回到了中心化互聯網的老路上,就是相信智能合約後面的這個人或這個組織,這是用戶可以信任應用的第二種情況。

比如說 TUSD 這個合約,它是一個穩定幣,但它百分之百法幣儲備是受美國紐約金融局監管的,還定期由老牌審計所 Cohen & Co. 出審計報告。這樣的話你就可以相信它,而不用去關注它的智能合約是怎麼寫、怎麼升級的,它們的合約也確實是可升級的。

在 delegatecall() 模式下,要麼就是產生高的信任門檻,使用者要能看懂合約;要麼就是回到中心化信任的老路上,通過區塊鏈實現信任最小化的方式被破壞了。

以去中心化治理的方式修改去中心應用

問:如何才能在不破壞信任最小化的情況下,實現對應用的修改?

劉毅:其實已經有人在探索這條路了,比如說 MakerDAOAragon 等等,它們都是可升級的應用,但決定是否升級應用的不是某個公司或某個人,而是一個去中心化組織「DAO」。

我認爲只有採用 DAO 做治理的應用纔是真正的 DApp,去中心化的應用;其他的都是「VApp」,即可驗證的應用。

問:以太坊上的應用可以用 DAO 升級,爲什麼說以太坊不支持應用的去中心化治理?

劉毅:在智能合約平臺上以 DAO 的方式修改、治理應用會很費勁。

第一個問題是它是要先確定合約的什麼地方可以修改,什麼地方不可以修改的。如果 bug 出在不能修改的地方,或者需要修改原先認爲不需要修改的地方,那麼即使 DAO 中所有的利益相關人都同意修改,一樣改不了。這是智能合約本身的限制。

第二個問題是智能合約平臺本身是爲了開發可驗證應用的,它沒有提供跟 DAO、跟應用治理相關的基礎設施,也就是說,它無法實現應用的可編程的治理。

智能合約平臺開發的應用都存在着上述這兩個問題,但通過應用鏈開發的應用可以解決這些問題。

比如 MakerDAO,它通過 DAO 合約進行過多次投票來調整穩定費率,已經是以太坊上去中心化治理模式的典範。

但今年四月底當代碼審計發現投票合約存在漏洞,可能使用戶投票的 MKR 被永久鎖定時,只能是部署了一個新的投票合約,並需要呼籲用戶轉移老版本合約中的 MKR;而且投票合約是對治理規則的定義,但其本身的升級仍然是由項目方來決定的。

所以,因爲智能合約平臺的限制,這些 DAO 並不能做到真正的徹底的去中心化治理。它只能是在事先定義好的治理範疇中通過 DAO
有限治理,在該範疇之外的治理依然是回到了老路子上,是以中心化的方式來做的,並不能交由社區管理。

問:在 Polkadot 上是如何對應用進行修改的?

劉毅:Polkadot 上應用的處理邏輯是用 rust 語言寫的,它是編譯成一個 wasm 的可執行的二進制的文件,通過鏈上分發給節點。

我們現在約定了一個協議或應用,用 wasm 實現了,但如果有人做了一個提案,認爲應該改變某一個處理邏輯,或增加一個功能,或修改一個參數,那開發者們就可以按照這個提案去實現一個新的協議,用 rust 再寫一遍,然後大家在鏈上進行投票,決定要不要用這個協議換掉原來的。

只要大家投票通過,這個新的可執行文件 wasm 就會下載到所有的節點上,節點發現有新的版本,就會執行從鏈上過來的新版本。

應用更新的整個過程都是在鏈上自動完成的,而且不會產生分叉。所以我們說 Polkadot 實現的是可編程的全流程鏈上治理。

問:智能合約開發的應用和應用鏈的應用,在修改問題上的很大的一個區別似乎是後者是通過節點來完成修改和升級的,這有點像公鏈自身的升級方式?

劉毅:是的。不同的地方在於這種升級是通過 DAO 以鏈上治理的方式來執行的,但大多數公鏈自身的升級不是以鏈上治理的方式來完成的。

比如以太坊升級,是鏈下治理的方式,大家決定包含哪幾個 EIP,然後確定一個時間點,大家都把新的軟件換上。

如果我們做一個分類的話,就是以太坊不支持公鏈的鏈上治理,EOS 支持公鏈的鏈上治理,但它們都不支持應用的去中心化治理;Polkadot 支持應用的鏈上去中心化治理,Cosmos 目前只支持應用的鏈下去中心化治理。

問:爲什麼說 Polkadot 提供的是可編程的治理,是鏈上治理?

劉毅:Polkadot 鏈上的處理邏輯都是可執行程序。

你可以在 Polkadot 鏈上發起一個提案,比如調整一個關鍵參數,你把程序編譯好後放到鏈上,那麼首先,提案本身是可以編程的。

其次,投票治理的規則,包括誰有資格投票、投票時票數怎麼記、提案通過要滿足的條件等等,這些也都是程序定義的,是清晰確定的、自動執行的,大家跟隨流程去投票就可以。

如果投票結果滿足了通過提案的條件,這個提案的可執行程序就會通過鏈上自動地分發到各節點,節點發現有新的程序,就會調用 set_code 函數,在運行時覆蓋原程序,執行新程序。整個的過程都是自動執行的。

據我所知,Polkadot 是目前唯一能做到在運行中無分叉升級的區塊鏈。Cosmos 應該也會支持鏈上去中心化治理,但是目前沒有看到它的鏈上升級技術。

問:能不能理解成,第一,Polkadot 上的應用修改是想改什麼地方就可以改什麼地方,沒有限制;第二,Polkadot 平臺支持去中心化治理的可編程和自動化執行。這就解決了智能合約平臺上以 DAO 的方式治理應用時碰到的那兩個問題

劉毅:是的。

問:應用在被黑客攻擊後,如果該應用是支持鏈上去中心化治理的,是不是也能更好的解決問題?

劉毅:是的。比如黑客把錢拿走了,這筆交易是不能改了,但可以通過升級應用的方式把這筆錢凍結,甚至把錢從黑客的地址裏拿走。

這些都可以通過應用的鏈上治理達成,你只要寫成程序就可以實現。所以我們稱它爲可編程治理,這個空間是無限大的。

但到底什麼纔是最優的治理結構?這是我們面臨的問題,比如是否需要設置一個委員會,能夠做緊急處理,能夠快速地把黑客帳戶凍結。

如果能夠設計合理的治理機制,就能讓應用始終適應市場變化、自身進化的需求,應用就會變得越來越好,市場規模也纔有可能越做越大。

問:所以你覺得很多應用可能更適合基於應用鏈開發,而不是基於智能合約開發?

劉毅:對。區塊鏈上的應用有兩種信任最小化的方式。一種是基於合約的可驗證性,即智能合約不可修改產生的信任最小化;一種是基於合約的去中心化治理產生的信任最小化。

智能和約方式的應用要麼不去進化,這就阻礙了 DApp 創新潛能的釋放,但它如果進化,就會破壞信任最小化。不過這並不代表所有的應用都不適合用智能合約開發,治理是有代價的,對於有些應用而言,最好的選擇仍然是智能合約。

應用鏈方式的應用能夠實現可編程的、去中心化的治理,它通過 DAO 以鏈上治理的方式修改加密協議,同時不會破壞區塊鏈最重要的意義 —— 信任最小化。

一些隨想

和劉毅老師的對談足夠讓人重新思考「治理」這個既熱門,但對大部分人來說又顯得有些生疏的話題。

一方面,區塊鏈是一種提供信任的機制,它能夠做到信任的最小化;另一方面,區塊鏈提供給用戶的最終信任似乎遵循的是短板理論,它取決於木桶中最短的那一塊。

在區塊鏈技術經過了這些年的發展之後,目前階段顯現在我們面前的信任的短板也許是「治理」。提供去中心化的分佈式系統是一件事情,以去中心化的方式去治理這個系統是另一件事。

就像凱文·凱利在剛剛在中國的一次公開演講所說的一樣,他認爲區塊鏈的數學基礎是很容易被信任的,但是那些進行區塊鏈服務的企業還有組織也需要被信任,這種信任就是另外一種層面。

治理不僅包含對公鏈本身的治理,也包含對去中心化應用的治理,因爲後者也是信任鏈條上重要的一環。前者的重要性已經被大多數行業內人士注意到,但後者的重要性、以及如何用技術來支持這種治理似乎鮮少被討論,這可能是本文的意義所在。

這篇文章並不短,也不算好讀,謝謝你能看完。