開發者駁斥Vitalik:前提假設有誤,RISC-V並非最佳選擇

avatar
Azuma
5小時前
本文約2003字,閱讀全文需要約3分鐘
「可擴充性」和「可維護性」無法兼顧。

本文出自:以太坊開發者levochka.eth

編譯|Odaily星球日報( @OdailyChina );譯者|Azuma( @azuma_eth

編按:

昨日,以太坊聯合創始人Vitalik 發布了一篇關於以太坊執行層升級的激進文章(詳見《 Vitalik 激進新文:執行層擴容“不破不立”,EVM 未來必須被迭代》),文中提到希望用RISC-V 取代EVM 作為智能合約的虛擬機語言。

此文一出,立即在以太坊開發者社群激起了軒然大波,多位科技大佬對此方案表達了不同看法。文章發布後不久,一線以太坊開發者 levochka.eth 在原文下文撰寫長文反駁了 Vitalik 的觀點,其認為 Vitalik 對證明系統及其性能進行了錯誤的前提假設,RISC-V 無法兼顧“可擴展性”和“可維護性”,或許並非最佳選擇。

以下為 levochka.eth 原文內容,由Odaily 星球日報編譯。

開發者駁斥Vitalik:前提假設有誤,RISC-V並非最佳選擇

請不要這樣做。

這個計劃並不合理,因為你對證明系統及其性能進行了錯誤的前提假設。

驗證假設

據我理解,該方案的主要論點是「可擴展性」(scalability)和「可維護性」(maintainability)。

首先,我想討論可維護性。

事實上,所有RISC-V zk-VM 都需使用「預編譯」(precompiles)來處理運算密集型操作。 SP 1 的預編譯清單可見於Succinct的文檔,你會發現它幾乎涵蓋了EVM 中所有重要的「計算性」操作碼。

因此,對基礎層加密原語的所有修改都需要為這些預編譯編寫並審計新的“電路”,這是一個嚴重的限制。

確實,如果效能夠好,執行客戶端中「非EVM」部分的可維護性可能會相對容易。我不確定性能是否會足夠好,但我對這部分的信心較低,原因如下:

  • 「狀態樹計算」(state tree computation)確實可以透過友善預編譯(如Poseidon)大幅加速。

  • 但能否以優雅且可維護地方式處理「反序列化」(deserialization)尚不明確。

  • 此外,還存在一些棘手細節(如Gas 計量和各種檢查),這些環節可能屬於“區塊評估時間”,但實際上更應歸類為“非EVM”部分,而這些部分往往更容易面臨維護壓力。

其次,關於可擴展性的部分。

我需要重申一點, RISC-V 不可能在不使用預編譯的情況下處理EVM 負載,絕對不行。

所以,原文中「最終證明時間將主要由當前的預編譯操作主導」這一說法雖然技術上正確,但過於樂觀—— 它假設未來不會有預編譯,而事實上(在這個未來場景中),預編譯仍會存在,且與EVM 中計算密集型操作碼(比如簽名,哈希,以及可能出現的大型數模運算)完全一致。

關於「斐波那契」(Fibonacci)範例,很難在不深入極底層細節的情況下做出判斷,但其優勢至少部分來自:

  • 「解釋器」(Interpretation)與「執行開銷」(execution overhead)的差異;

  • 循環展開(減少RISC-V 的“控制流”,Solidity 能否實現尚不確定,但即便單一操作碼仍會因解釋開銷而產生大量控制流/記憶體存取);

  • 使用更小的資料類型;

這裡我想指出,要達到第1 點以及第 2 點優勢,必須消除「解釋開銷」(interpretation overhead)。這與RISC-V 的理念一致,但這不是我們目前討論的RISC-V,而是一種類似的「 (?)RISC-V」 ——它需要具備某些額外能力,例如支持合約概念。

問題來了

所以,這裡存在一些問題。

  • 若要提升可維護性,你需要一個能編譯EVM 的RISC-V(帶預編譯)-- 這基本上就是現狀。

  • 若要提升可擴展性,則需要完全不同的東西—— 一種可能類似RISC-V 的新架構,它能理解「合約」概念,相容於以太坊運行時限制,並能直接執行合約程式碼(且無「解釋開銷」)。

我現在假設你指的是第二種情況(因為文章的其餘部分似乎暗示了這一點)。我需要提醒你注意,此環境外的所有程式碼仍將以當前 RISC-V zkVM 語言編寫,這對維護有重大影響。

其他可能性

我們可以將字節碼從高級EVM 操作碼中編譯出來。編譯器負責確保生成程式保持不變量,例如不會出現「堆疊溢位」(stack overflow)。我希望看到在普通EVM 中展示這一點。正確編譯的SNARK 可以與合約部署指令一起提供。

我們也可以建構一個「形式化證明」(formal proof),證明某些不變量得以保留。據我所知,這種方法(而不是“虛擬化,virtualization”)已在某些瀏覽器上下文中使用。透過產生這種形式化證明的SNARK,你也可以實現類似的結果。

當然了,最簡單的選擇就是硬著頭皮去做…

建構一個最小的「鍊式」MMU

你在文章可能隱含表達了這一點,但請允許我提醒:若想消除虛擬化開銷,必須直接執行編譯後的程式碼—— 這意味著你需要以某種方式防止合約(現在是可執行程式)寫入核心(非EVM 實作)記憶體。

因此,我們需要某種「記憶體管理單元」(MMU)。傳統電腦的分頁機制可能不必要,因為「實體」記憶體空間近乎無限。此MMU 應盡可能精簡(因為它與架構本身處於相同抽象層級),但某些功能(如「交易原子性, atomicity of transactions)可移至該層。

此時,可證明的EVM 將成為運行於此架構的核心程式。

RISC-V 可能不是最佳選擇

有趣的是,在所有這些條件下,適合這項任務的最佳「指令集體系結構」(ISA)可能不是RISC-V,而是某中類似於EOF-EVM 的東西,原因在於:

  • 「小型」操作碼實際上會導致大量記憶體訪問,現有證明方法難以高效處理。

  • 為減少分支開銷,我們在近期的論文Morgana 展示如何以預編譯級效能證明「靜態跳轉」( static jumps,類似EOF )程式碼。

我的建議是,建立一個對證明友好的新架構,配備一個最小的MMU,允許將合約作為單獨的可執行檔運行。我不認為它應該是RISC-V,而應是一種專為SNARK 協議限制優化的新ISA ,甚至部分繼承EVM 操作碼子集的ISA 都可能更好——如我們所知,不管我們願不願意,預編譯都會一直存在,所以RISC-V 在這裡並沒有帶來任何簡化。

本文翻譯自 https://ethereum-magicians.org/t/long-term-l1-execution-layer-proposal-replace-the-evm-with-risc-v/23617/5原文連結如若轉載請注明出處。

ODAILY提醒,請廣大讀者樹立正確的貨幣觀念和投資理念,理性看待區塊鏈,切實提高風險意識; 對發現的違法犯罪線索,可積極向有關部門舉報反映。

推薦閱讀
星球精選