以太坊的發展去向深度分析

安全 以太坊 技術 智能合約 鏈聞研究院 2018-07-25

鏈聞 ChainNews:

本文就以太坊中存在的問題進行介紹,其實本文介紹的以太坊中的問題,同時也是所有區塊鏈網絡平臺需要解決的地方。以區塊鏈技術為基礎建立的網絡平臺,必須能夠對這些問題提出有效的解決方案,才有可能擁有長期的發展。

來源 | 南湖互聯網金融評論

作者 | 趙偉

一、共識機制

共識機制是維持以太坊網絡中交易信息記錄到區塊鏈中的保障,所以共識機制是以太坊中所有的交易活動以及智能合約順利執行的基礎。以太坊中的共識機制採用的是與比特幣相同的工作量證明(Proof of work),這種證明機制需要節點 [就是參與以太坊網絡的用戶] 通過耗費自己的「努力」來爭奪記賬權,然後獲得代幣獎勵回報。而這裡的花費的「努力」具體指硬件成本以及電力成本。工作量證明中,節點要在難度非常大的情況下猜出一個未知數,這個過程是依靠計算機完成的。如果計算機的性能越好,或者一個節點擁有的計算機越多(我們將這兩個統稱為算力資源),那麼其猜測的速度也就更快。另外,計算機在猜測的過程中還需要消耗大量的電量。因而,算力資源以及電力資源就成了維持以太坊中的共識機制必不可少的消耗。當參與以太坊網絡的用戶越多時,其消耗的資源量也就更大,這也就引發了這樣一個平臺是否一定需要消耗大量資源才能順利運行的思考。

與工作量證明對應,有一種叫做權益證明(Proof of stake)的共識機制。權益證明就是依據節點擁有的某種資源的量來決定話語權。而這個資源一般來說都是區塊鏈中的代幣持有量。也就是說,在每一輪要產生新的區塊時,對於不同的提議區塊(記錄同一段時間內的交易信息),各個節點對不同的區塊進行投票,最後得票最多的區塊獲勝。而作為回報,區塊提議人和投票人都能夠獲得一定量的代幣獎勵。

權益證明的最大優點就是避免了工作量證明中需要耗費大量資源的情況。事實上,從工作量證明機制轉為權益證明機制正是以太坊未來的計劃之一。雖然這樣做能夠避免資源浪費,但是也存在著一定的問題。比較突出的一個就是「無利害關係(Nothing at stake)」。我們說過,在權益證明機制中,節點通過對提議區塊進行投票,如果自己投的提議區塊最終勝出,那麼節點也能夠獲得投票獎勵。這時候,可能就會存在節點在每一輪中,為了增加自己獲得獎勵的機會,對多個候選區塊進行投票(投票是免費的),這樣的做法對共識機制的正常運行就產生了很大的影響。為了解決這個問題,採用權益證明機制的區塊鏈網絡平臺都提出了自己的解決方案,但是這些方案原理上都是一致的。

節點能夠在同一輪對多個提議區塊投票的原因主要是兩個,一個是為了獲得獎勵,另一個是投票沒有成本。這時候只需要破壞這兩個任意一個條件就能夠消除節點「不老實」的行為動機。很顯然,取消獎勵不現實的,因為共識機制的維持需要節點參與,節點的參與會消耗一定的電力和硬件成本,因而需要激勵機制。那剩下的就只能夠從投票成本上入手,即讓投票不再是免費的。節點為了獲得投票權,必須要繳納一定量的代幣作為保證金,當節點被發現作出多次投票的行為時,這個保證金將會被沒收。如果節點按正常情況行使自己的投票權時,這個保證金在一定時間後便能夠被贖回。

實際上,對於權益證明機制來說,由於有機會獲得獎勵的節點是本身就持有代幣資源的人,並且擁有代幣越多的節點獲得的獎勵也就越多。這使得我們又回到了一個歷史性的問題上:「富人更富(The rich get richer)」。我們甚至可以想象在一種極端的情況下,絕大多數的代幣資源都被一個節點擁有,那麼這個節點就佔據了話語權,成為了「獨裁者」。並且由於獎勵也都被這個節點獲得,使得其地位無法動搖。

二、吞吐量

吞吐量指以太坊處理網絡中交易的能力,其本質上是由共識機制決定的,因為對於任意一筆交易來說,獲得了共識便等於交易的完成,如果獲得共識的速度越快,那麼交易的處理能力也就越快。一般來說,我們使用每秒交易量(Transactions per second, TPS)來衡量網絡平臺的處理能力。

