Vitalik Buterin:為什麼我不擔心 EIP-1559 可變區塊容量
本文發布於ETH中文站,作者:Vitalik Buterin。
對 EIP-1559 的一種批評是:區塊大小是可變的,在 [0,25M] 的範圍內浮動而不再是固定的 12.5M gas limit,這使得客戶端需要處理加倍的負載。這個論點進一步演繹為,如果我們認為客戶端是可以處理這麼高的負載,那麼他們應該可以任何時候都處理這麼高的負荷,這樣我們倒不如放棄 EIP-1559 而直接做更有用的事------把區塊大小限制提升一倍。
這個想法背後的核心觀點是,大區塊的首要危害來自經由客戶端的那些最大區塊,而不是平均區塊大小。我認為這個想法是錯的 (因此 EIP-1559 對客戶端產生的風險並不會比固定 gas limit 的機制更高),以下是我的理由。
重溫:不馬上把 gas limit 提高到 100M 的理由有哪些?
三個理由:
1. 正常情況下的區塊處理時間會增加
從當前大約 400 ms 增加到約 3.2s,這會帶來很多負面後果:
非常高的叔塊率,導致中心化
除了電力最強的節點外,其他所有節點都難以保持同步
即使是電力最強的節點也需要更大量的資源消耗
短暫斷電 (比如你在手提電腦上運行一個節點,你需要把電腦從家裡移動到咖啡廳)後的重新同步前會有更長時間的延遲
2. 由於 DoS 攻擊,最壞情況下區塊處理時間會延長,從現在的 20~80 秒延長到可能 160~640 秒。
3. 存儲增長率會升高
從現在大約 50 GB/ 月上升到大約 400 GB/ 月,這會導致
同步速度慢很多
存儲要求高很多
更慢的磁碟處理速度,因為大型數據庫的訪問速度會慢於小型數據庫
請注意:理由 1 和理由 3 下的所有內容都只適用於長期正常使用情況,而不是受高峰影響。因此,如果要考慮高峰期的影響,關注理由 2 就夠了。
論據 1:EIP-2929 已經彌補了 EIP-1559 的不足
EIP-2929 對存儲訪問操作的 gas 成本進行了提升,已經把最壞情況 DoS 攻擊所需的 gas 消耗增加了 3 倍。這意味著 EIP-2929 與 EIP-1559 配合起來實際上是比現在在最壞情況下處理區塊所需消耗淨減少了 1.5 倍。
這裡很自然會問一個問題:"如果 EIP-2929 那麼好,為什麼不直接把 gas limit 調高到 25M 或 37.5M"?這個回答很簡單:理由 2 不是避免 gas 消耗提高的唯一原因。即使 DoS 問題可以被完全解決,理由 1 和理由 3 下的問題在可見的未來還會存在。因此,EIP-2929 給的額外鬆弛部分是不可以用以對區塊容量進行大幅提升。
論據 2:對於相同程度的 DoS 攻擊,短時間攻擊引起的峰值帶來的弊端遠比長時間攻擊帶來的要少
如果攻擊者對鏈發起攻擊,用區塊容量最大值(目標容量的 2 倍)的垃圾數據填充區塊,每個區塊的 gas 價格上漲 1.125 倍。這個漲幅是呈指數上升的:持續生成 5 個滿區塊(大約 65 秒)會使得 gas 價格上升 1.8 倍,而在 5 分鐘之後,gas 價格會上升 15 倍 (10 分鐘後是 225 倍)。為了維持攻擊,攻擊者必須按照這些瘋狂上漲的價格支付所有的交易費。因此,一次現實的攻擊可持續的時間大概是 5 分鐘。
如果客戶端收到這 5 分鐘內生成的區塊(每個需要 20~60 秒的處理時間)會發生什麼呢?很明顯,在這段時間鏈的處理速度會變得非常慢。會出現非常多短程分叉。事實上,分叉意味著攻擊者在攻擊後仍然可以以少量哈希算力(例如大約 20%)回滾鏈上交易。這是非常糟糕的情況。
但是,這比攻擊者可以維持一個小時甚至一天的攻擊要好得多。大多數的交易和其他服務現在等待確認的時間已經超過 5 分鐘,只有極其脆弱的服務才會被破壞,因為對它們來說需要 5 分鐘發送一筆交易太難了,而回滾或拒絕服務需要持續數小時甚至數天,就像 2016 年的上海攻擊事件一樣,會造成非常嚴重的後果。
因此,持續 5 分鐘達到 2500 萬 gas 的峰值比 2500 萬的 gas limit 風險低得多。
論據 3:短期峰值已經出現
工作量證明挖礦固有的泊松過程 (Poisson process) 就意味著區塊在發布時會存在隨機性。事實上,光是隨機性每週就會導致一次兩倍鏈容量的峰值,峰值持續五分鐘。
注意:這是由大量相同容量的區塊而不是相同數量的大容量區塊導致的,但據我所知,沒有證據或理由相信單個區塊的處理所消耗的 gas 是超線性增長的
因此,某種程度上使用峰值是一個已知數量,生態到目前為止還能忽略其影響。