區(qū)塊鏈要想構(gòu)建Dapp生態(tài),要想走向主流人群,優(yōu)先要解決擴展性問題。但區(qū)塊鏈是去中心化的系統(tǒng),任何節(jié)點都可以自由加入,要在多樣化的節(jié)點快速達成共識,是非常困難的事情。那么,區(qū)塊鏈的真的無法擴展了嗎?雖然現(xiàn)在不能,但未來有希望。
第一篇比特幣論文是在2008年首次發(fā)布的。我對于區(qū)塊鏈技術(shù)潛力的激情也是從那時候開始建立起來的。
去中心化數(shù)字貨幣,一個曾經(jīng)遙不可及的目標,最終正在逐漸走向主流。它的自身價值是非常激動人心的,而我個人則對去中心化app的潛力感到更加興奮。金融交易,預測市場和資產(chǎn)管理平臺都飽含著巨大的潛力。
支撐它們的去信任系統(tǒng)是非常有趣的:身份驗證系統(tǒng),智能財產(chǎn),抵制審查的社會平臺,以及類似于DAO的自治結(jié)構(gòu)和監(jiān)管模型。最具顛覆性的用例也許還遠沒有被創(chuàng)造出來。
但是在可以預見的未來,這個夢想仍然只是夢想-雖然一些早期愛好者和企業(yè)家正在試驗構(gòu)建這類app,目前的工作仍然存在一個阻止這些app獲得成功的巨大缺陷:擴展性。區(qū)塊鏈,按照現(xiàn)在的情況來看,受限于它們的可擴展能力。
并不是說這個問題會永遠存在,但目前的確是這樣。事實上,我想證明這是目前區(qū)塊鏈技術(shù)所面臨的最大技術(shù)屏障之一。它已經(jīng)很快成為了社區(qū)和加密貨幣中的一個非常熱門的研究領(lǐng)域。
為什么區(qū)塊鏈無法擴展?
目前,所有的區(qū)塊鏈共識協(xié)議(如比特幣、以太坊、瑞波、Tendermint)都有一個極具挑戰(zhàn)性的限制:網(wǎng)絡中的每個全節(jié)點必須處理每筆交易?;貞浺幌聟^(qū)塊鏈固有的關(guān)鍵特性-“去中心化”-意味著網(wǎng)絡中的單個節(jié)點需要執(zhí)行每一筆交易并維護完整狀態(tài)的一份拷貝。
一個去中心化共識機制需要提供一些關(guān)鍵優(yōu)勢,例如容錯性、強安全性保證、政治中立性和真實性,因此需要犧牲一些可擴展性。區(qū)塊鏈能夠處理的交易筆數(shù)不可能超過網(wǎng)絡中單一節(jié)點的處理能力。
事實上,隨著網(wǎng)絡中節(jié)點數(shù)的增加區(qū)塊鏈變得更加孱弱了,因為節(jié)點間的延遲會隨著每個新增節(jié)點呈對數(shù)性增長。
在一個傳統(tǒng)數(shù)據(jù)庫系統(tǒng)中,擴展方案是增加更多的服務器(也就是算力)來處理增加的交易。在去中心化的區(qū)塊鏈世界,每個節(jié)點需要處理和驗證每筆交易,這就需要我們?yōu)榫W(wǎng)絡中每個節(jié)點增加更多的算力來進行加速。然而我們無法控制網(wǎng)絡中的每一個公共節(jié)點,這就讓我們陷入了困境。
最終,以去中心化方式運作的所有公開的區(qū)塊鏈共識協(xié)議在低交易吞吐量和高中心化程度之間進行了折衷。也就是說,隨著區(qū)塊鏈規(guī)模的增長,對網(wǎng)絡中全節(jié)點的存儲、帶寬和算力的要求也在增加。在某一時刻,它將變得極其笨重,唯一可行的是讓一小部分節(jié)點處理一個區(qū)塊-從而導致中心化風險。
為了能夠擴展,區(qū)塊鏈協(xié)議必須找出一種機制來限制驗證每筆交易所需要的參與節(jié)點數(shù),同時不損傷網(wǎng)絡的可信性以保證每筆交易都有效。這聽起來很簡單,但是在技術(shù)上非常困難。為什么呢?
1.由于每個節(jié)點不能夠驗證每筆交易,節(jié)點需要有一種統(tǒng)計和經(jīng)濟手段來確保其他區(qū)塊(那些它們不能親自驗證的區(qū)塊)是安全的。
2.必須有某種方法來保證數(shù)據(jù)的可用性。也就是說,即使一個不直接驗證區(qū)塊的節(jié)點認為該區(qū)塊是有效的,如果這個區(qū)塊的數(shù)據(jù)變得不可用了,將會導致網(wǎng)絡中沒有其他驗證者可以驗證交易或者生產(chǎn)新區(qū)塊,我們就卡死在了當前的狀態(tài)下。(有很多種原因會導致節(jié)點掉線,包括惡意攻擊和突然斷電)
3.交易需要被不同節(jié)點并行執(zhí)行以獲得可擴展性。然而,區(qū)塊鏈上的狀態(tài)轉(zhuǎn)換也包含一些無法并行(串行)的部分,因此我們在轉(zhuǎn)換狀態(tài)的過程中均衡并行性與效用時會面臨一些限制。
給我指標
那么這些可擴展性指標實際看上去是什么樣子呢?讓我們來看一看。
一個以太坊節(jié)點的最大理論交易處理容量是1000筆/秒。不幸的是,實際上遠遠達不到這個吞吐量,因為以太坊有“gas限制”,目前平均每個區(qū)塊的gas限制是6,700,000。
快速科普一下“gas”,如果你之前沒有聽過這種測量方式:在以太坊中,gas是一種測量算力消耗的方式,每一種操作都被指定了一個固定的gas(例如,獲取賬戶余額消耗400gas,創(chuàng)建一個合約消耗32,000gas,發(fā)送一筆交易消耗21,000gas等等)。
交易有一個“gas限制”字段來指定發(fā)送方想要購買的最大gas。因此,每個區(qū)塊的“gas限制”決定了有多少交易可以被打包進區(qū)塊,取決于區(qū)塊中每筆交易指定的gas限制。
以太坊的gas限制某種程度上和比特幣的1MB區(qū)塊大小限制類似,區(qū)別是以太坊的gas限制是由礦工動態(tài)設置的而比特幣的區(qū)塊大小限制則是硬編碼進協(xié)議中的。
以太坊的gas限制給每個區(qū)塊的網(wǎng)絡算力強加了一個軟頂:按照目前6,700,000的gas限制,每筆標準交易平均大約消耗21K的gas,可以算出每個區(qū)塊大約包含300筆標準交易。
目前的平均出塊速度是20秒,相當于最多每秒15筆交易(300/20=15)。如果包含復雜交易,這一數(shù)值將會更低(例如智能合約消耗的平均gas是50K,意味著每秒~7筆交易)。
如果同時考慮到以太坊網(wǎng)絡中的交易數(shù)量正在與日俱增,你會發(fā)現(xiàn)這是一個相當大的問題。從2016年第二季度到2017年第二季度,每天的交易數(shù)量從40K增加到了240K,達到了500%的年增長率。
此外,上個月的交易數(shù)量達到了每天440K筆的峰值!我們可以很快算一下,相當于每秒5筆交易。
哦,不。
類似的,比特幣,先不管每秒4000筆交易的理論限制,目前有每秒7筆小交易和3筆復雜交易的硬頂。
注意這些限制在私有鏈上并不存在。私有鏈實際上可以在以太坊或者比特幣上達到1,000筆/秒。
為什么?因為你在運行一個私有鏈,你有能力確保網(wǎng)絡中的每個節(jié)點都是高性能計算機并擁有很高的帶寬。對區(qū)塊鏈進行擴展,要求我們?yōu)槊總€節(jié)點增加更多的算力以變得更快。由于私有管理網(wǎng)絡可以控制網(wǎng)絡中的每個節(jié)點,他們可以這么做。
此外,由于你在一個私有網(wǎng)絡上,你可以線下處理一些線上的活動,比如確保每個參與的節(jié)點正在運行一個真實的節(jié)點。
我曾經(jīng)在以太坊上設計和實現(xiàn)了一種新的協(xié)議,親身經(jīng)歷并且進一步證明了可擴展性存在的問題。我個人非常沉迷于如何解決這個問題的研究、討論和和實驗。在本文余下的部分,我將描述一些社區(qū)中提出的用于解決可擴展性問題的方案。每一種都有獨特的優(yōu)勢和折衷。
事情的真相是:沒有一種方案能夠為解決可擴展性問題提供完美的答案。在現(xiàn)實中,每一種方案都可以為改善可擴展性前進一小步。如果把它們組合在一起,區(qū)塊鏈可擴展性的未來一片光明。
請注意本文的目標不是探討所有的技術(shù)難點或者討論每種方案的優(yōu)點。我的目標是讓你對我所知的一些方案有一個總體的了解(10,000英尺的視角)。如果讀者們有興趣,我可以在以后的文章中深入探討某些特定方案的細節(jié)。本文假設你對區(qū)塊鏈如何工作有一些基本的了解。
開始我們的分析。
方案
擴展區(qū)塊鏈是一個已知的挑戰(zhàn)并且多年來已經(jīng)成為了一個熱門的研究領(lǐng)域。特別的,如果你曾經(jīng)經(jīng)歷過比特幣社區(qū)多年的災難,你應該聽過兩種比特幣的特定擴展方案:SegWit和增大區(qū)塊到2MB。
這兩種方案的目標都是解決比特幣的特定問題:比特幣區(qū)塊鏈有一個內(nèi)建的1MB區(qū)塊大小的硬限制,從而限制了可以被打包進區(qū)塊的交易數(shù)量。
最終,比特幣面臨了處理和確認交易的延遲問題(有時候是幾小時甚至幾天)。類似的,正如我們在上一節(jié)所看到的,以太坊也在擴展能力上面臨局限。
直到我們找出擴展區(qū)塊鏈的方法,否則應用場景的增長速度和廣度都將受到限制。