Solidity Debugging meets Formal Methods — Raoul Schaffranek | Runtime Verification
三句話摘要
Runtime Verification 介紹兩款新工具,讓形式化驗證從頂尖機構走向所有 Solidity 開發者:符號執行調試器 Symbolic 與形式測試工具 Kontrol。 形式化驗證的最大障礙不是數學而是開發者體驗——Symbolic 把符號執行變成可視化調試,Kontrol 把規格變成 Foundry 測試,兩者合力把「數學級正確性保證」的門檻從博士降到有測試習慣的 Solidity 開發者。 符號執行 = 可視化的全狀態探索:傳統調試器只跑一條路徑,符號調試器同時追蹤所有分支,畫面上出現多個游標,且支援跨分支的時間旅行回溯,讓審計人員腦中的控制流圖直接變成可操作的 UI。
重點整理
重點- 1
符號執行 = 可視化的全狀態探索:傳統調試器只跑一條路徑,符號調試器同時追蹤所有分支,畫面上出現多個游標,且支援跨分支的時間旅行回溯,讓審計人員腦中的控制流圖直接變成可操作的 UI。
- 2
測試信心層級:單元測試 → 模糊測試 → 符號測試:模糊測試的結果只能說「沒找到反例」(不確定),符號測試若成功則輸出機器可驗證的數學證明,確保「不存在任何參數組合會使測試失敗」——這是本質上的信心提升,而非量的差異。
- 3
規格即測試套件,降低溝通成本:傳統形式驗證需要先用自然語言寫規格、再由專家轉換為數學語言,Kontrol 直接讓開發者用 Solidity(Foundry 風格)寫屬性測試作為規格,消除開發團隊與驗證團隊之間的語義落差。
- 4
循環處理是形式驗證的真正難關:多數工具遇到循環直接放棄或手動設上限,Runtime Verification 透過計算循環不變式(closed-form formula)來完整推理循環,但代價是速度更慢;EVM 位元組碼層的隱性循環(字串、動態陣列複製)也是其他工具常見盲點。
實用技巧與重點
乾貨- 驗證過的協議:以太坊存款合約(32 ETH 質押)、Uniswap、Optimism、Lido、EigenLayer
- 工具名稱:Symbolic(符號調試器)、Kontrol(形式測試工具)
- Symbolic 已上架 VS Code Marketplace,測試版,需從官網取得 API 金鑰;目前 90% 開源,剩餘部分數週至數月內開源
- 線上 Demo 網址格式:`symbolic.runtimeverification.com`(無需安裝,瀏覽器內跑 VS Code)
- Kontrol 指令:`kontrol build`(編譯)→ `kontrol proof <合約名> <測試名>`→ `kontrol show` / `kontrol view`(查看卡住狀態)→ 手寫 lemma 幫助 prover 繼續
- Kontrol 底層:KEVM(K Ethereum Virtual Machine,完整 EVM 形式語義)
- 邏輯基礎:Matching Logic
- 驗證耗時:依程式碼規模,從數分鐘到數小時,極端情況數天;CPU 占用接近 99%,建議跑在 CI Runner 而非本機
- 建議 CI 整合策略:每次 PR 合併或夜間自動執行 `kontrol proof`
- 基準測試倉庫:`eth-sc-comp-benchmarks`(GitHub),Kontrol 在自動求解實例數為同類最佳
- 觸發隱性 EVM 循環的資料型別:`string`、`bytes`、動態陣列(映射不包含在內)
結論
結論“形式化驗證的最大障礙不是數學而是開發者體驗——Symbolic 把符號執行變成可視化調試,Kontrol 把規格變成 Foundry 測試,兩者合力把「數學級正確性保證」的門檻從博士降到有測試習慣的 Solidity 開發者。”
完整解析
詳細智能合約的安全保障長期存在一道隱形門檻:形式化驗證(Formal Verification)能提供數學級別的正確性保證,但高昂的成本與高度專業化的工具,讓這項技術只停留在 Uniswap、Optimism、EigenLayer 等頂尖協議。Runtime Verification 在過去兩年的核心目標,就是打破這道門檻——讓獨立安全研究員和普通開發團隊也能自行運行形式化驗證工具。
第一個切入點是「從調試入手」。開發者天天用調試器,理解調試就能理解符號執行。Runtime Verification 在 Truffle 關閉、VS Code 生態缺少 Solidity 調試器的空窗期,推出了 Symbolic——一款帶符號執行能力的 VS Code 調試器。與傳統調試器只執行一條具體路徑不同,Symbolic 在遇到 `if` 語句時會同時保留兩個執行分支,畫面上出現兩個游標並排前進,並以可視化的控制流圖呈現所有分支。這個設計本質上是「增強版時間旅行調試」——不只能往回走,還能跳到備選的時間線(即合約的備選執行分支),讓審計人員可以直接點擊圖中的節點跳轉到對應程式碼段。目前工具尚缺 Solidity 變數顯示功能(僅能看 EVM 底層的 stack/memory/storage),此功能依賴以太坊基金會正在開發中的新調試格式,預計近期補齊。
第二個切入點是「從測試出發」。講者清楚劃定了三個信心層級:單元測試在固定參數下跑;模糊測試用啟發式採樣(包含常數挖掘)跑數百萬條路徑,結果是「沒找到反例,但不確定是否遺漏」;而符號測試則是對所有可能的輸入狀態執行符號執行,若成功輸出的是機器可驗證的數學證明——「不存在任何參數組合使測試失敗」。這不是量的差異,而是本質上確定性的飛躍。Kontrol 就是實現這個飛躍的工具,它讓開發者直接用 Foundry 語法寫屬性測試,後端以 KEVM(完整 EVM 形式語義)跑符號執行,把「測試套件」直接當作「規格」,省去了自然語言→數學語言的翻譯過程。
在實務流程上,Kontrol 的工作循環是:跑 `kontrol proof` 後,若找到反例就修 bug 再跑;若 prover 卡住,就用 `kontrol show/view` 查看卡住時的 EVM 完整狀態,再手寫 lemma(引理)引導 prover 繼續。這個「引導 prover」的步驟目前仍需懂形式語言,是工具尚未完全降低的門檻,團隊正在研究如何讓 lemma 也能用 Solidity 語法表達。至於效能問題,Kontrol 的計算強度遠高於模糊測試,單次驗證可能需要數小時甚至數天,因此最佳實踐是整合進 CI 流水線,在夜間或每次合併 PR 時自動執行,而非在本機開發週期中阻塞。值得一提的是,Kontrol 是目前極少數能完整推理 Solidity 循環(包含 EVM 位元組碼層的隱性循環)的工具之一,且在公開基準測試 `eth-sc-comp-benchmarks` 中自動求解能力排名同類最佳。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

