編者按:3月29日,Vitalik Buterin發表文章《The roads not taken》,著眼于以太坊發展路上的各種猜想與落實路徑。我們有必要看看不同的以太坊可能是什么樣子,以及我們可以從中學到什么。

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

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

我們是否應該使用更簡單的PoS版本?

以太坊即將合并的Gasper PoS是一個復雜的系統,但也是一個非常強大的系統。它的一些特性包括:

  • 非常強大的單區塊確認——一旦交易被包含在一個區塊中,通常在幾秒鐘內該塊就會固化到無法恢復的程度,除非大部分節點不誠實或存在極端的網絡延遲。

  • 經濟上的確定性——一旦一個區塊被最終確定,如果攻擊者不得不懲罰并損失數百萬的ETH,就無法反轉它。

  • 非??深A測的獎勵——驗證者在每個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,分片費用市場合二為一,最終設計看起來就像一條非分片鏈,但在幕后發生了一些數據可用性抽樣魔術(data availability sampling magic)以進行分片驗證。

但是,如果我們走相反的道路呢?實際上有以太坊研究人員深入探索了一個更復雜的分片系統:分片將會產生鏈,會有子鏈依賴于父鏈的分叉選擇規則,跨分片消息將由協議路由,驗證者將是在分片之間輪轉,甚至應用程序也會在分片之間自動實現負載平衡!

這種方法的問題是:這些分片形式在很大程度上只是想法和數學模型,而Danksharding是一個完整且幾乎可以實現的規范。因此,考慮到以太坊的環境和限制,在我看來,分片的簡化和去野心化絕對是正確的舉措。也就是說,更雄心勃勃的研究也有一個非常重要的作用:它確定有前途的研究方向,即使是非常復雜的想法通常也有那些仍然提供很多好處的想法的“相當簡單”的版本,而且很有可能它將在未來幾年顯著影響以太坊的協議開發(甚至是Layer-2協議)。

EVM中的更多或更少的功能?

實際上,除了安全審計之外,EVM的規范基本上可以在 2014 年年中推出。然而,在接下來的幾個月里,我們繼續積極探索我們認為可能對去中心化應用程序非常重要的新功能。有的沒添加進去,有的添加進去了。

  • 我們考慮添加一個「POST」 操作碼,但決定反對。POST操作碼將進行異步調用,該調用將在其余事務完成后執行。

  • 我們考慮添加一個「ALARM 」操作碼,但決定反對。 除了在未來的某個塊中執行異步調用外,「ALARM」的功能類似于「POST」。

  • 我們添加了日志功能,允許合約輸出不涉及狀態但可以被 dapp 接口和錢包解釋的記錄。值得注意的是,我們還考慮過讓 ETH 轉賬發出日志,但最終決定不這么做——理由是“人們很快就會轉向智能合約錢包”。

  • 我們考慮擴展「SSTORE 」以支持字節數組,但出于對復雜性和安全性的擔憂而決定反對。

  • 我們添加了預編譯,這些合約使用本機實現執行專門的加密操作,其 gas 成本比 EVM 中的成本低得多。

  • 在推出后的幾個月里,狀態租金(state rent)一次又一次的被考慮,但從未包括在內。這太復雜了。今天,正在積極探索更好的狀態到期方案(state expiry schemes),盡管無狀態驗證(stateless verfication)和提議者/構建者分離意味著它現在的優先級要低得多。

今天來看,大多數不添加更多功能的決定已被證明是非常好的決定。沒有明顯的理由添加「POST」操作碼?!窤LARM」操作碼實際上很難安全地實現:如果區塊 1…99999 中的每個人都設置一個「 ALARM」 在區塊 100000 處執行大量代碼會發生什么?該區塊需要幾個小時來處理嗎?一些預定的操作會被推遲到以后的區塊嗎?但如果發生這種情況,那么還有什么保證「ALARM」可以保留呢?「SSTORE」對于字節數組很難安全地完成,并且會大大擴展最壞情況的見證大小。

