EIP-4844 作为 The Merge 之后以太坊最大的升级,吸引了全网足够多的目光。这次升级引入的 Blob 临时存储空间,相当于在为以太坊这列火车增加了侧挂车厢,在不影响火车原有运行状态的前提下,提供了更便宜的数据可用性空间。
Optimism、StarkNet、Arbitrum 等 Layer 2 网络都在短时间内支持了 EIP-4844,并获得了显著的降费效果,以下是 LXDAO 国库在 Optimism 上为贡献者发工资的交易,前后的 Gas 费竟然相差了 100 倍。
但在惊喜的同时,我们发现 StarkNet 作为 ZK Rollup 的代表,居然也获得了惊人的降费效果,从以前 Gas 消耗动不动就超过 1$ 的水平,也下降到了 0.01$ 。
想了解更详细的技术原理,欢迎大家进入 MyFirstLayer2 学习。
注:MyFirstLayer2 是一个由以太坊基金会支持、LXDAO 发起的 Web3 教育项目,旨在通过各种吸引人的教学方法,如文字、图片、动画和交互,帮助新人理解Layer 2的发展历史和基本概念。
因为 OP Rollup 和 ZK Rollup 对 DA 费用(Data Availability:数据可用性,包含对数据的存储和分发服务,以便让第三方取得希望获取的数据)的依赖程度不同。
OP Rollup 会将近期交易的所有细节,包括用户签名等信息,打包压缩后全部上传到一层网络。它不需要在一层网络进行太多的验算任务,几乎所有的成本都在使用一层网络的存储空间之上。
ZK Rollup 相比之下,对数据拥有更高的压缩率。比如它可以抛弃用户签名数据,依靠零知识证明来确保交易合法;并且不需要打包所有交易细节,只需将状态的变化打包上传。
举个例子,在二层网络上,有 100 个用户在 USDC / USDT 交易对进行了交易,每次交易用户以及 Swap 合约里的 USDC、USDC两种余额都会发生变化。对 OP Rollup 来说,就是 100 条交易、200个账户的 400 次余额变动;而对 ZK Rollup 来说,涉及用户余额变化部分的差异不大,但对 Swap 合约来说,它的 USDC、USDT 余额共计 200 次的变化就可以压缩为 2 次最终余额的变化,大大减小了数据体积。
了解了两者区别之后,大家的第一印象也许是 ZK Rollup 的 Gas 费会普遍比低,但实操过的同学们应该都知道,诸如 StarkNet、ZkSync 等 ZK Rollup 的 L2,其费用往往是显著高于 OP Rollup 的,特别是 StarkNet 的 STARK 技术路线比其他 SNARK 路线的 ZK Proof 体积更大,在各 L2 转账费用的排名里常常处于垫底位置。
ZK Rollup 没有一上线就将 OP Rollup 打得满地找牙的原因很简单,是因为它虽然对交易数据有更高的压缩率,节省了向一层传输数据的费用,但它需要在一层网络上验证零知识证明的合法性,增加了计算的费用。
而 Blob 只能降低存储部分的费用,对计算部分是没有任何帮助的,因此 ZK Rollup 能在 EIP-4844 上获得的好处是更少的,所以看到 StarkNet 从排名倒数的“后进生”进步到与全班第一名第二名同一水平线上,很难不让人惊掉下巴。
不得不说 ZK Rollup 的机制要远比 OP Rollup 的复杂,比如通过 Optimism: Batcher 合约在升级前后向主网打包数据的费用中,任何人都完全能理解为什么它的交易费用下降了两个数量级。
点击蓝字了解更多:
升级前最后一笔旧 Batch。
升级后第一笔新 Batch(包含 Blob 费用共 0.0011 ETH):
6 个 Blob 的费用(合计 0.00078 ETH)
但在探索 StarkNet Gas 费用的过程中,笔者却经历了相当大的困难,甚至遇到了多次剧情反转,这个探索的过程本身也极具启发性,让我们一起随着文章来重温一遍。
因為有了探索Optimism 降費秘密的經驗,我們很自然就想到,只需找到當初StarkNet 向主網提交資料的合約就可以了,這種重要合約肯定曾經在Etherscan 的Gas 消耗榜上有名,應該是不難找的,還沒適配Blob 的Scroll 至今還名列前茅掛在耀眼的頂端呢。
當我們搜尋StarkNet 關鍵字之後,會找到Operator、Core Contract、Memory Page Fact Registry 3個相關合約,但第三個看起來和儲存空間相關的合約,在接近兩年前就已經停止使用了。
所以我們只能看到 Operator 在不斷和 Core Contract 交互,並且不斷地更新最新的狀態。
並且如果我們翻到適合 Blob 的前後,發現 Operator 的 Update State 交易確實進行了升級,但都僅僅是指向另一個資料包的雜湊。甚至於後來的 updateStateKzgDA ,消耗的 Gas 反而變多了,完全無法解釋 StarkNet 降費的原因。
#後來的這個更新,只是一個KZG 多項式承諾,用來證明Blob 裡的資料和它對應的Batch 的資料包是對應的,也只是一個「狀態根(State Root)」。這個狀態根對應著記錄著二層網路所有合約所有狀態的“小帳本”,這個小帳本理論上也是存在於一層網路上的。
那麼問題來了,為啥只剩個根?那厚厚的小帳本上哪去了呢?
雖然第一次探索不太成功,但我們仍然能得到一些推論和猜想。看過MyFirstLayer2 的小夥伴一定知道Rollup 探討的核心問題就是DA 問題(數據可用性),而它們採用的方案都是將關鍵數據上傳到主網來解決數據可用性的問題,讓所有人都能輕鬆訪問到需要的數據。
OP Rollup 其實是簡單粗暴地把每一筆交易都壓縮打包上傳一層網絡,那麼其他人就可以透過解壓縮之後,Replay 每一筆交易來獲取到二層小帳本的全貌,以檢驗交易是否正確執行。
ZK Rollup 則不需要上傳全部交易細節,只需上傳State Diff(每個批次狀態變化的部分)即可,由零知識證明來確保所有交易已經在二層被正確執行。而其他人則可以透過 Replay 多次狀態變化的結果,來還原二層小帳本的全貌。
而且我們知道Blob 裡的資料對一層來說只是一串二進製文本,一層只保護Blob 裡資料的準確性而不驗證其合法性,一層的智能合約也無法讀取並驗證Blob 裡的內容,因此如果仍由一層來驗證ZK Proof,那ZK Proof 本身肯定不能放在Blob 裡,所以StarkNet 能夠有一定的降費效果,一定是把每個批次的State diff 放到Blob 了。
所以我們下面的任務顯然就是搞清楚,StarkNet 到底把 State diff 放在哪裡了?過去是放在哪裡的,現在究竟是不是放 Blob 裡面了。
此外,只能找到一個狀態根的現實也不禁讓人懷疑,是不是很早以前StarkNet 就悄悄把向主網上傳狀態變化的數據,改為由自己的DAC (數據可用性委員會)負責了,如果真的是這樣,那之前StarkNet 高昂的收費就完全沒有道理,只能解釋為…
相關連結:
https://layer2.myfirst.io/zh#2.4-rollup
所幸和@0xYandhii討論之後迎來了新的曙光,StarkNet 在通用型主網上線之前,第一個產品其實是StarkEX,包括去中心化衍生品交易所DYDX也是那個時期的產物。在主網上線之後,原先的產品沒有被放棄,而是轉而與主網共享一個驗證系統。
即 SHARP: Shared Proving and Verifying System 系統,然後我們找到了 SHARP Blockchain Writer、Starkware: SHARP Verifier 等相關合約。
開啟區塊瀏覽器查詢相關交易,可以發現SHARP Blockchain Writer 進行了以下4類操作:
Verify Merkle:驗證梅克爾樹
Verify FRI:Fast Reed-Solomon Interactive Oracle Proof of Proximity,用於確保提交的資料或計算結果遵循特定的規則或約束,而不需要揭示資料本身的內容。
Register Continuous Memory Page:在一個週期內上傳一百多次,註冊連續的記憶體空間,疑似是向一層網路寫入資料的部分。
Verify Proof And Register:一個週期一次,快則十分鐘,慢則一兩個小時,應該是攢夠足夠多的交易進行一個批次的驗證。
不難看出1、2、4 個步驟是與零知識證明相關的步驟,而第3 個步驟註冊記憶體空間顯然是向一層網路寫入資料的步驟,是最有可能存放State diff 的地方。
合理推測是那三個驗證步驟的費用在 Blob 升級前後沒有顯著變化,而第 3 個步驟的費用,應該能解釋 StarkNet 前後兩個數量級的降價效果。
於是筆者繼續翻區塊瀏覽器,在EIP-4844 前倒數第二個舊版本、倒數第一個版本,已經升級後的最新版本3 個時期各取一個驗證週期,統計4 個步驟消耗的Gas 如何。
結果如下,令人抓頭。
記憶體費用有下降一半,但從其在一整輪 ZK Proof 驗證過程中的費用佔比來說,這個 DA 下降的水平說明不了任何問題。
探索走到這裡幾乎就到了山窮水盡的一部,筆者感覺自己就像三體世界裡坐在大型粒子對撞機前的物理學家,每個腦細胞都在尖叫著: This doesn't make sense ! 我甚至去StarkNet 社區發了一篇帖子詢問,但也許是因為問題涉及太過複雜,英文社區也遲遲沒有人回應。
至此,我們還剩最後一個小Trick ,之前下載的交易數據csv 裡面,只有Gas 費消耗的ETH ,沒有Gaslimit 等信息,所以無法排除Gas單價波動對統計的影響。於是筆者寫了腳本將之前涉及的每一筆交易實際消耗的 GasUsed(Gaslimit 裡被使用掉的部分)統計了出來。
終於,曙光出現!可以看到在升級之前,註冊內存空間的交易其實是 2 筆一組發送的,一筆 Gas 是最低的 5 萬,而另一筆一般在 30 萬左右。
而升級之後,則幾乎所有的註冊記憶體交易都變成了 5 萬的低消耗交易。
上一次的奇怪結論很可能是我們取的樣本太少,正好那一次升級後的驗證週期裡,趕上了大段的主網Gas 暴漲的時期,使得維持時間比較久的上百次Register Continuous Memory Page 交易都花了更高的Gas,使得統計出來的結果產生了偏差。
按照這個思路我們重新整理了 3 個時刻的 GasUsed 數據,這回合理了許多。至此可以證實 Memory Page 確實在升級之後體積顯著縮小,這應該是存放 State Diff 狀態變化數據的地方,而升級之後這部分數據則轉移至了 Blob。
並且後續我們在 l2beat.com 上找到了 StarkNet 的技術示意圖,可以發現 State diff 確實如我們所料,是存放在 Memory Page 中的。
那麼最終,我們根據GasUsed 的數量計算(以目前隨機抽取的較小樣本量來寬泛估計),實際對StarkNet 來說L1DA 的費用大概有4 - 10 倍的縮小空間,略低於一個數量級。這也符合理論推演:在 EIP-4844 升級中,ZK Rollup 獲得的好處並不如 OP Rollup 那麼多。
經過以上的探索,我們終於理清了 StarNet 降費的原因和程度,其結論還是有點耐人尋味的。
可以明確StarNet 之前是把每一批次狀態變化的資料寫入一層網路的,現在則是將這部分資料放在了Blob 中,因此在註冊記憶體空間的行為中可以獲得略小於一個數量級的降價效果。
但StarkNet 從之前倒數第一第二的水平,躋身到與OP 系尖子生們一個水平的降費效果,從相對進步程度來說甚至吊打了全體OP Rollup,這麼顯然是不可能的。
那麼唯一合理的解釋就是--之前確實「心黑」收太高了。在STRK 代幣發行之前,StarkNet的所有開發,社區激勵都需要資金,除了燒投資人的錢之外,設置更高的L2 L1 Gas 差價可能是他們維系開發的方式之一,才造成了此前StarNet令人尷尬的Gas 費局面。
而現在STRK 代幣發行為他們帶來了足夠的流動資金和生態激勵手段,也就是時候讓Gas 回到合理的水平了,趁著這波Blob 升級把綁在腳上的沙袋一起拆下,其展現的降費效果確實驚艷了許多人。
OP Rollup 在升級之後,將原本儲存在以太坊主網 Calldata 裡的資料轉移到臨時儲存區之後,其實犧牲了一點點的安全性。
在此前,Calldata 空間的數據是永久儲存的,這意味著任何人都能從以太坊主網中獲取足夠的數據,來還原 OP L2 上當前的所有狀態。
但升級之後,Blob 的資料將會過期,如果全網沒有任何一個實體保存過去的 Blob 數據,那麼 OP L2 的歷史交易記錄有可能會遺失。雖然目前最新的二層網路狀態仍然能被保護-因為Blob 的保質期超過OP 的7-14 天挑戰期,所以每個Blob 在即將過期之前,它所對應的二層狀態仍然是可信的,這最新的十幾天的交易記錄滾動地維護著OP L2 的安全性。
ZK Rollup 如果希望享受 Blob 帶來的好處,同樣需要把重要的二層狀態數據,從永久的 Calldata 空間轉移到 Blob 空間裡去。這意味著在一段時間後,我們也不再能像以前一樣,依靠一層網路提供的資料來 Replay 二層的狀態。
也許這將成為一種新常態,今後所有的二層網絡,都依靠Blob 維護最新狀態的安全,而每一條L2 也需要自己另外想辦法解決歷史交易資料的可用性,如此在安全和效率之間取得更好的平衡。
過去,第一代的 OP Rollup 率先上線,而第一代的 ZK Rollup 上線後沒有帶來更具競爭力的 Gas 費。到後續 OP Stack、Polygon SDK 出現帶來的模組化風潮,OP Stack 甚至計劃在將來引入 ZK 技術來降低挑戰期。
這無疑都指向一個事實:OP 與ZK 兩種技術路線並不是你死我活的競爭,他們會互相借鑒,有融合的趨勢,只不過這一次是「高貴」的ZK 向「簡單粗暴」的OP 學習的一次。
很難想像二層網路的技術在短短兩三年之間演化到如此的地步,也許這就是區塊鏈世界的魅力吧。
參考資料:
[1] FeedTheFed. Data availability with EIP4844[EB/OL]. (2024-02-11)[2024-04 -16]. https://community.starknet.io/t/data-availability-with-eip4844/113065.
[2] L2BEAT research team. Starknet[EB/OL ]. [2024-04-16]. https://l2beat.com/scaling/projects/starknet?selectedChart=activity#contracts.
#
#以上是EIP-4844之後,StarkNet降費100倍?但我發現事情沒有這麼簡單的詳細內容。更多資訊請關注PHP中文網其他相關文章!