Wake Framework: Swiss Knife to Ethereum tooling — Josef Gattermayer | Ackee
三句話摘要
開源智能合約審計框架 Wake:整合靜態分析、Python 測試與引導式模糊測試的瑞士軍刀工具鏈。 Wake 最值得記住的設計哲學是:靜態分析寧缺毋濫、測試框架用 Python 讓偵錯工具鏈完全打通,引導式模糊測試用「流程定義」換取實用速度——三者整合為一個審計師自己在用的工具,而非為了功能清單而堆砌的工具。 精準優先的靜態分析哲學:Wake 刻意選擇精確率(Precision)而非召回率(Recall),寧可零誤報也不產生大量假警報。當誤報過多時,沒有人會使用靜態分析器,因此高精準度才是真正有用的設計。
重點整理
重點- 1
精準優先的靜態分析哲學:Wake 刻意選擇精確率(Precision)而非召回率(Recall),寧可零誤報也不產生大量假警報。當誤報過多時,沒有人會使用靜態分析器,因此高精準度才是真正有用的設計。
- 2
以 Python 取代 Solidity 編寫測試:透過 PyTypes 從 Solidity 原始碼自動生成 Python 中間表示,讓測試人員可以用 Python 原生語法與合約互動、偵錯,並借助 ipdb 等 Python 工具鏈直接調試 Solidity 合約。
- 3
引導式模糊測試區別於傳統黑盒方式:傳統黑盒 Fuzzing 依賴遺傳演算法在無限狀態空間搜索,容易陷入循環耗費大量時間。Wake 的「引導式模糊測試」讓測試人員定義「流程(Flow)」——即指定哪些函數片段用哪些輸入進行測試,將搜索空間限縮,大幅提升速度與效率。
- 4
差異模糊測試(Differential Fuzzing)發現舍入誤差:根據文件用 Python 撰寫數學公式作為參考模型,再與合約實際輸出比對,適合找出 DeFi 協議中難以肉眼審查的微小舍入誤差。在 Iper Protocol 中已透過此方法發現多個問題。
實用技巧與重點
乾貨- 框架定位:取代 Brownie(已停止維護)的 Python 測試框架
- 合作客戶:Safe、Axel 1、Pendle
- 靜態分析檢測器數量:約 20 個,目標零誤報
- 基準測試規模:50 個隨機合約(小型基準)
- 效能測試:271 個 Uniswap V3 單元測試
- Wake:3 秒
- Brownie:43.4 秒
- 提升約 10 倍
- 比較框架:Brownie、Ape、Hardhat(原始測試以 Hardhat 撰寫)
- 加速技術:差異編譯(Differential Compilation),只重新編譯有改動的部分
- Python 偵錯工具:ipdb(Python 交互式偵錯器)
- 中間表示技術:PyTypes(從 Solidity 生成 Python 型別安全接口)
- 開發鏈:Anvil,搭配 ArchiveNode(ArchalNote)做 fork 測試
- VS Code 擴充套件:Solidity Tools(一鍵安裝,背景自動安裝框架,即時顯示靜態分析結果)
- 跨鏈測試:支援多鏈同時測試,適合橋接(Bridge)合約審計
- 模糊測試概念:不變式(Invariants)+流程(Flows)+差異模糊測試(Differential Fuzzing)
結論
結論“Wake 最值得記住的設計哲學是:靜態分析寧缺毋濫、測試框架用 Python 讓偵錯工具鏈完全打通,引導式模糊測試用「流程定義」換取實用速度——三者整合為一個審計師自己在用的工具,而非為了功能清單而堆砌的工具。”
完整解析
詳細Wake 是由布拉格智能合約審計公司 Akt 開發的開源框架,定位是「瑞士軍刀」:將靜態分析器、測試框架、模糊測試與語言服務器整合為一體。開發這個框架的最初動機,是團隊在審計工作中長期使用 Brownie 與 Litter 等工具,卻苦於它們功能分散、Brownie 更已停止維護。於是他們決定打造一個能在審計實戰中自用的全套工具鏈。
靜態分析是 Wake 的第一個核心模組。與主流靜態分析器追求高召回率不同,Wake 刻意把精確率擺在首位——誤報率趨近零。團隊的邏輯很直接:一個每次都狼來了的分析器,沒有人會去用。目前約有 20 個檢測器,許多都是審計實際項目後針對特定問題自動化而來,例如專門為 Safe、Axel 1 生態開發的檢測器。此外還有「打印機(Printer)」功能,讓審計師可以在命令行或 VS Code 中看到格式清晰的合約結構,加速審計初步梳理。
第二個核心是測試框架。Wake 使用 Python 作為測試語言,通過 PyTypes 技術從 Solidity 原始碼自動生成 Python 型別安全的中間表示,讓工程師可以用 Python 原生語法操作合約——呼叫函數、讀取狀態變量,連拼字錯誤都有自動提示。更關鍵的是,Python 的偵錯生態(如 ipdb)可以直接用來調試 Solidity 合約邏輯,這在其他框架中幾乎是不可能的體驗。效能上,透過「差異編譯」——只重新編譯有改動的合約而非整個代碼庫——Wake 在 271 個 Uniswap V3 測試的跑分中達到 3 秒,相比 Brownie 的 43.4 秒提升約 10 倍,對 CI/CD 流水線尤其有意義。
模糊測試(Fuzzing)方面,Wake 採取「引導式模糊測試」而非黑盒方式。傳統黑盒 Fuzzing 讓測試器在無邊界的狀態空間中自由搜索,容易卡死在局部循環。Wake 要求測試人員定義「流程(Flow)」,明確告訴 Fuzzer 應該用哪些函數片段、哪些輸入集合進行測試,縮小搜索域後即使在本地機器上也能在幾小時內完成。進一步的「差異模糊測試」則是用 Python 照文件重寫一份數學參考模型,Fuzzer 比對合約輸出與 Python 模型輸出的差異,這對於找出 DeFi 協議中肉眼難以察覺的舍入誤差非常有效——Iper Protocol 已有實際案例驗證。跨鏈測試方面,Wake 整合 Anvil 與 ArchiveNode,能夠模擬橋接合約在兩條鏈上的交互,填補了許多框架在多鏈場景下的空白。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

