500 days of Security Summer | Sara Reynolds (Uniswap)
三句話摘要
Uniswap V4 的四阶段安全工程實踐,從設計、構建、測試到審計的完整開發安全流程。 系統化的四階段安全工程(設計→構建→測試→審計),加上細粒度的權限設計、多層次的測試框架和分層的審計策略,是構建複雜 DeFi 協議的關鍵。 (1) Hooks 權限細粒度化設計
重點整理
重點- 1
(1) Hooks 權限細粒度化設計
- 2
原始設計允許任何帶有自定義曲線標誌的鉤子擁有全部權限,但修改流動性時若鉤子意外回滾會導致用戶流動性永久冻結。V4 最終將權限拆分為四個標誌,明確區分增加和移除流動性的不同權限,確保用戶余額始終按指定金額變化,這是系統必須保留的核心不變性。
- 3
(2) 自定義曲線的權衡設計
- 4
自定義曲線設計經歷多個方案迭代,需在代碼複雜度、靈活性、可組合性和安全性間權衡。最終方案優先考慮用戶安全,採用更細粒度的權限控制和多層檢查,雖然增加了代碼複雜度但確保了可靠性和可測試性。
- 5
(3) 操作路由器框架支持組合測試
- 6
V4 相比 V3 的關鍵優勢是在單次調用中可耦合多個操作(初始化後交換、添加後移除流動性等)。團隊開發的操作路由器允許測試所有交互類型,甚至外部審計員也基於此框架構建了新操作類型進行測試。
- 7
(4) 分層審計策略最大化發現能力
- 8
進行 9 次審計和 220 萬美元競賽歷時五個月,採用「審計疊加」方式讓後期審計能納入早期修復,與多家具不同專業背景的審計公司合作(數學密集型/長期集成漏洞專家),相比單次審計能發現更多獨特問題。
實用技巧與重點
乾貨- 架構與機制
- 單例合約架構、鎖定和調用(Lock and Call)機制
- 閃存式會計系統、臨時存儲(Transient Storage)
- Hooks 權限標誌
- 最初:1 個標誌(自定義曲線權限)
- 最終:4 個標誌(交換前返回 Delta、交換後返回 Delta、修改前、修改後)
- 測試框架與工具
- 框架:Foundry、單元測試、高階模糊測試、集成測試
- FFI 數學驗證(JavaScript vs Solidity 對標)
- 與 V3 版本的功能等效性模糊測試
- 關鍵測試合約
- PoolSwapTestSoul(解鎖、處理請求、結算 Delta)
- Operations Router(支持交換、流動性修改、存款、結算、提取等)
- BaseActionsRouter(可繼承的基類)
- DeltaResolver(同步結算和同步轉帳处理)
- 審計規模
- 審計次數:9 次
- 漏洞競賽獎池:220 萬美元或更高
- 審計週期:約 5 個月
- 審計方式:審計疊加(後期審計包含早期修復內容)
結論
結論“系統化的四階段安全工程(設計→構建→測試→審計),加上細粒度的權限設計、多層次的測試框架和分層的審計策略,是構建複雜 DeFi 協議的關鍵。”
完整解析
詳細Uniswap V4 的安全工程遵循四個主要階段的嚴謹流程,從最初的架構設計到最終的第三方審計。
在設計階段,團隊面臨的核心決策是採用單例合約架構而非 V3 的工廠模式。雖然這樣做使系統複雜度大幅提升,但同時帶來更好的安全性——所有資金池的存儲集中在一個合約中,方便監管和控制。架構採用了鎖定和調用機制作為保持資金池基本償付能力的關鍵安全機制,並引入了閃存式會計系統和臨時存儲(當時 EVM 中尚未存在)。最創新的特性是 Hooks 機制——允許資金池創建者指定外部合約在交易生命週期的預定義點被調用,這打開了動態費用、ERC-699 封裝、無限費用層級等新功能的可能性。
然而 Hooks 的權限管理成為安全設計的重點。初期設計僅用一個標誌來代表所有自定義曲線權限,但團隊發現了嚴重缺陷:當修改流動性時,若 Hooks 在移除流動性時意外回滾,用戶流動性會永久凍結。基於這一發現,設計被重構為四個細粒度的權限標誌,明確區分增加和移除流動性的不同權限。這種細粒度化體現了核心設計原則——用戶的餘額必須始終按指定金額變化,這是必須保留的不變性。為實現這一點,團隊在 Hooks 調用點周圍增加了更多檢查和清理代碼。
在構建和測試階段,團隊利用 Foundry 框架建立了多層次的測試體系。除了基礎的單元測試和集成測試,還進行了高階模糊測試,使用 FFI 進行數學驗證(用 JavaScript 實現算法後用 Solidity 對比),並針對關鍵操作與 V3 版本進行對標測試。為處理 V4 獨特的組合操作能力,團隊開發了操作路由器——一個通用的測試基礎設施,支持交換、修改流動性、存款、結算、提取等所有操作類型。此外,團隊編寫了 BaseActionsRouter 和 DeltaResolver 等輔助合約,前者允許開發者繼承並自定義操作,後者處理同步結算的複雜邏輯,這些都大幅降低了外部開發者的集成難度。
審查階段投入了大量人力。團隊對社區貢獻的代碼採用了「假設存在惡意代碼」的審視態度。在開源一年多的過程中,雖然絕大多數社區貢獻都是積極的,但對涉及彙編代碼或核心關鍵路徑的改動保持了謹慎態度。
最後的審計階段是安全保障的最終防線。團隊與多家審計公司進行了 9 次審計和 1 場 220 萬美元的競賽,歷時約五個月。採用了「審計疊加」策略——後期審計納入早期審計的修復內容,這使得團隊能在流程中期發現早期審計遺漏的問題。與不同專業背景的審計公司合作(有的側重數學密集部分,有的側重長期集成漏洞),最大化了發現獨特問題的概率。整個安全保障工作並未隨審計結束,團隊仍在思考監控、Hooks 安全等上線後的持續工作。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