狀態租金問題更具挑戰性:如果我們實際上從第一天開始實施某種狀態租金,我們就不會讓智能合約生態系統圍繞持久狀態的規范化假設發展。以太坊本來會更難構建,但它本來可以更具可擴展性和可持續性。同時,我們當時的狀態租金計劃確實比我們現在的要糟糕得多。有時,好主意需要數年時間才能得出,沒有更好的解決方法。

「LOG」的替代路徑

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

1,我們可以讓 ETH 轉賬自動發出一個「LOG」。這將為交易所和許多其他用戶節省大量精力和軟件錯誤問題,并加速每個人對日志的依賴,這具有諷刺意味的是,有助于智能合約錢包的采用。

2,我們完全可以不用「LOG」操作碼,而是把它變成一個 ERC:會有一個標準合約,它有一個函數submitLog,并使用以太坊存款合約中的技術來計算該區塊中所有日志的 Merkle 根。EIP-2929或區塊范圍的存儲(相當于「TSTORE」 但在出塊之后清除)都會使這個便宜。

我們強烈考慮過(1),但拒絕了。主要原因是簡單:日志更容易來自「LOG」操作碼。

我們還(非常錯誤地?。┢谕蠖鄶涤脩裟軌蚩焖龠w移到智能合約錢包,這可能已經使用操作碼顯式記錄了轉賬。

(2)沒有考慮過,但回想起來,它始終是一種選擇。(2) 的主要缺點是缺少用于快速掃描日志的 Bloom 過濾器機制。但事實證明,Bloom 過濾器機制對于 dapp 來說太慢了,對用戶來說是友好的,所以現在越來越多的人使用 TheGraph進行查詢。

總體而言,這兩種方法中的任何一種都可能優于現狀。保持「LOG」在協議之外會讓事情變得更簡單,但如果它在協議內部自動記錄所有 ETH 傳輸,它會更有用。

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

如果 EVM 完全不同怎么辦?

EVM 可以采用兩種非常不同的自然路徑:

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

2,使 EVM 成為一些現有 VM(LLVM、WASM 等)的副本。

第一條路徑從未被真正考慮過。這條路徑的吸引力在于它可以使編譯器更簡單,并允許更多的開發人員直接在 EVM 中編碼。它還可以使 ZK-EVM 結構更簡單。該路徑的弱點在于它會使 EVM 代碼在結構上更加復雜:它不是一個簡單的連續操作碼列表,而是一個必須以某種方式存儲的更復雜的數據結構。也就是說,錯過了兩全其美的機會:一些 EVM 更改本可以給我們帶來很多好處,同時保持基本 EVM 結構大致原樣:禁止動態跳轉并添加一些旨在支持的操作碼子程序( ban dynamic jumps and add some opcodes designed to support subroutines 另見:EIP-2315),只允許在 32 字節字邊界上訪問內存,等等。

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

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

  • 我們需要 VM 的多個實現,并有一個硬性要求,即兩個實現永遠不會以不同的方式處理相同的代碼。在我們沒有編寫的代碼上進行安全審計和驗證會更加困難。

  • 如果虛擬機規范發生變化,以太坊要么總是隨之更新,要么越來越不同步。

因此,對于 EVM 來說,可能從來沒有一條可行的路徑與我們今天所擁有的完全不同,盡管有很多較小的細節(跳轉、64 位 vs 256 位等)如果完成的話可能會帶來更好的結果不同。

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

Etherscan的這張圖表大致代表了當前的 ETH 供應量:

今天存在的大約一半的 ETH 是在公開的以太坊銷售中出售的,任何人都可以將 BTC 發送到標準化的比特幣地址,并且最初的 ETH 供應分配是由一個開源腳本計算的,該腳本掃描比特幣區塊鏈以進行交易到那個地址。其余大部分已開采。黑色部分-標記為“其他”的 1200 萬 ETH,是預挖礦(premine),為分配給以太坊基金會和大約 100 名以太坊協議的早期貢獻者的。

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

  • premine以及以太坊基金會收到銷售資金的事實并不是可信的中立。一些收件人地址是通過一個封閉的過程手工挑選出來的,必須相信以太坊基金會不會借錢來回收收到的資金,以便將出售重新投入到出售中,以給自己更多的 ETH(我們沒有,也沒有人認真地聲稱我們有,但即使是完全信任的要求也會冒犯一些人)。

  • premine 過度獎勵了早期的貢獻者,而留給后來的貢獻者的太少了。75% 的 premine 在啟動前用于獎勵貢獻者的工作,而在啟動后,以太坊基金會只剩下 300 萬個 ETH。在 6 個月內,為了經濟生存而出售的需求減少到大約 100 萬 ETH。

在某種程度上,這些問題是相關的:盡量減少對中心化的看法的愿望導致了較小的預挖礦,而較小的預挖礦更快地耗盡了。

這不是事情可以完成的唯一方式。Zcash有一種不同的方法:固定 20% 的區塊獎勵分配給協議中硬編碼的一組接收者,并且每 4 年重新協商一組接收者(到目前為止,這種情況已經發生過一次)。這本來會更可持續,但它會因為中心化而受到更嚴厲的批評(Zcash 社區似乎比以太坊社區更公開地接受更多的技術領導)。

一種可能的替代路徑類似于當今某些DeFi 項目中流行的“從第一天開始的 DAO”路線。這是一個可能的易受攻擊的建議:

  • 我們同意在 2 年內,每個區塊獎勵中的 2 ETH 進入開發者基金。

  • 任何在以太坊銷售中購買 ETH 的人都可以指定他們對開發者基金的首選分配投票(例如,“每個區塊 1 ETH 給以太坊基金會,0.4 ETH 給 Consensys 研究團隊,0.2 ETH 給 Vlad Zamfir ……” )

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

銷售可以由一個法律實體進行,該實體承諾按照與 ETH 開發基金相同的比例分配銷售期間收到的比特幣(或者燒毀,如果我們真的想讓比特幣持有人高興的話)。這可能會導致以太坊基金會獲得大量資金,非以太坊基金會同樣也會獲得大量資金(從而建立更多的去中心化生態系統),所有這些都不會破壞可信的中立性。主要的缺點當然是代幣投票真的很糟糕,但實際上我們本可以意識到 2014 年仍然是一個早期和理想主義的時期,代幣投票最嚴重的缺點只會在銷售結束后很久才開始發揮作用。

這會是一個更好的主意并開創一個更好的先例嗎?可能是!盡管實際上即使開發基金完全可信中立,但今天對以太坊的預挖礦大喊大叫的人很可能剛剛開始對 DAO 分叉提出更大的反對聲音。

我們可以從這一切中學到什么?

總的來說,我有時覺得以太坊最大的挑戰來自于兩種愿景之間的平衡——一個重視安全性和簡單性的純粹而簡單的區塊鏈,以及一個用于構建高級應用程序的高性能和功能性平臺。上面的許多示例只是其中的一個方面:我們是功能更少但更像比特幣,還是功能更多但對開發人員更友好?我們是否非常擔心使開發資金可信地中立并更像比特幣,還是我們首先擔心的是確保開發人員獲得足夠的獎勵以使以太坊變得更好?

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

今天,有很多事情是我們無法改變的,但還有很多事情我們仍然可以改變,而且仍然有一條道路可以在功能性和簡單性方面得到充分的改善。有時路徑是曲折的:我們需要先增加一些復雜性以啟用分片,這反過來又在頂部啟用了許多Layer2可擴展性。也就是說,降低復雜性是可能的,以太坊的歷史已經證明了這一點:

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

  • EIP-161將“空賬戶”的概念作為與字段為零的賬戶分開的東西不再存在。

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

正在醞釀中的想法,如Verkle 樹,可以進一步降低了復雜性。但未來如何更好地平衡這兩種愿景是我們應該開始更積極思考的問題。