原文鏈接: V神長文:我們能從以太坊的岔路口中學到什麼?
盤點現下加密圈中最令人期待的事請,肯定會有以太坊合併的一席之地,根據谷歌趨勢數據顯示,“以太坊合併”(Ethereum Merge)搜索量創歷史新高,此外,谷歌透露“權益證明”(PoS)、“以太坊2.0發布日期”等關鍵詞搜索量最近也均出現大幅上漲。這些數據足以看出加密人士對以太坊此次轉型道路的關注之高。當然這熱度並不會令人意外,畢竟以太坊的每一次道路決策都會在加密圈中掀起一陣浪潮,這次自然也是一樣。
以太坊發展至今仍舊屹立不倒,離不開每一個岔路口的合理決策。但有支持就會有質疑,就此次的以太坊合併而言,有些人就直接發出疑問: PoS機制出現在以太坊之前,為什麼以太坊從一開始不選擇PoS,而是到如今大費周章的進行轉型呢?
為了更好的解釋這一問題,V神帶來了關於以太坊道路選擇的解答,今天就讓我們一起跟著V神來看一下選擇不同道路的以太坊會是什麼樣子,以及我們可以從中學到些什麼。
作者:Vitalik Buterin
編譯:Corn
出品:鴕鳥區塊鏈
以太坊開發社區在以太坊早期階段做出了很多決定,這些決定對項目的發展軌跡產生了巨大的影響。在一些情況下,以太坊開發人員會有意識地在我們認為比特幣可能犯錯的地方進行改進。另外,我們正在創造全新的東西,我們需要想出一些東西來填補空白,當然有很多東西可以選擇。此外,我們還需要在更複雜和更簡單的東西之間進行權衡,有時候,我們會選擇比較簡單的東西,但有時候,我們也會選擇比較複雜的東西。
本篇文章將著重於以太坊經歷過的一些岔路口。以太坊的很多特徵在核心開髮圈內都被認真討論過,當然也存在幾乎沒有考慮過但是確實應該考慮的一些特徵。即便如此,我們還是有必要看看一個不同的以太坊會是什麼樣子,以及我們可以從中學到些什麼。
我們是否應該使用更簡單的PoS機制?
以太坊即將合併的Gasper PoS是一個複雜的系統,但也是一個非常強大的系統。它的一些屬性包括:
非常強大的單區塊確認——一旦交易被包含在一個區塊中,通常在幾秒內該塊就會被最終確認,除非大部分節點不誠實或存在極端的網絡延遲,否則是無法被逆轉的。
經濟上的確定性——一旦一個區塊被最終確定就無法恢復,除非攻擊者能夠成熟數百萬的ETH損失。
非常可預測的獎勵——驗證者在每個epoch(6.4分鐘)都能獲得獎勵。
支持非常多的驗證者數量——與具有上述功能的大多數其他鏈不同,以太坊信標鏈支持數十萬驗證者(例如,Tendermint提供比以太坊更快的最終確定性,但它只支持幾百個驗證者)。
但是創造一個具有這些特性的系統是困難的。這需要數年的研究,數年的失敗實驗,並且通常需要大量的努力,最終的輸出相當複雜。
如果我們的研究人員不必花費如此大的精力在研究共識上,大腦可以有更多的空閒時間,那麼也許,只是也許,Rollup可以在2016年被發明出來。這給我們帶來了一個問題:我們真的一定要對PoS有這麼高的標準嗎?我們的PoS,即使是更簡單和更弱的PoS版本也會比PoW現狀有很大改進,不是嗎?
許多人有一種誤解,認為PoS本身就很複雜,但實際上有許多PoS算法幾乎和中本聰PoW共識一樣簡單。我們本來可以從2017年開始,甚至從一開始就擁有一個運行良好的PoS。 Gasper比這些算法更複雜的原因很簡單,因為它試圖比這些算法完成更多的工作,但如果我們一開始要謙虛,我們可以先專注於實現一組更有限的目標。
在我看來,從一開始就進行PoS是錯誤的決策。 PoW有助於擴大最初發行的範圍,使以太坊變得可訪問,並鼓勵愛好者社區。但如果在2017年甚至2020年換成一種更簡單的PoS,可能會大大減少對環境的破壞(以及環境破壞導致的反加密心態),並有更多的研究人才可以自由地進行擴展。我們是否需要花費大量的資源來製作一個更好的PoS共識呢?是的。越來越多的跡象表明,我們最終一定會選擇一個更好的PoS共識。
分片的簡化
以太坊分片自2014年開始研究以來,一直在朝著越來越簡便的方向發展。首先,我們有內置執行和跨分片交易的複雜分片。然後,我們通過將更多的責任轉移給用戶來簡化協議(例如,在跨分片交易中,用戶必須分別為兩個分片支付gas費)。再然後,我們切換到以Rollup為中心的路線圖,從協議的角度來看,分片只是數據塊。最後,通過Danksharding,分片費用市場合二為一,最終的設計看起來就像一個非分片鏈,但在這裡,一些數據可用性採樣在幕後發生,以實現分片驗證。
但如果我們走的是相反的道路呢?實際上有一些以太坊的研究人員,他們深入探索了一個更複雜的分片系統:分片將會是鏈,會有子鏈依賴於父鏈的分叉選擇規則,跨分片消息會被協議路由,驗證器將是在分片之間轉換,甚至dapp也會在分片之間自動實現負載平衡!
這種方法的問題是:這些形式的分片在很大程度上只是思想和數學模型,而Danksharding是一個完整的、幾乎可以隨時實現的規範。因此,考慮到以太坊的環境和限制,在我看來,分片的簡化和去歧義化絕對是正確的舉措。也就是說,雄心勃勃的研究也有非常重要的作用:它確定了有前途的研究方向,即使是非常複雜的想法通常也有“相當簡單”版本,這些想法仍然可以提供很多好處,而且它很有可能在未來幾年對以太坊的協議開發(甚至是第二層協議)產生重大影響。
EVM中特性的選擇
實際上,除了安全審計之外, EVM的規範基本上是可以在2014年年中推出的。然而,在當時接下來的幾個月裡,我們繼續積極地探索我們認為對於去中心化應用程序區塊鏈來說可能非常重要的新特性。有的沒有考慮到,有的考慮到了。
我們考慮過添加POST操作碼,但最終決定反對。 POST操作碼將進行異步調用,該調用將在交易的其餘部分完成後執行。
我們曾考慮添加一個ALARM操作碼,但最終決定反對。 ALARM的功能與POST類似,只是在未來的某個塊中執行異步調用,允許合約安排操作。
我們添加了日誌(logs),它允許合約輸出不涉及狀態但可以被dapp接口和錢包解釋的記錄。值得注意的是,我們也考慮過讓ETH轉賬產生日誌,但最終決定反對——理由是“人們很快就會轉向智能合約錢包”。
我們曾考慮擴展SSTORE以支持字節數組,但出於對複雜性和安全性的擔憂,最終決定放棄。
我們添加了預編譯,這是一種使用本地實現執行專用加密操作的合約,gas成本比在EVM中執行要低得多。
如今看來,大多數不添加更多功能的決定都已經被證明是非常好的決定。沒有明顯的理由添加POST操作碼,ALARM操作碼實際上很難安全實現:如果塊1...99999中的每個人都設置一個在ALARM,在100000區塊執行大量代碼會發生什麼?該塊需要幾個小時來處理嗎?一些預定的操作會被推遲到後面的區塊嗎?但是如果發生這種情況,還有什麼保證ALARM可以保留呢? SSTORE對於字節數組很難安全地完成,並且會大大擴展在最壞情況的見證大小。
狀態租金問題更具挑戰性:如果我們實際上從第一天開始實施某種狀態租金,我們就不會讓智能合約生態系統圍繞持久狀態的規範化假設發展。以太坊將會更難構建,但它本來可以有更好的可擴展性和可持續性。與此同時,我們當時的狀態到期計劃確實比現在的要糟糕得多。有時候,好的想法需要數年時間才能形成,而且沒有更好的解決方法。
LOG的可選路徑
LOG可以通過兩種不同的方式來完成:
1、我們可以讓ETH轉賬自動發布一個LOG。這將為交易和許多其他用戶節省大量精力和軟件漏洞問題,並將加快每個人依賴日誌的速度,這將有助於智能合約錢包的採用。
2、我們完全可以不用LOG操作碼,而是把它變成一個ERC:會有一個標準的合約,它有一個submitLog函數,並使用以太坊存款合約的技術來計算該區塊中所有日誌的Merkle根。無論是EIP-2929還是塊範圍的存儲(相當於TSTORE,但在區塊之後清除)都可以使其便宜。
我們認真考慮過第一種,但最終決定反對這個方式。主要原因是簡單:日誌只來自LOG操作碼更容易。我們還非常錯誤的預計大多數用戶能夠快速遷移到智能合約錢包,這一過程可以直接地使用操作碼記錄轉賬。
第二種之前沒有考慮過,但如今回想起來,這其實一直是一個選擇。第二種的主要缺點是缺少用於快速掃描日誌的Bloom過濾器機制。但事實證明,Bloom過濾機制太慢,對dapp來說不太友好,所以現在越來越多的人使用TheGraph進行查詢。
總的來說,這兩種方法中的任何一種都可能優於現狀。保持LOG在協議之外會使事情變得更簡單,但如果它在協議內部,自動記錄所有ETH傳輸會使它更有用。
如今,我可能傾向於贊成最終從EVM中取消LOG操作碼。
如果EVM選擇了完全不同的路呢?
EVM可以採用兩種完全不同的自然路徑:
1、讓EVM成為一種高級語言,使用內置的變量、if語句、循環等結構。
2、使EVM成為一些現有VM(LLVM,WASM等)的副本
人們從未真正考慮過第一條道路。這條路徑的吸引力在於它可以使編譯器更簡單,並允許更多的開發人員直接在EVM中編碼。它還可以簡化ZK-EVM的構造。該路徑的缺點是,它會使EVM代碼在結構上更加複雜:它不是一行操作碼的簡單列表,而是一個需要以某種方式存儲的更為複雜的數據結構。也就是說,我們錯失了一個兩全其美的機會:在保持基本EVM結構基本不變的情況下,一些EVM的更改可以給我們帶來很多好處。
第二種方法被提出了很多次,也被拒絕了很多次。通常的說法是,它允許程序從現有的語言(C、Rust等)編譯到EVM中。反對的理由一直是,考慮到以太坊的獨特限制,它實際上不會提供任何好處:
來自高級語言的現有編譯器往往不關心總代碼大小,而區塊鏈代碼必須進行大量優化以減少每個字節的代碼大小
我們需要VM的多個實現,並且有一個硬性要求,即兩個實現絕不能以不同的方式處理相同的代碼。在我們沒有編寫的代碼上進行安全審計和驗證會更加困難。
如果VM規範發生變化,以太坊要么一直隨之更新,要么就會變得越來越不同步。
因此,對於EVM來說,可能永遠不會出現一條可行的路徑與我們今天所擁有的完全不同,儘管有很多小細節(跳轉、64位vs 256位等),但如果採用不同的方法,可能會產生更好的結果。
ETH的供應是否應該有不同的分配方式?
目前的ETH供應量大致可以用下圖來表示:
目前大約有一半的ETH是在以太坊公募中出售的,任何人都可以將BTC發送到一個標準化的比特幣地址,並且最初的ETH供應分配是通過一個開源腳本計算出來的,該腳本會掃描到比特幣區塊鏈的交易地址。其餘的大部分都通過挖礦獲得。黑色部分的1200萬ETH標記為“Other”,這其實是“premine”(預挖部分)——是在以太坊基金會和大約100位以太坊協議的早期貢獻者之間分配的額度。
對於這個過程有兩個主要的批評:
預挖以及以太坊基金會掌控公募資金這兩件事兒並不具備可信的中立性。一些收款人地址是通過一個封閉的過程人工挑選出來的,必須相信以太坊基金會並不會通過貸款來利用公募所得資金,以獲得更多的ETH(我們沒有,也沒有人宣稱我們有,但即使是完全信任的要求也會冒犯一些人)。
預挖過度獎勵了早期貢獻者,而獎勵留給後來貢獻者的太少。 75%的預挖用於獎勵發布前貢獻者的工作,而在發布後,以太坊基金會只剩下300萬個ETH。在6個月內,為了經濟生存而出售的需求減少到了大約100萬ETH。
在某種程度上,這些問題是相關的:盡量減少對中心化的舉措促成了較小的預挖,而較小的預挖則被更快的耗盡。
這並不是唯一的解決方法。 Zcash就採用了不同的方法:將區塊獎勵的20%固定分配給協議中硬編碼的一組接收者,這組接收者每四年重新協商一次。這本來可以持續下去,但它會因為過於中心化而受到更嚴厲的批評(Zcash社區似乎比以太坊社區更能公開接受更多的技術專家領導)。
一種可能的替代路徑類似於“從第一天開始就使用DAO”的路徑,目前在一些DeFi項目中很流行。下面是一個可能的稻草人提案:
我們同意在2年內,每個區塊的2個ETH的區塊獎勵將進入一個開發基金。
任何在以太坊銷售中購買ETH的人都可以為他們喜歡的開發基金分配方式投票(例如“每個區塊給以太坊基金會1個ETH,給Consensys研究團隊0.4個ETH,給Vlad Zamfir 0.2個ETH……”)。
被投票支持的接受者從開發基金中獲得的份額等於每個人投票的中位數,按比例計算,每個區塊的總數就等於2個ETH(中位數是為了防止自我交易:如果你把票投給自己你將會什麼也得不到,除非你能讓至少一半人提到你)。
該交易可以由一個法律實體來運營,該實體承諾將在交易期間收到的比特幣按照與ETH開發基金相同的比例進行分配(或者燒掉,如果我們真的想讓比特幣用戶高興的話)。這可能會導致以太坊基金會獲得大量資金,非以太坊基金會的團體也獲得大量資金(導致更多的生態系統去中心化),所有這些都不會破壞可信的中立性。主要的缺點當然是代幣投票真的很糟糕,但實際上我們可以意識到2014年仍然是一個早期和理想主義的時期,代幣投票最嚴重的缺點是在公募結束後很久才開始發揮作用。
這會是一個更好的主意並開創一個更好的先例嗎?可能是!儘管實際上即使開發基金完全可信中立,但如今對以太坊的預挖大喊大叫的人很可能已經開始對DAO分叉加倍的大聲疾呼。
我們能從這一切中學到什麼?
總的來說,有時候我覺得以太坊最大的挑戰來自於兩種願景之間的平衡——一個純粹而簡單的區塊鏈,它重視安全性和簡單性,另一個是用於構建高級應用程序的高性能和功能性平台。上面的許多例子只是一個方面:我們是擁有更少的功能,更像比特幣,還是擁有更多的功能,更適合開發人員?我們是擔心讓開發資金變得更中立並且更像比特幣,還是我們首先擔心的是確保開發人員獲得足夠的獎勵,讓以太坊變得更好?
我個人的夢想是嘗試同時實現這兩個願景——一個規範每年都比前一年更小的基礎層,以及一個以第2層協議為中心的強大的、對開發人員友好的高級應用程序生態系統。也就是說,實現這樣一個理想的世界需要很長時間,我們需要一步一步地思考路線圖,這可能會對我們有很大幫助。
現下,有很多事情我們不能改變,但也有很多事情我們仍然可以改變,並且仍然有一條可靠的道路可以改善功能性和簡單性。有時,這條路是曲折的:我們需要首先增加一些複雜性以啟用分片,而這反過來又在上面實現了大量的第2層可擴展性。也就是說,降低複雜性是可能的,以太坊的歷史已經證明了這一點:
EIP-150使調用堆棧深度限制不再相關,減少了合約開發人員的安全擔憂。
EIP-161將“空賬戶”的概念作為與字段為零的賬戶分離開來。
EIP-3529刪除了部分退款機制,並使gas代幣不再可行。
此外,正在醞釀中的想法,比如Verkle樹,可以進一步降低了複雜性。但未來如何更好地平衡這兩種願景是我們應該積極思考的問題。