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