Vitalik 長文回顧:那些以太坊「沒有走過的路」

以太坊最大的挑戰來自於在兩個願景之間的平衡:一個重視安全和簡單純粹的區塊鏈,以及一個用於構建高級應用程序的高度性能和功能的平台。

作者:Vitalik,以太坊創始人

原標題:《The roads not taken》

翻譯:Mary Ma,吳說區塊鏈

以太坊開發社區在以太坊的早期階段做出了許多決定,這些決定對項目的發展軌跡產生了巨大的影響。在某些情況下,以太坊開發者有意識地做出決定,在我們認為比特幣存在問題的地方進行改進。在其他地方,我們正在創造一些全新的東西,我們只是必須想出一些東西來填補空白,但有很多東西可以選擇。還有一些地方,我們需要在更複雜和更簡單的東西之間進行權衡。有時候,我們會選擇比較簡單的東西,但有時候,我們也會選擇比較複雜的東西。

這篇文章將著眼於我記憶中以太坊的這些路線岔路口。許多這些功能在核心開髮圈內被認真討論過;有些幾乎沒有被考慮過,但也許真的應該考慮一下。但即便如此,我們還是有必要看看一個不同的以太坊會是什麼樣子,以及我們可以從中學到什麼。

我們是否應該採用更簡單的PoS 機制?

以太坊即將合併的Gasper PoS 機制是一個複雜的系統,但也是一個非常強大的系統。它的一些屬性包括:

  • 非常強大的單區塊確認:一旦交易被納入區塊,通常在幾秒鐘內,該區塊就會被最終確定,除非有很大一部分節點是不誠實的,或者有極端的網絡延遲,否則它是無法被逆轉的。

  • 經濟最終性:一旦一個區塊被最終確認,它就不能被逆轉,除非攻擊者能頂住損失數百萬ETH 被罰沒。

  • 非常可預測的獎勵:驗證者在每個epoch(6.4 分鐘)都能可靠地獲得獎勵。

  • 支持非常高的驗證器數量:與其他大多數具有上述特性的鏈不同,以太坊信標鏈支持數十萬個驗證器(例如:Tendermint 提供了比以太坊更快的最終性,但它只支持幾百個驗證器)

但是創造一個具有這些特性的系統是困難的。這需要數年的研究,數年的失敗實驗,通常需要大量的努力,最終的輸出相當複雜。

如果我們的研究人員不需要擔心那麼多的共識,有更多的空閒思考時間,那麼也許,只是也許,rollups 可以在2016 年被發明出來。這就引發了我們的一個思考:我們真的應該對我們的PoS 要求如此高的標準嗎?因為即使是一個更簡單和更弱的PoS 也會比PoW 的現狀有很大的改進。

許多人有一個誤解,認為PoS 本身就很複雜,但實際上有很多PoS 算法幾乎和中本聰PoW 共識一樣簡單。 NXT 的PoS 自2013 年以來就存在,本來也是一個現成的候選;雖然它存在一些問題,但這些問題很容易被修補,我們可以從2017 年,甚至從一開始就有一個合理可行的PoS。 Gasper 之所以比這些算法更複雜,只是因為它試圖完成的任務比它們多得多。但是,如果我們在一開始就不要好高騖遠,我們可以先專注於實現一套更有限的目標。

在我看來,從一開始實施PoS 是一個錯誤;PoW 對於擴大初始發行量分發和使以太坊更具可訪問性方面是有幫助的,並且能夠鼓勵愛好者社區。但在2017 年,甚至2020 年,改用更簡單的PoS,可能會導致更少的環境破壞(以及因環境破壞而產生的反加密貨幣心態),並有更多的研究人才可以自由思考擴展問題。我們最終會不會不得不花費大量的資源來製作一個更好的PoS 呢?我看還是會的,但現在看來,無論如何,我們最終都會這樣做。

分片的去複雜化

以太坊分片自2014 年開始研究以來,一直在朝著越來越不復雜的方向發展。首先,我們有內置執行和跨分片交易的複雜分片;然後,我們通過將更多的責任轉移給用戶來簡化協議,在跨分片交易中,用戶必須分別為兩個分片支付Gas 費用;接著,我們切換到以Rollup 為中心的路線圖,其中,從協議的角度來看,分片只是數據分片。最後,通過danksharding,分片費用市場被合併成一個整體,最終的設計看起來就像一個非分片鏈,但在這裡,數據可用性採樣能夠實現分片驗證。

