區(qū)塊鏈分層結(jié)構(gòu)還需要怎樣的技術(shù)來(lái)支持
以太坊聯(lián)合創(chuàng)始人Vitalik Buterin在其最新發(fā)布的博文《基礎(chǔ)層和功能逃逸速度》中提到,“保持 layer 1簡(jiǎn)單,使用layer 2來(lái)彌補(bǔ)不足” 并不是解決區(qū)塊鏈可擴(kuò)展性和功能性問題的普遍答案,因?yàn)檫@種思路沒有考慮到layer 1區(qū)塊鏈本身必須要具有足夠的可擴(kuò)展性和功能性,否則所謂的layer 2協(xié)議只是可信的中介。在這篇文章中,Vitalik提出了“功能逃逸速度”的概念,他還表示,短期內(nèi)我們需要并行開發(fā)layer 1與 layer 2 ,而長(zhǎng)期則要更關(guān)注layer 2的開發(fā)。
(圖片來(lái)自:Flickr)
以下是譯文:
區(qū)塊鏈?zhǔn)澜缬羞@樣一個(gè)常見的思路:區(qū)塊鏈應(yīng)該是最簡(jiǎn)單的,因?yàn)樗鼈兪呛茈y改變的基礎(chǔ)設(shè)施,如果發(fā)生了破壞,便會(huì)導(dǎo)致巨大的危害,并且應(yīng)該以layer 2協(xié)議的形式在一層區(qū)塊鏈頂部建立相對(duì)復(fù)雜的功能,例如:狀態(tài)通道、Plasma、rollup等等。 Layer 2應(yīng)該是持續(xù)的創(chuàng)新地點(diǎn),而layer 1應(yīng)該是穩(wěn)定的,只有在緊急情況下才會(huì)有大的變化(例如為了防止基礎(chǔ)協(xié)議的密碼學(xué)被量子計(jì)算機(jī)破解,一次重大的突破性變化就是可以的)。
這種層分離的想法是非常好的,從長(zhǎng)遠(yuǎn)來(lái)看,我強(qiáng)烈支持這一想法。然而,這種思維忽略了一個(gè)重要的點(diǎn):雖然layer 1不能太強(qiáng)大,因?yàn)楦蟮墓β示鸵馕吨嗟膹?fù)雜性,因此會(huì)有更大的脆弱性,但layer 1也必須要足夠強(qiáng)大,這樣建立在其之上的layer 2協(xié)議才能是真正可行的。
一旦layer 1協(xié)議實(shí)現(xiàn)了某種程度的功能,我將稱之為“功能逃逸速度”,然后,是的,你可以在不進(jìn)一步改變基礎(chǔ)的情況下,在上面做任何其它事情。
而如果layer 1不夠強(qiáng)大,你可以談?wù)撚胠ayer 2系統(tǒng)來(lái)填補(bǔ)空白,但現(xiàn)實(shí)卻是,如果不重新引入layer 1試圖擺脫的一整套信任假設(shè),你是沒有辦法去構(gòu)建這些系統(tǒng)的。這篇文章將討論構(gòu)成“功能逃逸速度”的最小功能是什么。
一種編程語(yǔ)言
必須能夠在鏈上執(zhí)行自定義用戶生成的腳本。這種編程語(yǔ)言可以很簡(jiǎn)單,實(shí)際上不需要高性能,但它至少需要具備所需的功能級(jí)別,才能驗(yàn)證可能需要驗(yàn)證的任意內(nèi)容。
這一點(diǎn)很重要,因?yàn)橐獦?gòu)建在上面的layer 2協(xié)議需要某種驗(yàn)證邏輯,而這種驗(yàn)證邏輯必須由區(qū)塊鏈以某種方式執(zhí)行。
你可能聽說過圖靈完備性,外行一般會(huì)認(rèn)為,如果一門編程語(yǔ)言是圖靈完備的,那么它可以做任何計(jì)算機(jī)理論上可做的事情。一種圖靈完備語(yǔ)言編寫的任何程序,都可以翻譯成任何其它圖靈完備語(yǔ)言的等效程序。然而,事實(shí)證明,我們只需要一些稍輕的東西:可以限制為不帶循環(huán)的程序,或者保證在特定步驟中終止的程序。
富-有狀態(tài)性(Rich Statefulness)
這不僅關(guān)乎一門編程語(yǔ)言,如何將編程語(yǔ)言準(zhǔn)確地集成到區(qū)塊鏈中也很重要。如果一種語(yǔ)言被用于純粹的交易驗(yàn)證,那么它集成的方式就更為有限:當(dāng)你將幣發(fā)送到某些地址時(shí),該地址表示一個(gè)計(jì)算機(jī)程序P,該程序?qū)⒂糜隍?yàn)證從該地址發(fā)送幣的交易。也就是說,如果你發(fā)送一筆哈希為 h的交易,那么你將提供一個(gè)簽名S,然后區(qū)塊鏈將運(yùn)行 P(h, S),而如果該輸出為TRUE,那么該交易就是有效的。通常,P是密碼簽名方案的驗(yàn)證器,但它可以執(zhí)行更復(fù)雜的操作。注意,在這個(gè)模型中,P無(wú)法訪問交易的目的地。
然而,這種“純函數(shù)”的方法是不夠的。這是因?yàn)檫@種純基于函數(shù)的方法,不足以實(shí)現(xiàn)人們真正想要實(shí)現(xiàn)的多種layer 2協(xié)議。它可以實(shí)現(xiàn)通道(以及基于通道的系統(tǒng),如閃電網(wǎng)絡(luò)),但它不能實(shí)現(xiàn)其它具有更強(qiáng)特性的擴(kuò)容技術(shù),也不能用于具有更復(fù)雜狀態(tài)概念的附屬系統(tǒng),等等。
舉個(gè)簡(jiǎn)單的例子來(lái)說明純函數(shù)范式所無(wú)法實(shí)現(xiàn)的事情,考慮一個(gè)具有以下特征的儲(chǔ)蓄賬戶:有一個(gè)密碼密鑰k可以發(fā)起提款,如果其進(jìn)行了提款,則在接下來(lái)的24小時(shí)內(nèi),同一密鑰k可以取消提款。如果提款在24小時(shí)內(nèi)仍未取消,那么任何人都可以“闖入”這個(gè)賬戶,然后完成提款。其目的是,如果密鑰被盜,賬戶持有人可以防止小偷提取資金。竊賊當(dāng)然可以阻止合法所有者獲得資金,但攻擊對(duì)竊賊來(lái)說是無(wú)利可圖的,因此他們可能不會(huì)為此而煩惱(有關(guān)這種技術(shù)的解釋,請(qǐng)參閱原始論文)。
不幸的是,這種技術(shù)無(wú)法簡(jiǎn)單地通過純函數(shù)來(lái)實(shí)現(xiàn)。問題是:需要有某種方法將幣從“正常”狀態(tài)轉(zhuǎn)移到“等待取款”狀態(tài)。但是程序P無(wú)法訪問目的地!因此,任何可以授權(quán)將幣轉(zhuǎn)移到等待取款狀態(tài)的交易,也可以授權(quán)立即偷取這些幣,也就是說,P不能區(qū)分兩者的區(qū)別。在不完全釋放幣的情況下,改變幣狀態(tài)的能力,對(duì)許多應(yīng)用而言都是很重要的,包括 layer 2 協(xié)議。
Plasma本身符合這個(gè)“授權(quán)、終結(jié)、取消”的范式:從Plasma的退出操作首先必須要獲得批準(zhǔn),然后會(huì)有7天的挑戰(zhàn)期,并且在這個(gè)挑戰(zhàn)期內(nèi),如果挑戰(zhàn)者提供了正確的證據(jù),則退出就可以被取消。
Rollup也需要這個(gè)屬性:Rollup中的幣必須由一個(gè)跟蹤狀態(tài)根R的程序控制,如果某個(gè)驗(yàn)證器P(R, R‘, data) 返回TRUE,則從R更改為R’,但它只將狀態(tài)更改為R‘,在這種情況下,它不會(huì)釋放幣。
這種授權(quán)狀態(tài)變化,而不需要完全將所有幣設(shè)置在一個(gè)免費(fèi)賬戶的能力,就是我所說的“富-有狀態(tài)性”(rich statefulness)。
它可以有多種實(shí)現(xiàn)方式,有些是基于UTXO的,而沒有它,且不包括信任假設(shè)的情況下(例如,一組被集體信任的工作人員來(lái)執(zhí)行那些富狀態(tài)程序),區(qū)塊鏈就不足以實(shí)現(xiàn)大多數(shù)layer 2 協(xié)議。
注意:是的,我知道如果P可以訪問h,那么你可以將目的地地址作為S的一部分,并將其與h進(jìn)行比較,然后以這種方式限制狀態(tài)變化。但也有可能會(huì)出現(xiàn)一種編程語(yǔ)言資源太有限(或受到其他限制),從而無(wú)法真正做到這一點(diǎn)。令人驚訝的是,在區(qū)塊鏈腳本語(yǔ)言中,這種情況是經(jīng)常發(fā)生的。
充分的數(shù)據(jù)可擴(kuò)展性和低延遲
事實(shí)證明,plasma、通道以及其它完全鏈外的layer 2協(xié)議都有一些根本性的弱點(diǎn),這些弱點(diǎn)阻礙了它們完全復(fù)制layer 1的功能。我在這里詳細(xì)討論過這個(gè)問題;總結(jié)是,這些協(xié)議需要有一種方式,來(lái)裁決某些締約方惡意不提供其承諾提供數(shù)據(jù)的情況,而且,由于數(shù)據(jù)發(fā)布是不可全局驗(yàn)證的(除非你自己下載了數(shù)據(jù),否則你不知道何時(shí)發(fā)布數(shù)據(jù)),這些裁決游戲在理論上并不穩(wěn)定。
通道和Plasma通過增加額外的假設(shè),巧妙地繞過了這種不穩(wěn)定性,特別是假設(shè)對(duì)于每一個(gè)狀態(tài),都有一個(gè)對(duì)該狀態(tài)感興趣的參與者沒有被錯(cuò)誤地修改(通常是因?yàn)樗砹怂麄儞碛械膸牛?,因此可信任他們。然而,這遠(yuǎn)遠(yuǎn)不是通用的,例如,Uniswap這樣的系統(tǒng)就包含了一個(gè)大型的“中心”合約,它不由任何人擁有,因此它們不能有效地受到這種模式的保護(hù)。
有一種方法可以解決這個(gè)問題,那就是一種在鏈上發(fā)布少量數(shù)據(jù),但在鏈外執(zhí)行計(jì)算的layer 2協(xié)議。
如果數(shù)據(jù)被保證是可用的,那么在鏈外進(jìn)行計(jì)算就是可以的,因?yàn)榕袛唷罢l(shuí)正確計(jì)算,誰(shuí)錯(cuò)誤計(jì)算”的游戲,在理論上是穩(wěn)定的(或者完全可以被SNARKs或STARKs代替),這就是ZK rollup和optimisTIc rollup背后的邏輯。如果一個(gè)區(qū)塊鏈允許發(fā)布并保證相當(dāng)大數(shù)據(jù)量的可用性,即使其計(jì)算能力仍然非常有限,則區(qū)塊鏈可支持這些layer-2協(xié)議,并實(shí)現(xiàn)高水平的可擴(kuò)展性和功能性。
區(qū)塊鏈需要處理和保證多少數(shù)量的數(shù)據(jù)?好吧,這取決于你所要求TPS的程度。通過rollup方案,你可以將大多數(shù)活動(dòng)壓縮到每筆交易約10-20字節(jié),因此每秒1 kb就可以為你提供50-100 TPS。每秒1 mb 就可以為你提供50,000-100,000 TPS,依此類推。幸運(yùn)的是,互聯(lián)網(wǎng)帶寬繼續(xù)在快速增長(zhǎng),而且其增長(zhǎng)速度似乎并沒有像摩爾計(jì)算定律那樣在減慢,因此,在不增加計(jì)算負(fù)載的情況下增加數(shù)據(jù)的伸縮性,是區(qū)塊鏈可采取的一條擴(kuò)容路徑!
還要注意的是,重要的不僅僅是數(shù)據(jù)容量,還要考慮數(shù)據(jù)延遲(即具有較低的區(qū)塊時(shí)間)。像rollup這樣的Layer 2協(xié)議(或者說Plasma)僅在數(shù)據(jù)實(shí)際發(fā)布到鏈上時(shí)提供任何安全保證,因此,數(shù)據(jù)可靠地包含在鏈上(理想情況下為“最終確定”)所需的時(shí)間,是指Alice向Bob發(fā)送付款和Bob確信將包含此付款之間所需的時(shí)間?;A(chǔ)層的區(qū)塊時(shí)間,是為其包含的內(nèi)容而設(shè)置的延遲時(shí)間。這可以通過鏈上安全存款(又稱“bond”)來(lái)解決,但這種方法本身就不完美,因?yàn)閻阂夥娇梢酝ㄟ^犧牲一筆存款來(lái)欺騙無(wú)限數(shù)量的不同人群。
結(jié)論
“保持 layer 1簡(jiǎn)單,使用layer 2來(lái)彌補(bǔ)不足” 并不是解決區(qū)塊鏈可擴(kuò)展性和功能性問題的普遍答案,因?yàn)檫@種思路沒有考慮到layer 1區(qū)塊鏈本身必須要具有足夠的可擴(kuò)展性和功能性,否則所謂的layer 2協(xié)議只是可信的中介。然而,確實(shí)在某個(gè)階段,任何layer 1功能都可以復(fù)制到layer 2,在許多情況下,這樣做是一個(gè)改善可升級(jí)性的好主意。因此,短期內(nèi)我們需要并行開發(fā)layer 1與 layer 2 ,而長(zhǎng)期則要更關(guān)注layer 2的開發(fā)。