「保持 Layer 1 簡單,使用 Layer 2 來彌補不足」 是解決區塊鏈可擴展性和功能性的好方法嗎?Vitalik 認爲短期內仍然需要並行開發 Layer 1 與 Layer 2 ,長期則可更關注 Layer 2 的開發。

原文標題:《Vitalik :區塊鏈分層結構尚存在缺陷,短期需並行開發 Layer 1 和 Layer 2》(Base Layers And Functionality Escape Velocity)
作者:Vitalik Buterin,以太坊聯合創始人
翻譯:灑脫喜
中文來源:巴比特

以太坊聯合創始人 Vitalik Buterin 在其最新發布的博文《基礎層和功能逃逸速度》中提到,「保持 Layer 1 簡單,使用 Layer 2 來彌補不足」 並不是解決區塊鏈可擴展性和功能性問題的普遍答案,因爲這種思路沒有考慮到 Layer 1 區塊鏈本身必須要具有足夠的可擴展性和功能性,否則所謂的 Layer 2 協議只是可信的中介。在這篇文章中,Vitalik 提出了「功能逃逸速度」的概念,他還表示,短期內我們需要並行開發 Layer 1 與 Layer 2 ,而長期則要更關注 Layer 2 的開發。


區塊鏈世界有這樣一個常見的思路:區塊鏈應該是最簡單的,因爲它們是很難改變的基礎設施,如果發生了破壞,便會導致巨大的危害,並且應該以 Layer 2 協議的形式在一層區塊鏈頂部建立相對複雜的功能,例如:狀態通道、Plasma、Rollup 等等。 Layer 2 應該是持續的創新地點,而 Layer 1 應該是穩定的,只有在緊急情況下才會有大的變化(例如爲了防止基礎協議的密碼學被量子計算機破解,一次重大的突破性變化就是可以的)。

這種層分離的想法是非常好的,從長遠來看,我強烈支持這一想法。然而,這種思維忽略了一個重要的點:雖然 Layer 1 不能太強大,因爲更大的功率就意味着更多的複雜性,因此會有更大的脆弱性,但 Layer 1 也必須要足夠強大,這樣建立在其之上的 Layer 2 協議才能是真正可行的。

一旦 Layer 1 協議實現了某種程度的功能,我將稱之爲「功能逃逸速度」,然後,是的,你可以在不進一步改變基礎的情況下,在上面做任何其它事情。而如果 Layer 1 不夠強大,你可以談論用 Layer 2 系統來填補空白,但現實卻是,如果不重新引入 Layer 1 試圖擺脫的一整套信任假設,你是沒有辦法去構建這些系統的。這篇文章將討論構成「功能逃逸速度」的最小功能是什麼。

一種編程語言

必須能夠在鏈上執行自定義用戶生成的腳本。這種編程語言可以很簡單,實際上不需要高性能,但它至少需要具備所需的功能級別,才能驗證可能需要驗證的任意內容。

這一點很重要,因爲要構建在上面的 Layer 2 協議需要某種驗證邏輯,而這種驗證邏輯必須由區塊鏈以某種方式執行。

你可能聽說過圖靈完備性,外行一般會認爲,如果一門編程語言是圖靈完備的,那麼它可以做任何計算機理論上可做的事情。一種圖靈完備語言編寫的任何程序,都可以翻譯成任何其它圖靈完備語言的等效程序。然而,事實證明,我們只需要一些稍輕的東西:可以限制爲不帶循環的程序,或者保證在特定步驟中終止的程序。

富-有狀態性(Rich Statefulness)

這不僅關乎一門編程語言,如何將編程語言準確地集成到區塊鏈中也很重要。如果一種語言被用於純粹的交易驗證,那麼它集成的方式就更爲有限:當你將幣發送到某些地址時,該地址表示一個計算機程序 P,該程序將用於驗證從該地址發送幣的交易。也就是說,如果你發送一筆哈希爲 h 的交易,那麼你將提供一個簽名 S,然後區塊鏈將運行 P(h, S),而如果該輸出爲 TRUE,那麼該交易就是有效的。通常,P 是密碼簽名方案的驗證器,但它可以執行更復雜的操作。注意,在這個模型中,P 無法訪問交易的目的地。

然而,這種「純函數」的方法是不夠的。這是因爲這種純基於函數的方法,不足以實現人們真正想要實現的多種 Layer 2 協議。它可以實現通道(以及基於通道的系統,如閃電網絡),但它不能實現其它具有更強特性的擴容技術,也不能用於具有更復雜狀態概念的附屬系統,等等。

舉個簡單的例子來說明純函數範式所無法實現的事情,考慮一個具有以下特徵的儲蓄賬戶:有一個密碼密鑰 k 可以發起提款,如果其進行了提款,則在接下來的 24 小時內,同一密鑰 k 可以取消提款。如果提款在 24 小時內仍未取消,那麼任何人都可以「闖入」這個賬戶,然後完成提款。其目的是,如果密鑰被盜,賬戶持有人可以防止小偷提取資金。竊賊當然可以阻止合法所有者獲得資金,但攻擊對竊賊來說是無利可圖的,因此他們可能不會爲此而煩惱(有關這種技術的解釋,請參閱 原始論文)。