這裡需要說明的一點是,我們之前說過,以太坊處理的是智能合約 [更嚴謹的說法應該是以太坊虛擬機( Ethereum virtual machine,EVM)來處理智能合約,以太坊虛擬機存在於以太坊的客戶端中],那麼這裡為什麼不用處理智能合約的能力來評價其能力呢?這是由於真實的以太坊能處理的事情還很少。用智能手機來做對比的話,上個世紀九十年代末期的一個智能手機處理不了的事情,以太坊現在也沒有能力處理。現在的以太坊能夠處理的智能合約僅僅限於商業邏輯上的內容(「if this then that」,意思就是,如果什麼條件滿足,那麼就執行什麼)、驗證數字簽名(證明身份)等簡單的內容。所以我們這裡用每秒交易量來衡量其處理智能合約的能力。

回到吞吐量的內容,目前以太坊理論上支持的每秒交易量( TPS )為 25 (實際上達不到這個數字)。這相對於比特幣( TPS 為 7)已經有了很大提升。但是這仍然讓以太坊網絡擁擠不堪,要知道這和真正的商業級應用還有著幾個數量級上的差距。Visa 的 TPS 約 為 2000,而支付寶在高峰時期每分鐘處理的交易數量甚至達到了百萬筆。由於其背後的技術和平臺的不同,我們並不能簡單地將這幾個數字作對比然後決定誰好誰壞。但是從這個數字上能夠看出的一點是,要想滿足真正的商業級應用,以太幣必須解決其網絡吞吐量的問題。

對於網絡吞吐量的問題,以太坊在計劃中也給出了自己的解決辦法,主要包含兩個方面,一個是鏈下(Off-Chain)交易,另一個是分片(Sharding)。

為了幫助讀者較容易理解這兩個方法。我們現在假設以太坊是一家銀行,這家銀行只有一個實際存在的總部,而銀行能夠處理的事情就是為用戶提供存款與取款的服務。現在這家銀行面臨的問題就是隻有一家總部,所有的人都需要來到這個總部進行存款或者取款,由於用戶數量太多,銀行處理不了,用戶只能堵在銀行門口排隊等待。

鏈下交易

鏈下交易的意思是,對於排隊等待的用戶,由於這些用戶有著不同的存款與取款需求,現在將這些用戶匹配,用戶間自行交易。需要存款的用戶將自己的資金給需要取款的用戶,然後雙方將自行交易後的賬戶狀態提交。這樣對於銀行來說,本來是存款與取款兩筆交易,現在只需要更新雙方賬戶的餘額就行。對於銀行來說大大減小了業務壓力。這個解決方式與比特幣的閃電網絡十分相似。同時其可能存在的問題也與閃電網絡相似。

這個途徑中存在的一個很大問題是,當看到這麼多用戶的需求無法得到滿足時,就可能會出現專門提供這個服務的人,並試圖從中獲取報酬。也就是讓其他用戶都在他 / 她這裡處理存款或者取款的業務,最後再將處理完的用戶賬戶信息提交給銀行統一處理。最後銀行只需要對這些用戶的賬戶餘額更新即可。但是,對於提供這個服務的用戶來說,不知不覺中,其控制的賬戶以及資金規模就能夠達到很大規模,這意味著這個解決方式具有一定的中心化的趨勢。如何監督這個中心用戶,以確保其不會做出有害於用戶的行為?就算這個中心化的用戶能夠保始終提供正常的服務,保證整個以太坊網絡系統的運行,但是對於一個本意是建立去中心化網絡的以太坊,卻產生了一個或者多箇中心化的節點。這很顯然是有悖於其設計理念的。

分片

分片指將以太坊網絡中需要處理的交易分開處理。用銀行的例子理解就是,銀行多開設幾家分行,這樣便能夠很大地緩解只有一家總部的業務壓力。但是對於以太坊來說,與銀行系統不同的一點是,銀行可以將不同的分行的信息彙總得到所有用戶的賬戶信息。通過分片,實際上就是將以太坊的區塊鏈分成不同的「分鏈」,這樣做的結果是,實際上不存在類似於銀行總部一樣的「主鏈」了。以太坊網絡只有不同的分鏈存在,這樣引起的問題就是,對於不同的分鏈或者說分片上的用戶節點來說,如何進行交易?這也正是以太坊目前努力的方向,試圖解決由分片引起的不同分片之間的溝通交易問題,也就是說在採用這種方式解決網絡吞吐量問題的同時,由讓開發者以及用戶都覺察不到存在的溝通的問題。

