作者:John Otander,以太坊核心開發(fā)人員;翻譯:xiaozou
這篇文章的靈感來自于以太坊常使人Vitalik在最近的Reddit AMA 中的回答。
Vitalik指出,適度提高GasLimit是合理的,Gas Limit已經(jīng)近三年沒有增加,這是該協(xié)議歷史上最長的時間,。Vitalik還做了一些簡單的計算表示將以太坊GasLimit提高到4000萬。
本文講述了為何說提高以太坊Gas Limit比較困難?提高以太坊Gas Limit帶來的風(fēng)險,以及相關(guān)解決方案。
1、Gas Limit(Gas限制)
Gas limit決定了一個區(qū)塊內(nèi)的工作完成量,因此決定了每個區(qū)塊可以執(zhí)行多少交易。提高gas limit將使以太坊能夠處理更高的交易吞吐量或更復(fù)雜的交易。一直以來,具體的gas limit設(shè)置受礦工/質(zhì)押者影響,并且多年來限額一直在增加。下圖來自etherscan.io,顯示了gas歷史用量(非常接近gas limit,所有限額增加都被市場消化掉了)。
2、風(fēng)險
現(xiàn)在提高gas limit涉及到幾個風(fēng)險。
(1)漏塊率
我在之前的文章中提到,叔塊率(uncle rate)是評估gas limit增加時討論最多的一個指標?,F(xiàn)在,在以太坊合并之后,再也沒有叔塊了。我們要想知道節(jié)點是否能很好地處理了當前的gas limit,唯一的方法就是看漏塊率。但這個指標是有瑕疵的,因為它只顯示當前供應(yīng)不足的節(jié)點。它并沒有提供給我們一個很好的指標來顯示gas limit的增加,而且它只顯示了平均情況,而不是在攻擊中可能發(fā)生的最壞情況。
(2)狀態(tài)大小
區(qū)塊18418786(2023年10月24日)的賬戶快照為10.33GB,存儲快照為76.59GB,因此整體狀態(tài)大致為87GB。區(qū)塊17419840(2023年6月6日)的狀態(tài)略小于80GB。這意味著狀態(tài)在4個月內(nèi)大約增長了7GB,也就是說每月增長約2GB。
如果我們使用87+(2*12*#年)來推斷,一年后的狀態(tài)將是111GB,五年后將是207 GB。這里的問題不在于大小。每個人都可以存儲這么多的數(shù)據(jù),但是訪問和修改這些數(shù)據(jù)卻會變得越來越慢。
這還只是快照,是一般狀態(tài)。Geth還需要以不同的形式存儲此狀態(tài),以便驗證狀態(tài)根。區(qū)塊18418786的另一種狀態(tài)存儲形式(trie節(jié)點)大約需要180GB。
因此,目前僅用于狀態(tài)存儲的總空間大小約為267GB。如果我們提高gas limit,狀態(tài)大小會增長得更快。
狀態(tài)增長的問題在于,與過去不同,我們沒有明確的途徑來移除狀態(tài)。沒有我們可以迅速實施的具體的狀態(tài)期限建議來讓我們擺脫不斷增長的狀態(tài)。
(3)歷史規(guī)模
在我2021年的一篇文章中曾提到,一個完整的geth節(jié)點大約為350GB(新修剪的)。大約三年過后,一個完整的geth節(jié)點(在pbss上)超過900GB。下圖顯示了交易的總累積量。從中很容易看出,交易量在三年內(nèi)增加了一倍多,從大約9.8億筆增加到超22億筆。
隨著L2的崛起,歷史規(guī)模已經(jīng)成為一個更大的問題,因為它們現(xiàn)在(在4844上線之前)存儲數(shù)據(jù)的方式是calldata。區(qū)塊18418786的塊體超過427GB,區(qū)塊17419840(同樣是4個月前)的塊體為339GB,這意味著4個月內(nèi)增長28GB,也就是說大約每月增長9GB。我們可以用427+(9*12*#年)來推斷這種增長,即一年后為535GB,五年后為967GB(再次假設(shè)為線性增長)。
希望在EIP-4844上線后,這種增長會放緩,屆時L2將停止使用CALLDATA來獲取數(shù)據(jù)可用性,并轉(zhuǎn)為使用幾周后到期的blob。
EIP-4444將解決歷史增長問題,因為全節(jié)點不再需要存儲所有歷史。實現(xiàn)EIP-4444需要一個可靠的網(wǎng)絡(luò)來檢索歷史,然后我們才能使全節(jié)點停止歷史數(shù)據(jù)服務(wù)。
(4)同步時間
Gas limit在很多方面都可以影響同步時間:
·完全同步變得很慢,一個geth節(jié)點需要一周多的時間才能完全同步鏈,其他客戶端已經(jīng)優(yōu)化了更好的完全同步模式。
·同步歷史數(shù)據(jù)比較慢。因為我們需要下載更多的數(shù)據(jù),所以同步歷史數(shù)據(jù)部分就會比較慢。
·快照同步狀態(tài)比較慢,因為我們需要下載的狀態(tài)更多了。
·快照恢復(fù)較慢。由于pivot point(樞軸點)在快照同步期間移動,因此我們在磁盤上有許多需要修復(fù)的不完整狀態(tài)。如果pivot移動更頻繁,并且每個塊有更多的更改,那么該修復(fù)階段就會變慢。
·由于節(jié)點需要通過更多的更改才能形成區(qū)塊頭,因此與鏈同步的速度會更慢。
(5)客戶端多樣性
構(gòu)建一個新的EL客戶端本身就是一項艱巨的任務(wù)。增加gas limit還有一個額外的缺點,那就是會使構(gòu)建客戶端并優(yōu)化以供主網(wǎng)使用變得更加困難。Geth已經(jīng)開發(fā)了10多年,進行了大量優(yōu)化??赡艽嬖谙喾吹挠^點,認為新客戶端可以借鑒現(xiàn)有客戶端,不再犯同樣的錯誤。
然而,我們已經(jīng)看到了兩個客戶端(用python編寫的Execution Specs和使用javascript編寫的EthereumJ)的主網(wǎng)困境。這也意味著現(xiàn)在使用某些語言編寫的客戶端行不通了。受限于語言開銷和代碼庫的成熟度,增加gas limit將讓一些客戶端掉隊。
我們在KZG中也看到了這一點,為了獲得所需的性能,大多數(shù)客戶端依賴于調(diào)用C-KZG(一個用C語言編寫的代碼庫),而不是使用用他們所選的語言編寫的庫。
(6)最差情況
在考慮gas limit時,我們不能只看一般情況。我們總是要考慮最差的情況。當然,當鏈處于平均負載情況下,節(jié)點可能會運行得很好,但是如果突然連續(xù)5個塊的磁盤I/O增加一倍會發(fā)生什么?
運行時間并不是我們需要考慮的唯一指標,如果攻擊者可以占用其他資源,如磁盤I/O、CPU時間或內(nèi)存,他們可能會迫使較低配置的機器脫機。特別是在以太坊合并后,在同一臺機器上運行兩個客戶端,攻擊其中一個客戶端可能也會讓另一個客戶端狀態(tài)不穩(wěn)定。在以太坊合并測試的早期,我們目睹過幾次這樣的情況:一個客戶端的內(nèi)存泄漏會導(dǎo)致整個系統(tǒng)崩潰。
另一個需要考慮的最壞情況是證明大?。╬roof size)。隨著gas limit的增加,兩個區(qū)塊之間可能發(fā)生的潛在狀態(tài)變化也會增加。這對前面討論的快照同步是有影響的,但它也會影響執(zhí)行層輕客戶端的證明大小?,F(xiàn)在這還不是什么大事,merkle-patricia tree(默克爾-帕特里夏樹)的證明太大了,無法通過網(wǎng)絡(luò)發(fā)送。但是,如果我們想要實現(xiàn)在同一臺機器上運行多個輕客戶端的交叉驗證思想,那么證明大小就會非常重要。
3、解決方案
我們就這么完了嗎?我們會一直保持30MGas的上限嗎?不是的!
在我2021年的一篇文章中,我為當時我們面臨的困境提出了解決方案。對于我們在2021年面臨的完全同步問題,geth實現(xiàn)了快照同步和快照。對于修剪和數(shù)據(jù)庫布局的問題,geth實現(xiàn)了PBSS。Txpool在處理高交易負載方面變得更加可靠,并且大部分MEV搶跑交易都轉(zhuǎn)移給了建設(shè)者。許多交易也轉(zhuǎn)移到了L2,這反過來又增加了主網(wǎng)交易的平均規(guī)模。
唯一沒有實現(xiàn)的解決方案是regenesis。多年來,人們的觀點發(fā)生了一些變化,大多數(shù)人似乎都傾向于將EIP-4444歷史期限作為歷史數(shù)據(jù)增長的短期解決方案。對于EIP-4444的發(fā)布,我們需要一個強大的歷史數(shù)據(jù)服務(wù)節(jié)點網(wǎng)絡(luò),這樣歷史就不會丟失,即使它不再被所有全節(jié)點存儲(順便說一句,大多數(shù)比特幣節(jié)點根本不存儲歷史數(shù)據(jù))。
我們至今仍然沒有找到一個體面的、現(xiàn)實的狀態(tài)期限方式。
正如你在上海升級之前看到的攻擊,有一些已知攻擊阻止了我們提高gaslimit。(據(jù)我所知)所有漏洞都已解決了。
在撰寫本文時,EIP-4844正在測試網(wǎng)上發(fā)布。該EIP將提高節(jié)點的存儲和I/O需求。在我看來,在嘗試任何類型的gas limit增加之前,等等看這一變化對主網(wǎng)的影響是最安全的做法。一旦L2轉(zhuǎn)向Blob交易,我們就應(yīng)該增加calldata成本(因為在我看來,與數(shù)據(jù)需要存儲的其他東西相比,calldata的價格被低估了)。這也可以作為L2使用blobspace的一個強制函數(shù)。
總之,我想提醒大家在考慮提高gas limit時要小心行事,因為它會影響節(jié)點的很多方面,有些影響會相對明顯。在相關(guān)討論中,考慮gas limit變化的長期和短期影響是非常重要的。