不幸的是,這種技術無法簡單地通過純函數來實現。問題是:需要有某種方法將幣從「正常」狀態轉移到「等待取款」狀態。但是程序 P 無法訪問目的地!因此,任何可以授權將幣轉移到等待取款狀態的交易,也可以授權立即偷取這些幣,也就是說,P 不能區分兩者的區別。在不完全釋放幣的情況下,改變幣狀態的能力,對許多應用而言都是很重要的,包括 Layer 2 協議。

Plasma 本身符合這個「授權、終結、取消」的範式:從 Plasma 的退出操作首先必須要獲得批准,然後會有 7 天的挑戰期,並且在這個挑戰期內,如果挑戰者提供了正確的證據,則退出就可以被取消。

Rollup 也需要這個屬性:Rollup 中的幣必須由一個跟蹤狀態根 R 的程序控制,如果某個驗證器 P(R, R', data) 返回 TRUE,則從 R 更改爲 R',但它只將狀態更改爲 R',在這種情況下,它不會釋放幣。

這種授權狀態變化,而不需要完全將所有幣設置在一個免費賬戶的能力,就是我所說的「富-有狀態性」(rich statefulness)。

它可以有多種實現方式,有些是基於 UTXO 的,而沒有它,且不包括信任假設的情況下(例如,一組被集體信任的工作人員來執行那些富狀態程序),區塊鏈就不足以實現大多數 Layer 2 協議。

注意:是的,我知道如果 P 可以訪問 h,那麼你可以將目的地地址作爲 S 的一部分,並將其與 h 進行比較,然後以這種方式限制狀態變化。但也有可能會出現一種編程語言資源太有限(或受到其他限制),從而無法真正做到這一點。令人驚訝的是,在區塊鏈腳本語言中,這種情況是經常發生的。

充分的數據可擴展性和低延遲

事實證明,plasma、通道以及其它完全鏈外的 Layer 2 協議都有一些根本性的弱點,這些弱點阻礙了它們完全複製 Layer 1 的功能。我在 這裏 詳細討論過這個問題(譯者注:中文版在 這裏);總結是,這些協議需要有一種方式,來裁決某些締約方惡意不提供其承諾提供數據的情況,而且,由於數據發佈是不可全局驗證的(除非你自己下載了數據,否則你不知道何時發佈數據),這些裁決遊戲在理論上並不穩定。

通道和 Plasma 通過增加額外的假設,巧妙地繞過了這種不穩定性,特別是假設對於每一個狀態,都有一個對該狀態感興趣的參與者沒有被錯誤地修改(通常是因爲它代表了他們擁有的幣),因此可信任他們。然而,這遠遠不是通用的,例如,Uniswap 這樣的系統就包含了一個大型的「中心」合約,它不由任何人擁有,因此它們不能有效地受到這種模式的保護。

有一種方法可以解決這個問題,那就是一種在鏈上發佈少量數據,但在鏈外執行計算的 Layer 2 協議。

如果數據被保證是可用的,那麼在鏈外進行計算就是可以的,因爲判斷 " 誰正確計算,誰錯誤計算 " 的遊戲,在理論上是穩定的(或者完全可以被 SNARKsSTARKs 代替),這就是 ZK Rollup 和 optimistic Rollup 背後的邏輯。如果一個區塊鏈允許發佈並保證相當大數據量的可用性,即使其計算能力仍然非常有限,則區塊鏈可支持這些 layer-2 協議,並實現高水平的可擴展性和功能性。

區塊鏈需要處理和保證多少數量的數據?好吧,這取決於你所要求 TPS 的程度。通過 Rollup 方案,你可以將大多數活動壓縮到每筆交易約 10-20 字節,因此每秒 1 kb 就可以爲你提供 50-100 TPS。每秒 1 mb 就可以爲你提供 50,000-100,000 TPS,依此類推。幸運的是,互聯網帶寬繼續在快速增長,而且其增長速度似乎並沒有像摩爾計算定律那樣在減慢,因此,在不增加計算負載的情況下增加數據的伸縮性,是區塊鏈可採取的一條擴容路徑!

還要注意的是,重要的不僅僅是數據容量,還要考慮數據延遲(即具有較低的區塊時間)。像 Rollup 這樣的 Layer 2 協議(或者說 Plasma)僅在數據實際發佈到鏈上時提供任何安全保證,因此,數據可靠地包含在鏈上(理想情況下爲「最終確定」)所需的時間,是指 Alice 向 Bob 發送付款和 Bob 確信將包含此付款之間所需的時間。基礎層的區塊時間,是爲其包含的內容而設置的延遲時間。這可以通過鏈上安全存款(又稱「bond」)來解決,但這種方法本身就不完美,因爲惡意方可以通過犧牲一筆存款來欺騙無限數量的不同人羣。

結論

「保持 Layer 1 簡單,使用 Layer 2 來彌補不足」 並不是解決區塊鏈可擴展性和功能性問題的普遍答案,因爲這種思路沒有考慮到 Layer 1 區塊鏈本身必須要具有足夠的可擴展性和功能性,否則所謂的 Layer 2 協議只是可信的中介。然而,確實在某個階段,任何 Layer 1 功能都可以複製到 Layer 2,在許多情況下,這樣做是一個改善可升級性的好主意。因此,短期內我們需要並行開發 Layer 1 與 Layer 2 ,而長期則要更關注 Layer 2 的開發。

來源鏈接:vitalik.ca