除了不同分片之間的溝通問題以外,分片還會引起以太坊整體網絡的分散化。我們說過,以太坊目前的共識機制是工作量證明,工作量證明機制雖然消耗了大量電力資源,但是這同時也保證了以太坊區塊鏈的安全性。因為全網絡節點的算力共同維持著一條鏈的共識,這樣使得惡意攻擊者的攻擊成本巨大。但是一旦分片之後,隨著節點的分開,整體的算力也將分開。那麼每一個分片所擁有的算力都將不如之前的情況,這也就降低了維持每一條分鏈的共識算力支持,使得對於共識的攻擊成本較之前相比大大降低。

三、交易費用

用我們上面的銀行做類比的話,以太坊中的交易費用相當於在銀行排隊的例子中增加的一個插隊機制。也就是說,對於眾多排隊等待處理業務的用戶而言,如果繳納一定的手續費,那麼就能夠插隊提前辦理業務。在以太坊中,每一筆交易、智能合約的處理都需要繳納一定的手續費用,叫做「燃料(GAS)」。而這個燃料也正是以太坊中的代幣:以太幣。燃料主要有兩個用途,一方面以太坊網絡在執行智能合約的代碼時,系統需要消耗一定的燃料(這裡可以把這個燃料費類比於汽車的燃油); 其次,燃料的另外一部分由參與維持共識機制的節點獲取,作為生產區塊的另一部分獎勵。我們說過,節點在生產區塊的時候需要將等待確認的交易打包成區塊,然後進行解謎。在這個打包過程中,節點處於自身利益考慮,會優先將交易費用高的交易加入區塊中。因而付出更高的交易費用便意味著交易得到確認的速度更快。在這種“競爭”模式下,在沒有產生額外的價值情況下,智能合約的執行成本增加了。

當然,採用交易費用的設定主要有兩個目的,一個是防止智能合約的執行陷入無限循環,另一個是為了保護以太坊網絡的網絡資源不被濫用。第一,在以太坊中處理的智能合約是圖靈完備(Turing completeness)[關於圖靈完備的意思比較複雜,作為直觀的理解,讀者可以認為具有圖靈完備性的編程語言(正是以太坊中的情況),有能力解決一切可以計算的數學問題。而這樣的話,如果在編寫代碼的時候,其中包括無限循環的語句,那麼這個代碼的執行便會陷入無限循環。至於更嚴格意義上的含義,有興趣的讀者可自行查閱資料] 的,採用交易費用的機制,設定智能合約中代碼執行的步驟上限,能夠防止合約執行的時候陷入無限循環。其次,因為如果不存在交易費用的話,懷有惡意的人可能會向以太坊網絡發送大量沒有實際意義的交易請求,從而造成以太坊網絡的堵塞。特別是我們在上面說過,以太坊目前能夠處理交易的能力十分有限,這使得這樣的攻擊更加容易實現。這種佔據網絡資源,使得系統無法服務於有正常需求用戶的攻擊就是「拒絕服務器攻擊(Denial-of-service attack)」。

但是,如果我們換一個角度看待這個問題,交易費用的設定雖然在一定程度上限制了拒絕服務器攻擊的發生,但是另一方面似乎又具有加劇網絡擁堵的潛在可能。拿前段時間十分火爆的以太坊養貓為例,由於遊戲的火爆,許多玩家不惜付出更高的交易費用,使得以太坊網絡都被有關以太坊養貓的交易塞滿了,而其他用戶的轉賬等交易無法得到處理。這時候我們再回頭看一下拒絕服務器攻擊,我們可以假設這麼一種情況(即使可能性不高),攻擊者想對以太坊發動拒絕服務器攻擊,並需要為此付出很高的交易費用成本(當然還有硬件、電力成本),但是隻要他 / 她從這個攻擊中得到的收益更高時,攻擊就會發動。而又因為交易費用較高的交易總能得到優先處理,這就會導致這個攻擊一定會成功。所以從這個角度上講,交易費用的設定在一定程度上減少了拒絕服務器攻擊的動機的同時,也使得拒絕服務器攻擊一旦出現,就很容易造成網絡的擁堵。

四、治理(Governance)