但如果我們走的是相反的道路呢?實際上有一些以太坊的研究人員,他們深入探索了一個更複雜的分片系統:分片將作為鏈,會有分叉選擇規則,其中子鏈依賴於父鏈,跨分片消息將由協議路由,驗證器將在分片之間輪換,甚至DApp 將在分片之間自動獲得負載平衡。

這種方法的問題是:這些形式的分片在很大程度上只是想法和數學模型,而Danksharding 是一個完整的、幾乎可以實施的規範。因此,鑑於以太坊的情況和限制,在我看來,分片的簡化和去歧義化絕對是正確之舉。也就是說,更雄心勃勃的研究也有非常重要的作用:它確定了有前途的研究方向,即使是非常複雜的想法往往也有”合理的簡單”版本,這些想法仍然提供了很多好處,而且很有可能在未來幾年內大大影響以太坊的發展(甚至是二層協議)。

EVM 中功能的選擇

現實上,除了安全審計之外,EVM 的規範基本上在2014 年中期就可以推出。然而,在當時接下來的幾個月裡,我們繼續積極探索我們認為可能對去中心化區塊鏈真正重要的新功能。有些功能加進EVM 了,有些沒有。

  • 我們曾考慮增加一個POST 操作碼,但決定不這樣做。 POST 操作碼會進行異步調用,會在交易完成後被執行。

  • 我們曾考慮過添加一個ALARM 操作碼,但決定不這樣做。 ALARM 的功能類似於POST,只是在未來的某個塊中執行異步調用,允許合同安排操作。

  • 我們添加了日誌(logs),它允許合約輸出不觸及狀態的記錄,但可以被DApp 接口和錢包解釋。值得注意的是,我們也考慮過讓ETH 轉賬發出日誌,但決定不這樣做,理由是”反正人們很快就會轉到智能合約錢包”。

  • 我們考慮過擴大SSTORE 以支持字節數組,但由於擔心複雜性和安全性而決定不這樣做。

  • 我們增加了預編譯(precompiles),這是一種使用本地實現執行專用加密操作的合約,比在EVM 中執行要便宜得多。

  • 在上線後的幾個月裡,我們反复考慮了狀態租金(state rent),但從未包括在內。這實在是太複雜了。今天,人們正在積極探索更好的狀態過期(state expiry)方案,儘管無狀態驗證和提議者/構建者分離(PBS)意味著它現在是一個低得多的優先級。

如今來看,大多數不增加功能的決定都被證明是非常好的決定。沒有明顯的理由來增加一個POST 操作碼。 ALARM 操作碼實際上是很難安全實現的:如果1…9999 區塊中的每個人都設置了一個ALARM,在100000 區塊執行大量的代碼,會發生什麼?那個區塊會不會花幾個小時來處理?一些預定的操作會被推到後面的區塊嗎?但是如果這種情況發生了,那麼ALARM 還能保留什麼保證呢?字節數組的SSTORE 很難安全地做到,而且會大大擴展最壞情況下的見證大小。

狀態租金問題更具挑戰性:如果我們從第一天起就真正實現了某種狀態租金,以太坊就不需總是圍繞持久化狀態的正常化假設而發展。以太坊會更難構建,但它可能會更有擴展性和可持續性。同時,我們當時的狀態過期計劃確實比我們現在的要差得多。有時候,好的想法就是要花上幾年的時間才能達成,沒有更好的辦法。

LOG 的備選方案

LOG 可以通過兩種不同的方式來完成。

  1. 我們可以讓ETH 轉賬自動發出一個LOG。這將為交易所和許多其他用戶節省大量的精力和軟件錯誤問題,並將加速每個人對LOG 的依賴,這將有助於智能合約錢包的採用。

  2. 我們完全可以不需要LOG 操作碼,而把它變成一個ERC:會有一個標準合約,它有一個函數submitLog,並使用以太坊存款合約的技術來計算該區塊中所有日誌的Merkle 根。無論是EIP-2929 還是區塊範圍的存儲(相當於TSTORE,但在區塊之後被清除)都會使這個便宜。

