← 回到 DEVCON 8

oksolc 以平行與增量編譯縮短智慧合約開發等待時間

oksolc, a Solidity compiler in Zig

場次摘要

Henri 介紹以 Zig 重寫的 Solidity 編譯器 oksolc。他表示,團隊開發 Chainwall 時,編譯一次需十二分鐘,使用人工智慧撰寫測試也讓測試程式碼大幅增加。團隊因此著手加速編譯,同時要求輸出與原編譯器 solc 逐位元組一致,包括位元組碼與中繼資料。 團隊先輔助移植程式碼,再改善資料結構、快取與平行處理,並嵌入 SQLite 保存編譯中間資料,避免每次修改都從頭編譯。Henri 稱,部分 Pendle 修改可在零點四四秒完成重編譯,也能透過設定接入 Foundry。不過,目前測試基準僅涵蓋部分大型專案,不能據此保證所有情境的效能與輸出一致性。形式化驗證已啟動但尚未完成;目前刻意維持相同位元組碼,並未降低鏈上執行所需的 gas 用量。

值得記下的 5 件事

  1. [1:20]
    以輸出一致作為重寫約束 Henri 表示,團隊調整 LLVM 工具,取得原始 C++ 程式碼的更多標註與語意資訊,再用人工智慧協助移植到 Zig

    建立基礎版本後,團隊要求輸出逐位元組一致,連 JSON 輸出與中繼資料都納入要求;這是團隊描述的目標與成果,並非全面驗證的證據。

  2. [2:20]
    先改善單核心效能,再加入平行編譯 Henri 稱,改善資料結構、編譯步驟與快取後,單核心編譯效能約為原先的二點五倍

    他接著以 EigenLayer 為例,表示平行編譯可達十至十二倍效能;這些是講者列舉的專案測試結果,不代表所有智慧合約都有相同提升。

  3. [3:20]
    用 SQLite 保存資料,減少重複編譯 為了減少反覆修改測試帶來的等待,團隊將 SQLite 資料庫嵌入編譯器,保存編譯過程的中間資料,供後續編譯沿用

    Henri 稱,部分 Pendle 修改可在零點四四秒完成增量編譯;這是特定修改後的重編譯時間,不是完整編譯時間。

  4. [4:20]
    透過設定接入 Foundry Henri 表示,使用者可在智慧合約開發工具 Foundry 的 foundry.toml 設定檔中指定 oksolc 路徑,或設定 FOUNDRY_SOLC 環境變數

    另可透過 oksolc.toml 設定同時執行的編譯工作數,以及是否啟用增量編譯。

  5. [5:20]
    形式化驗證與測試擴充仍在進行 Henri 宣布,團隊已開始使用 Lean,以數學證明方式驗證編譯器,但尚未宣布完成

    被問到如何測試位元組碼是否一致時,他表示目前以數個大型專案組成測試基準,並希望取得更多資料集,擴大測試範圍。

下載摘要 下載 Word 摘要(.docx)

更多來自 DEVCON 8

訂閱