區塊鏈網絡平臺的治理指對其日常運行的維護,對於偏離其正常運行軌道時的修復補救手段以及對整個網絡中的規則更新、修改等內容。關於這一點,以太坊奉行著自己的至高原則:「The code is law (代碼即法則)」。一旦代碼完成發佈後,沒有任何人能夠對其進行修改,對其運行造成干擾。因為在用代碼編寫的智能合約發佈後,會在全世界所有的以太坊網絡節點運行。導致以太坊硬分叉為現在的以太坊和以太坊經典的 The DAO 事件,正是由於這個原因。當時的現實情況是,人們眼睜睜地看著黑客利用 The DAO 的代碼漏洞,從當時價值 1.5 億美金的以太幣池中源源不斷地拿走資金,同時卻沒有任何辦法。造成 The DAO 攻擊事件的原因很簡單,就是因為其代碼中的一個條件判斷語句出了問題。當這個問題出現後,由於奉行「代碼即法則」,沒有人能夠對 The DAO 的代碼進行修改又或是停止其運行。

對於這樣的一個設計理念,不同的人具有不同的理解。但是不可否認的一點是,在 The DAO 事件出現以前,以太坊的運行並沒有出現絲毫問題,並且這件事情並不是由以太坊的漏洞造成的。真正造成問題的原因是在於開發 The DAO 的人員。對於這樣的原則,在「理想」情況下,即智能合約的編寫不會出現問題的情況下,確實能夠將整個系統透明準確地傳遞給每一個用戶,這在一個去中心化的網絡中能夠建立極大的信任。或許這也就是區塊鏈被認為是「重塑信任」的一個重要原因,是區塊鏈真正能夠實現「重塑信任」的重要手段。

但是我們不得不思考,在沒有人能夠保證所有的代碼,所有的智能合約都是按照其設計本意準確編寫的情況下,一旦出現預測之外的事情,如何對其進行治理和解決?從這個角度說,以太坊其實並不存在任何的治理機制,它只是將唯一的原則告訴了所有人。

五、智能合約

關於智能合約,除了我們剛剛說到的其在發佈之後便不可修改不可撤回的特性外,還有兩點語需要注意。第一點是支持智能合約編寫的語言,目前以太坊的智能合約基本上由 Solidity 語言編寫,除此之外還支持 Go, JavaScript, C++, Rust, Haskell。這一點相對於正處於開發階段並聲稱支持任意一種編程語言的區塊鏈網絡平臺(如 Cosmos 而言,對開發者來說或多或少是一個侷限性。第二點是關於智能合約的執行,上文我們說到智能合約是在以太坊區塊鏈網絡中執行的,這麼說不能說錯,但是更嚴謹一點的話,執行智能合約的是以太坊虛擬機,以太坊虛擬機存在於以太坊的客戶端中。對於任何想要加入以太坊網絡的節點來說,通過下載安裝以太坊客戶端就能夠加入網絡,而在下載的以太坊客戶端中都內置了以太坊的虛擬機,用於對智能合約的執行。其步驟上簡單來說就是將用代碼編寫的智能合約轉化為更低級的二進制語言,讓機器讀懂進而執行。

但是正如我們在共識機制中說到的,以太坊虛擬機目前能夠實現的功能和二十年前的智能手機並沒有太大差距。像現在我們日常使用電腦網絡儲存文件、發送郵件以及任何具有圖形界面的功能,以太坊暫時都是做不到的。如果僅限於轉賬領域,那麼目前以太坊虛擬機的功能已經足夠了,但是如果要實現更復雜的功能,那麼以太坊虛擬機仍然有很大的發展空間,而在引入新的功能的同時,隨之帶來的問題也是很大的挑戰。

六、總結

本文總結了目前以太坊區塊鏈平臺所面臨的幾個重要的問題。以太坊所採用的共識機制對環境並不友好,其改進的計劃中也存在著或多或少的問題;而共識機制又影響著以太坊網絡對於交易或者說智能合約達成共識的速度,從而又限制了以太坊的網絡吞吐量,而對此以太坊給出的解決計劃目前看起來似乎也並不是那麼「完美」;治理方面以太坊奉行的至高原則值得我們對人與代碼這個話題的思考;最後在智能合約方面,不管是其支持唯一的編寫語言,還是虛擬機能夠帶來的功能都限制著以太坊未來發展的空間。

儘管存在這些尚未解決的問題,但是以太坊卻是唯一一個大規模運行的區塊鏈網絡基礎平臺,從這個角度上說,以太坊確實也經受住了實際的考驗,至於未來的路,我們拭目以待。

更多精彩內容,關注鏈聞 ChainNews 公眾號(id:chainnewscom),或者來微博@ 鏈聞 ChainNews與我們互動!轉載請註明版權和原文鏈接!

相關推薦

推薦中...