我們強烈考慮過第一種方式,但拒絕了它。主要原因是,日誌只來自於LOG 操作碼,這更容易。我們還非常錯誤地預計大多數用戶會迅速遷移到智能合約錢包,這可以明確使用操作碼來記錄轉賬。

我們沒有考慮第二種方式,但回過頭來看,這其實也是一個選擇。第二種方式的主要缺點是缺乏一個快速掃描日誌的布隆過濾器機制(Bloom filter)。但事實證明,布隆過濾器機制太慢了,對DApp 來說並不友好,所以現在越來越多的人使用TheGraph 來進行查詢。

總的來說,這些方法中的任何一種都有可能優於現狀。不納入LOG 會使事情更簡單,但如果納入LOG,自動記錄所有ETH 的轉移會使它更有用。

今天,我可能會贊成最終取消EVM 的LOG 操作碼。

如果當前EVM 選擇了完全不同的路,會怎樣?

當初EVM 有兩條非常不同的路可以選:

  1. 使EVM 成為一種更高級的語言,具有變量、if 語句、循環等內置結構。

  2. 使EVM 成為某些現有虛擬機(LLVM、WASM 等)的副本。

第一條路從未被真正考慮過。這條路的吸引力在於,它可以使編譯器更簡單,並允許更多的開發者直接在EVM 中編碼。它還可以使ZK-EVM 的結構更加簡單。這條路的弱點是它會使EVM 代碼在結構上更加複雜:它不再是一排簡單的操作碼列表,而是一個更複雜的數據結構,必須以某種方式進行存儲。也就是說,我們錯過了一個兩全其美的機會:一些EVM 的改變可以給我們帶來很多好處,同時保持基本的EVM 結構不變:禁止動態跳轉,增加一些旨在支持子程序的操作碼(另見:EIP-2315),只允許在32 字節的字邊界訪問內存等等。

第二條路被建議過很多次,也被拒絕過很多次。支持它的論點通常是,它將允許程序從現有語言(C、Rust 等)編譯到EVM 中。反對的觀點一直是,鑑於以太坊獨特的限制,它實際上不會提供任何好處:

現有的高級語言的編譯器往往不關心總的代碼大小,而區塊鏈代碼必須大量優化以減少每一個字節的代碼大小。

我們需要虛擬機的多種實現,並嚴格要求兩個實現不能以不同方式處理相同的代碼。在我們沒有編寫的代碼上進行安全審計和驗證會更難。

如果虛擬機規範發生變化,以太坊將不得不始終與它一起更新,或者越來越不同步。

因此,EVM 可能永遠不會出現與我們今天所擁有的完全不同的可行路徑,儘管有許多更小的細節(跳轉,64 位vs 256 位等),如果它們能夠以不同的方式進行,將會帶來更好的結果。

ETH 供應是否應該以不同方式分配?

目前的ETH 供應量大致可以用Etherscan 的這個圖來表示:

目前大約有一半的ETH 是在以太坊公募中出售的,任何人都可以將BTC 發送到一個比特幣地址,最初的ETH 供應分配是通過一個開源腳本計算出來的。其餘的大部分基本也已通過挖礦產出。黑色部分的1200 萬ETH 標記為“other”,其實是預挖部分,在以太坊基金會和大約100 位以太坊協議的早期貢獻者之間分配的額度。

對於這個過程有兩個主要的批評:

  • 預挖以及以太坊基金掌管公募資金這兩件事,都不具備可信的中立性。一些收款人地址是通過一個封閉的過程人工挑選的,以太坊基金會必須被信任,不能通過貸款來進一步利用公募所得的資金,以獲得更多的ETH (我們沒有,也沒有人聲稱我們有,但即使是被信任的要求也冒犯了一些人)。

  • 預挖過分獎勵了非常早期的貢獻者,而留給後來的貢獻者的太少。 75%的預挖用於獎勵上線前貢獻者的工作,而在上線後,以太坊基金會只剩下300 萬個ETH。在6 個月的時間裡,為了生存而出售的需求使存量減少到100 萬ETH 左右。

