以太坊挖礦2.0(zkSync 2.0:你好以太坊)
介紹
面對最大的技術挑戰,我們開始在與 EVM 兼容的環境中部署智能合約。測試網的第一個版本已經上線:您已經可以使用區塊瀏覽器查看 zkSync 2.0 上的活動。在這篇文章中,我們將深入解釋每個關鍵組件、提供進度更新以及下一個版本的計劃。
主要成就
在密碼學方面,zk EVM 的指令集已經完成,兩種實現都完成了:在電路中和在執行環境中。
在編譯器方面,用 Solidity 和 Zinc 編寫的智能合約現在可以編譯成 zkEVM 字節碼。
在核心基礎設施方面,全節點集成已完成,能夠成功部署和執行已編譯的智能合約。
雖然 zk EVM 和核心 2.0 基礎設施已準備好公開,但編譯器需要做更多工作才能正確覆蓋所有邊緣情況。為了提供更全面的開發者體驗,我們決定在編譯器 100% 可靠后立即開放對 zkEVM、編譯器和核心 SDK 的訪問。
zkSync 2.0 與以太坊的比較
大多數東西看起來和感覺都是一樣的。以下是一些重要的區別:
Solidity 智能合約
支持以太坊中的大多數操作碼!但是,也有一些例外:
此版本不支持 ADDMOD、SMOD、MULMOD、EXP 和 CREATE2 操作碼,但將來會支持。
我們暫時不支持 KECCAK256 操作碼,而是通過調用另一個抗沖突哈希函數來自動替換其所有調用。KECCAK256 稍后將作為預編譯器引入。
我們決定不包含 SELFDESTRUCT 操作碼,因為以太坊計劃將其刪除。
我們可能會取消對完整 256 位 XOR/AND/OR 操作碼的支持,因為這些操作碼僅存在于已編譯的用于位掩碼的 Solidity 代碼中。這可以由編譯器使用其他操作碼來完成。
氣體
在 zkSync 2.0 中,有一個不同的 gas 概念。交易價格將根據當前的 L1 gas 價格(由于發布調用數據)和 ZKP 生成成本而波動。智能合約調用將具有最大數量的 zk EVM 步驟和存儲寫入參數。
Web3 API
下一個版本將包括我們的 Web3 API 實現,它將與以太坊文檔定義的 Web3 標準兼容。事件將開箱即用,所有服務都可以輕松集成。
zkSync 包括 L1 沒有的功能,例如提交和最終塊的概念。因此,將會有額外的方法讓開發人員更精確地控制數據。Web3 客戶端代碼將接收與您在以太坊上相同的數據,但可以使用“zksync_”命名空間請求專門的信息。
因為 zkSync 有多種交易類型,并且使用 EIP712 簽名,所以 `eth_sendRawTransaction` 數據的格式會與 L1 不同。但是,編碼對應于以太坊 ABI,所以支持它并不困難。
存儲效率提升
每個塊僅應用一次存儲槽覆蓋。這意味著如果多個用戶與單個 AMM 合約交互,則 AMM 合約的存儲槽只會被覆蓋一次。這允許定序器在以后向用戶退還單次寫入的共享成本。
預編譯
“預編譯”機制已計劃好,但稍后會發布。我們計劃首先支持 keccak256、sha256 哈希和 ECDSA 恢復原語。根據需求和復雜性,可以考慮包含其他預編譯,例如 Blake2f 輪函數(在當前形式的以太坊中實際上無法使用)。
進一步的限制
zkSync 2.0 的第一次迭代可能會對每筆交易施加 32 次智能合約調用的額外限制,直到實施適當的記賬機制。
執行跟蹤將有一個硬限制,但它與以太坊塊大小的當前限制相當,不應影響大多數協議。
可能會有更多限制,但我們的目標是在最終版本中將它們減少到絕對最低限度。
深入了解 zkSync 2.0 架構
您可能聽說過區塊鏈三難困境,但在擴展以太坊時,還有第四個因素:可編程性。所有當前的擴展解決方案都存在于犧牲一些安全性、分散性和可編程性以實現可擴展性的范圍內。zkSync 2.0 的設計結合了以下 2 項技術突破,最大限度地發揮了所有 4 項功能:
zk EVM:為我們與 EVM 兼容的 zkRollup 提供動力的引擎,這是唯一具有 L1 安全性和可靠智能合約支持的解決方案。
zkPorter:一個鏈下數據可用性系統,可擴展性比 rollups 高 2 個數量級。
由于 zkEVM 和 zkPorter 是可互操作和可組合的,zkSync 2.0 能夠顯著優于所有其他擴展解決方案。
目前的共識是Eth2 數據分片將在 2022 年底到來,以在不犧牲去中心化的情況下提供指數級更大的數據可用性層。zkSync 的 zkRollup 技術與 Eth2 數據分片相結合是最終目標,在不犧牲任何 4 個因素的情況下達到 100,000+ TPS。
狀態樹
zkSync 2.0 狀態樹覆蓋了以太坊的全部 160 位地址空間。每個帳戶將駐留在狀態的 zkRollup 部分或 zkPorter 部分。zkRollup 和 zkPorter 賬戶完全一樣,除了一個組件:保證數據可用性。zkRollup 交易數據通過 calldata 發布到以太坊,zkPorter 交易數據發布到 zkSync Guardian 網絡,zkSync 代幣持有者參與權益證明。
發布數據的地方是成本和安全性之間的權衡。zkPorter 交易比匯總交易便宜得多,但它有可能會凍結您的資金。然而,zkRollup 和 zkPorter 賬戶的有效性都是通過零知識證明和以太坊來保證的。也就是說,zkPorter 中的資金只能被凍結,不能被盜。
zkRollup 和 zkPorter 賬戶的互操作性和可組合性讓每個用戶都有機會成為 zkSync 中的一等公民。部署在 zkRollup 端的 Uniswap 可以通過 zkPorter 賬戶訪問以換取最低費用。zkSync 2.0 是一個系統,專為整個金融領域的用戶而設計。
密碼學
我們的 VM,通常稱為 zkEVM,不是 EVM 1:1 副本,而是旨在能夠運行 99% 用 Solidity 編寫的合約并保持其相同的行為,例如在恢復和異常期間。同時,編寫 zk EVM 以在電路中高效地產生零知識證明。
這是在我們的證明系統沒有任何重大變化的情況下完成的;我們繼續將 PLONK 與自定義門和查找表(通常稱為 UltraPLONK)和以太坊的 BN-254 曲線一起使用。這是有利的,因為自 2020 年 6 月以來,該證明系統已在 zkSync 1.0 以及使用相同證明系統的其他項目中進行了實戰測試。
經過數月的努力,我們再次激動地宣布:zkEVM 的指令集已經最終確定并在電路和執行環境中實現。
這里有一個重要的區別:電路和執行環境中的實現是分開的,用于不同的目的。生成執行跟蹤的證明并提供見證是電路的工作,但這非常慢。另一方面,執行環境是 rust 中 zk EVM 的直接實現,高效且快速。如果我們要依靠電路來生成和執行證明,那么交易的最終確定性將需要數小時。證明生成和簡單執行的分離使 zkSync 上的交易能夠即時結算。
接下來,我們專注于將 zkEVM 和編譯器結合在一起,并將遞歸結合在一起:塊之間的遞歸,它允許我們為 N 個塊發布一個證明,以及塊內的遞歸,它聚合塊的不同邏輯部分的子證明. 這是簡單的部分!自 2020 年 6 月以來,zkSync 1.0 的主網上已經使用了塊之間的遞歸聚合證明。有關塊內遞歸以及我們的 zk EVM 工作原理的更多信息,請觀看此視頻說明。
編譯器
我們正在同時開發兩個針對 zkEVM 的編譯器前端:Yul 和 Zinc。Yul是一種中間 Solidity 表示,可以編譯為不同后端的字節碼。Zinc是我們用于智能合約和通用零知識證明電路的基于 Rust 的語言。
因為編譯器是使用LLVM框架構建的,所以可以認為它具有前端 Yul → LLVM IR 和后端 LLVM IR → zkEVM 字節碼。采用 LLVM 帶來了幾個主要優勢:
LLVM 優化框架無與倫比:它從 LLVM IR 生成最高效的 zkEVM 字節碼。
使用較新版本的 Solidity 或 Zinc,編譯器前端將處理所有更改,而 LLVM 將使我們脫離對編譯器后端的更改。
將來,如果開發人員想用原生 Rust 或 Javascript 編寫智能合約,只需構建該語言的編譯器前端,智能合約就可以在 zkSync 中開箱即用。
編譯器的安全性對我們來說至關重要,并且已經通過了多套測試:
Zinc 和 Yul 編譯器中的詞法、語法和語義測試。
我們自己的 Zinc 和 Solidity集成測試,貫穿整個智能合約生命周期:從解析源代碼到合約部署和在 zkSync 上執行交易。
從 Solidity 存儲庫集成并適用于我們的集成測試工具的廣泛測試套件。
每個套件已經包含數千個測試,我們將把這個數字至少增加一個數量級。
我們的 2 個編譯器已經成功部署并執行了兩種語言的簡單智能合約。但是還有更多的優化需要完成,一些復雜的 LLVM IR 語句需要翻譯成 zkEVM 字節碼。因此,我們決定在編譯器處于更強大的狀態之前不發布它。
編譯器完成后,我們將專注于使Zinc更具表現力和功能豐富,然后構建 Rust 編譯器前端以允許使用原生 Rust 編寫智能合約。
核心基礎設施
zkSync 2.0 核心由幾個關鍵角色組成:
全節點
通過虛擬機實現 zkEVM 字節碼的預電路執行器環境
狀態在交易發送后幾秒鐘內可用,
過濾掉可能導致區塊膨脹的明顯不正確的交易(例如,交易資金不足),
在內存池中執行交易并生成塊。
證明者
接收區塊的見證人并生成零知識證明,
用于并行證明生成的證明者接口,
定制證明者自動縮放器,可按需創建和終止證明者機器。
交互者
用于觀看和與以太坊 L1 交互的工具,
根據代幣價格、ZKP 生成成本和 L1 gas 價格計算交易費用。
偏執狂監視器
Prometheus、elastic、sentry、uptime、幾個獨立的事件通知系統和自定義健康檢查服務。
這個核心基礎設施功能齊全,已經集成了 zkEVM 執行器!