觀點 | Vitalik:Layer-1 短期求創新,長期求保守
把更多功能整合進基礎層區塊鏈(即所謂的”Layer-1“),還是放到區塊鏈之上的協議中(即所謂的”Layer-2“)使得建立和改進的工作無需動搖鏈本身,這是區塊鏈設計中權衡考量的重點。迄今為止,這種權衡在擴充套件方面的辯論中表現得最為明顯,增加區塊大小(以及 ofollow,noindex">分片 )是一方,而像 Plasma 以及狀態通道一類的 Layer-2 解決方案是另一方;某種程度上的區塊鏈治理問題也是如此,在損失/盜竊恢復事件中, the DAO 硬分叉 及其普遍化方案如 EIP 867 是一類,而 可撤回 ETH(Reversible Ether,RETH) 這樣的 Layer-2 方案是另一類。那麼哪一種方案是終極意義上來說更好的呢?那些瞭解我的人,或者視我為 無恥的中間派 的人,都知道我肯定會說,“兩者的的結合吧”。然而,從長期來看(in the long term),我確實認為,隨著區塊鏈變得越來越成熟, Layer-1 必將變得更穩定,而 Layer-2 將承擔起越來越多持續創新、迎接挑戰的重任。
箇中因由說起來還真不少。第一個原因是,在 Layer-1 上尋求解決方案要求在基礎層上進行持續的協議變更,而基礎層變更需要治理,而 迄今為止尚未得到證明的是:在長期中,高度“活躍”的區塊鏈治理可以持續進行且不會導致政治上的不確定性並塌縮為中心化 。
要在別的領域找一個例子的話,考慮 Moxie Marlinspike 的文章 為 Signal 的中心化及非聯合性質辯護 。一個公司,聲稱自己有權利為自己的關鍵業務控制一個自己生長於斯的生態系統;我們當然應該帶著懷疑主義的眼光來看待這份檔案,但我們還是可以從這些主張中受益。引用一些段落:
早期,我們對 Signal 做過最有爭議的事情,就是將它開發為一個非聯合服務(unfederated service)。我們開發的任何協議都不需要中心化;開發一個聯邦性質的基於 Signal 協議的訊息服務是完全有可能的,但我不再相信,開發一個競爭性的聯邦訊息服務是有可能的。
以及:
他們的反駁是,“這很蠢哎,如果沒有由第三方定義的互操作性協議,網際網路又能走多遠呢?”我想過了。有了 IP 的第一個生產版本之後,我們一直在嘗試切換到 IP 的第二個生產版本,然而二十年來收效甚微;在 1997 年我們有了 HTTP 1.1 版,然後就被困在那裡直到現在;類似的,SMTP、IRC、DNS、XMPP,無一例外都凍結在 90 年代後期。這就是我的回答,這就是網際網路走了有多遠:90 年代末,沒更多了。
雖然這已經將我們帶出好遠,但不可否認的是,一旦你將協議聯合化,就很難再做變更。而現在,在應用層,靜止不變的東西不能很好地適應這個生態系統不斷變化的世界……只要聯合意味著靜止而中心化意味著變化,聯合的協議就會變成需要變化的軟體客戶端中存在的麻煩,就像當前的情形一樣。
在這個時間點以及中期來看,很明顯的是:去中心化應用平臺、加密貨幣支付手段、身份系統、生於系統、去中心化交易所機制、拍賣、隱私保護方案、支援隱私保護的程式語言,以及絕大多數可以在區塊鏈上做的有趣東西,都是會出現重要且持續創新的領域。去中心化應用平臺通常需要不斷減少確認時間;支付手段也需要快速確認、低手續費、隱私保護以及其它內建的功能;交易所會以不同的規模出現在很多領域,包括 鏈上自動做市商 、 高頻分批拍賣 、 組合拍賣 等等。因此,將任何一種功能“整合”進基礎層區塊鏈會是個壞主意,因為它會產生很高的治理成本,平臺要不斷地針輪、實現以及協調新近發現的技術進展。因為同樣的理由,聯合性的訊息服務很難在不重新中心化的情況下起步,區塊鏈也需要在適應性活躍治理(並承擔風險)與落後於新出現的替代方案之間作出選擇。
即便以太坊有限程度的應用定製功能和預編譯,也已經看到了苗頭。不到一年以前,以太坊部署了拜占庭硬分叉,引入了促進 橢圓曲線 運算 的操作,這些運算是環簽名、ZK-SNARK 以及其它應用為使用 alt-bn128 曲線所必需的。現在,Zcash 和其它區塊鏈都正在向 BLS-12-381 轉化,而以太坊需要再次分叉才能跟上。部分是為了避免在未來遇上類似的問題,以太坊社群正在著手將 EVM 升級為 E-WASM ,一種更高效率的虛擬機器,使得我們可以大幅減少包含應用定製型預編譯的需要。
不過,除了上述基於預期技術發展速度的考慮,還有另一種偏愛 Layer-2 解決方案的主張: 有時候會存在不可避免、但又沒有全域性最優解決方案的權衡 。在以太坊 1.0 型別的區塊鏈中,這一點並不那麼明顯,因為存在普遍有效的確定模式(例如,以太坊的基於賬戶的模式)。但是,在分片的區塊鏈中就會突然出現一個在當前的以太坊上還不存在的問題:如何跨分片交易?也就是說,假設區塊鏈狀態被劃分為 A 和 B,很少甚至沒有節點同時處理 A 和 B,那麼系統該如何處理會同時影響 A 和 B 的交易呢?
現有的答案中 包括非同步的跨分片交易,這對轉移資產以及一些應用來說就足夠了,但對很多其它應用來說卻遠遠不夠。同步操作(例如:解決 火車與旅館問題 )可以聯絡到 跨分片 yanking ,不過這就要用上多輪的跨分片互動,會產生很高的延遲。我們也可以用 同步執行模式 來解決這個問題,但會伴隨著下列權衡:
- 系統在單個區塊中為同一個賬戶處理的交易不能超過 1 筆
- 交易必需提前宣告它會影響到的交易
- 如果交易只被它所影響的部分分片所接受,交易失敗的風險會很高(而且依然需要支付手續費!)
看起來,很有可能可以開發出一個更好的方案,但會更加複雜,而且很可能會遇上現有方案所沒有的限制。我們已知有些東西使得完美不能出現了;至少, 應用和某些型別的互動通過並行化來提高每秒吞吐量的前景,受到了 Amdahl’s law 嚴格的限制。
那麼,我們如何建立一個可以讓方案得到測試和部署的環境呢?Justin Drake 的想法提供了一個答案: Layer-2 執行引擎。 使用者可以傳送資產到一個“橋接合約(Bridge Contract)”,這個合約會(使用像 互動驗證 和 ZK-SNARKs 這樣間接的技術)計算一套替代性共識規則的狀態根(把它想成等價於 Layer-2 的“元協議” 如 Mastercoin/OMNI 以及比特幣區塊鏈上的 Counterparty ,就除了因為這是個橋接合約,這些協議能處理由底層協議定義的“基礎賬本”上的資產),並且這個合約還能處理退出,當且僅當該替代性規則集產生了一個退出請求。
注意,任何人都可以在任何時候建立一個 Layer-2 執行引擎,不同的使用者可以使用不同的執行引擎,而且使用者也可以快速切換執行引擎或回到基礎層。基礎區塊鏈不再需要顧慮於智慧合約執行的效率;它只需要變成一個數據供給層,附帶準圖靈完備的執行規則,使得所有 Layer-2 橋接合約可以建構在上面,並且支援在分片間傳輸狀態的基本操作(實際上,只有同質 ETH 的跨分片轉賬是充分的,但只消少許功夫就可以支援跨分片呼叫,所以我們沒準可以很好地支援這些操作),但不需要更加複雜的東西。同樣需要指出的是: Layer-2 執行引擎也可以有與 Layer-1 不同的狀態管理規則,例如:沒有儲存租金;所有東西都可能丟失,因為保證這些東西的持續是特定執行引擎的使用者的責任,如果使用者們失敗了,結果就只能儲存在特定執行引擎的使用者之間(譯者注:此處的意思疑為“保證注入 Layer-2 的資產可以退出到 Layer-1 是使用者而非底層的責任,如果使用 Layer-2 的使用者做不到,這些資產及其計算結果就只能儲存在使用者之間,而回不到 Layer-1”)。
從長期來看, Layer-1 不會在所有技術改進上積極地競爭;它只會提供穩定的平臺,使得 Layer-2 的創新能夠發生。 這是否意味著,比如說,分片是個壞主意,我們應該保證區塊鏈的規模和狀態足夠小,使得用了 10 年的老爺計算機,都可以處理每一個人的交易?當然不是! 即便執行引擎或部分或全部轉移到 Layer-2 上,對資料排序和可用性的共識認識一個高度可普遍化且必需的功能;想知道如果沒有 Layer-1 資料可用性共識時 Layer-2 執行引擎有多難弄,舉例而言, 請看 Plasma 研究中遇到的 困難 ,以及,Plasma 自然擴充套件成完全通用的區塊鏈的 困難 (編者注:中譯本見文末超連結《為什麼在 Plasma 上難以執行 EVM》)。並且,如果人們想要每秒輸入 100 兆位元組到一個系統中,出於可用性共識的目標,我們就需要每秒能處理 100 兆位元組的資料可用性共識演算法。
此外, Layer-1 始終可以在減少延遲(Latency)上做改進;如果 Layer-1 很慢,實現非常低延遲的唯一策略就是 狀態通道 (編者注:中譯本見文末《廣義以太坊狀態通道》),但它有較高的資本要求並且難以普遍化。狀態通道在延遲上永遠完勝 Layer-1 區塊鏈,因為狀態通道只需要一條網路訊息,但在那些狀態通道不能完美勝任的場景中, Layer-1 區塊鏈仍有潛力可以挖掘。
因此,另一個極端立場,即“區塊鏈基礎層可以真正絕對地最小化、既不必白費心機處理準圖靈完備的執行引擎、也不必糾結於超越單點處理能力的可擴充套件性”,同樣明顯是錯誤的。為使得基礎層強大到足以支援我們在上面開發應用,我們就必須有一定程度的複雜性,而當前我們連這種最低程度的複雜性也還沒有達到。我們也需要額外的複雜性,但我們應謹慎選擇以確保這些複雜性在最大程度上是通用的,而不是以那些兩年內就會因為人們失去興趣或更好的替代品出現而過氣的特定應用或技術為目標。
即便在未來,基礎層需要持續更新,尤其是當新技術(例如:高度成熟的 STARK)使我們能夠實現比以往更強大的效能時,今天的開發者也可以致力於讓基礎層平臺對這些潛在的提升保持最大限度的前向相容(forward-compatible)。所以,在 Layer-1 升級和 Layer-2 升級之間保持一定的平衡以持續提升可擴充套件性、隱私性和多功能性,看起來仍然是對的;即便, Layer-2 將隨時間推移承擔起越來越大的創新責任。
2018.08.29 更新:Justin Drake 向我指出了另一個某些新功能最好在 Layer-1 上實現的理由:那些功能是公共品(Public Good),所以沒法高效或可依賴地從功能專項使用費中得到投資,因此最好的方式是通過發放補貼或消耗的交易手續費中支付。一個可能的例子是安全的隨機數生成器。
原文連結: https://vitalik.ca/general/2018/08/26/layer_1.html
作者:Vitalik
翻譯&校對:Ajian