在某種程度上,這些問題是相關的:希望盡量減少對中心化的看法促成了較小的預挖,但較小的預挖會更快地耗盡。

這並不是唯一的解決方法。 Zcash 則採用了一個不同的方法:區塊獎勵的20%固定分配給協議中硬編碼的一組接受者,這組接受者每四年重新協商一次(到目前為止,這種情況已經發生過一次)。這將更加可持續,但它會因為過於中心化而受到更嚴厲的批評(Zcash 社區似乎比以太坊社區更公開地接受更多的技術專家領導)。

一個可能的替代路徑是類似於今天在一些DeFi 項目中流行的”DAO from day 1″ 路線。這裡是一個可能的稻草人提議:

  • 我們同意在2 年內,從每個區塊獎勵中劃分2 ETH 投入到開發基金中。

  • 任何在以太坊公募中購買ETH 的人都可以為他們喜歡的開發基金分配投票(例如:”每個區塊獎勵中1ETH 給以太坊基金會,0.4ETH 給Consensys 研究團隊,0.2 個ETH 給Vlad Zamfir…”)

  • 被投票支持的接受者得到的發展基金份額等於每個人投票的中位數,按比例計算,總數等於每區塊2ETH(中位數是為了防止自我交易:如果你為自己投票,你什麼也得不到,除非你讓其他購買者中至少有一半人提到你)。

公募可以由一個法律實體來運作,承諾按照ETH 開發基金的相同比例來分配公募過程中收到的比特幣(或者燒掉,如果我們真的想讓比特幣玩家高興的話)。這可能會導致以太坊基金會得到大量的資金,非以太坊基金會的團體也得到大量的資金(導致更多的生態系統去中心化),所有這些都沒有破壞可信的中立性一絲一毫。當然,主要的缺點是,通証投票真的很糟糕,但務實地說,我們可以意識到,2014 年仍然是一個早期和理想化的時間,通証投票最嚴重的缺點在公募結束後很久才會開始發揮作用。

這樣做會不會是一個更好的想法,並樹立一個更好的先例?也許!儘管從現實的角度來看,即使開發基金是完全可信的中立的,今天那些對以太坊的礦工大喊大叫的人,很可能反而會對DAO 分叉開始加倍地大喊大叫。

我們能從這一切中學到什麼?

總的來說,有時我覺得以太坊最大的挑戰來自於在兩個願景之間的平衡:一個重視安全和簡單純粹的區塊鏈,以及一個用於構建高級應用程序的高度性能和功能的平台。上面的許多例子只是其中的一個方面:我們是擁有更少的功能而更像比特幣,還是擁有更多的功能而更適合開發者?我們是擔心讓開發資金變得更中立,更像比特幣,還是我們首先擔心的是確保開發者獲得足夠的獎勵,讓以太坊變得更好?

我個人的夢想是試圖同時實現這兩個願景。一個基礎層,其規範每年都比前一年小,以及一個以二層協議為中心,強大的開發者友好的高級應用生態系統。也就是說,要達到這樣一個理想的世界需要很長的時間,如果能更明確地認識到這需要時間,我們需要一步步地考慮路線規劃,可能會對我們有很大的幫助。

今天,有很多事情我們無法改變,但也有很多事情我們仍然可以改變,而且仍然有一條堅實的道路來改善功能和簡單性。有時這條道路是曲折的:我們需要先增加一些複雜性以實現分片,而分片又能在上面實現大量的二層可擴展性。也就是說,降低複雜性是可能的,以太坊的歷史已經證明了這一點。

  • EIP-150 使調用堆棧深度限制不再相關,減少了合約開發者的安全擔憂。

  • EIP-161 使“空帳戶”的概念與字段為零的帳戶分離開來。

  • EIP-3529 刪除了部分退款機制,使Gas 代幣不再可行。

醞釀中的想法,如Verkle 樹,甚至也能進一步降低複雜性。但如何在未來更好地平衡這兩種願景,是我們應該開始更積極思考的問題。

展開全文打開碳鏈價值APP 查看更多精彩資訊

Total
0
Shares
Related Posts