Secure by Design, Jared Flatow - DeFi Security Summit 2022
三句話摘要
區塊鏈協議的安全設計方法論:從規格文件、程式碼、測試到部署的系統化四步驟。 區塊鏈協議安全的關鍵不在某個技術,而在系統化流程與「始終為真的不變量」思維——用規格明確意圖、用不變量定義邊界、用多層測試驗證承諾、用開放治理確保永續維護。 1. 規格文件是最重要的投資
重點整理
重點- 1
1. 規格文件是最重要的投資
- 2
Compound 強烈重視前期規格撰寫,因為修改規格遠比修改已部署的程式碼便宜。規格應明確列舉目標、使用案例、設計考量與基本不變量(如 Assets = Liabilities),讓團隊在紙面上達成共識前進入程式碼階段。
- 3
2. 以不變量驅動設計思維
- 4
應把協議看作需要始終滿足的不變量集合(如匯率永不下降、用戶應可隨時提取供應的資產),而非具體操作序列。這種自頂向下的思維方式,比測試個別交易情景更能發現協議本質的安全缺陷。
- 5
3. 多層防禦的測試策略
- 6
結合形式驗證(formal verification)證明能完整驗證的不變量、場景框架在不同鏈部署上測試假設、社群審計與專業審計方支援,形成立體防禦網絡。
- 7
4. 部署與演進的可治理設計
- 8
V3 引入治理友善的部署腳本、自動契約追蹤、時間鎖機制與 PR 驅動的治理流程,使 DAO 能安全地維護與升級協議。
實用技巧與重點
乾貨- 協議版本與時間:V2 已運行 3 年多;V3 於演講前 2 天上線(距離治理提案通過);Jared 在 Compound 工作近 4 年
- 基本不變量:
- 基本會計方程式:Assets = Liabilities(Supply + Reserves = Cash + Borrows)
- 匯率永不下降
- 供應資產應隨時可被提取
- 低於抵押線的借方應可被清算
- 設計優化目標:
- 資本效率與燃料費效率
- 跨鏈可部署性
- 協議簡潔性與用戶易用性
- 架構變化:V2 採 Hub and Spoke 模式(每個代幣一個市場合約 + 中央風險管理合約) → V3 改為單一合約封裝整個市場
- 測試方法:
- 100% 單位測試覆蓋率
- Monte Carlo 模擬(如清算動態模型)
- 場景框架在 4 條不同鏈的分叉上運行
- 每個程式碼分支映射至規格中的不變量
- 外部審計方:Chainsecurity、OpenZeppelin、Gauntlet
- 治理演進:V2 從中心化部署 → V3 採 DAO 控制 + 時間鎖(至少一周升級周期)
- 部署工具:自動化部署腳本、可爬取的契約關係追蹤、GitHub PR 驅動治理流程
結論
結論“區塊鏈協議安全的關鍵不在某個技術,而在系統化流程與「始終為真的不變量」思維——用規格明確意圖、用不變量定義邊界、用多層測試驗證承諾、用開放治理確保永續維護。”
完整解析
詳細區塊鏈協議一旦部署到主網,幾乎無法迅速修改——沒有緊急修復機制,更沒有用戶可以選擇不更新的軟體。這個根本限制決定了 Compound 的整個設計哲學。Jared 指出,這不是像傳統軟體開發那樣的邊做邊改,而更像發射衛星或製造硬體——必須在發射前把所有事情做對。
為此,Compound 採用一個系統化的四階段流程:規格(Spec)、程式碼(Code)、測試(Test)與部署(Ship)。這些階段不完全順序,而是先規格與編碼可並行,然後測試串聯,最後才是正式部署。但流程的智慧在於規格階段的投資報酬率最高。規格是最高層級的設計文件,記錄所有關鍵決策與其背後的理由。相比直接在 Solidity 上修改或爭論,在 Google Docs 的規格上協作便宜得多。Compound 累積的經驗是:如果規格寫得好,程式碼和測試幾乎會直接掉出來——它們應該只是把英文編譯成 Solidity。
規格應明確定義協議的目標、使用案例、以及最重要的——不變量。不變量是始終必須為真的陳述式。Compound 的基本會計方程式「資產等於負債」(Assets = Liabilities,或具體說 Supply + Reserves = Cash + Borrows)就是這樣的不變量。其他例子還包括「C Token 匯率永遠不下降」或「供應資產的帳戶應該能隨時提取」。這些不變量比具體的操作序列測試(「用戶 A 存入 X 再提出」)更能暴露協議的深層缺陷,因為它們從全局角度定義協議的安全邊界。
測試需要多層防禦。首先是單位測試——100% 程式碼覆蓋率是必須,最好的方法是在編寫程式碼的同時編寫測試,確保每個分支都有對應的測試。其次是不變量驗證,可以用形式驗證語言嘗試窮舉地證明某些不變量,但形式驗證很難處理複雜系統,所以需要其他方法補充。Compound V3 為此開發了一個「場景框架」——定義某個不變量、設置假設條件,框架自動生成不同的世界狀態和上下文來測試該不變量是否在各種情況下都成立。這套場景框架在 4 條不同區塊鏈的分叉上運行,確保協議在各種環境下都安全。最後一層是開放式審計:邀請安全公司(如 Chainsecurity、OpenZeppelin、Gauntlet)及社群審查規格與程式碼,越多人發現潛在問題越好。
部署階段則重新思考了治理。V2 時期,合約由公司中心化管理,後來加上多簽控制。V3 則完全由 DAO 治理,透過時間鎖確保升級至少要一周的準備期。為此,Compound 為每條鏈的每次部署設計專用的部署腳本,自動追蹤契約關係,整個流程則圍繞 GitHub PR 展開——社群透過檢查 PR 看變更,自動化測試(包括全套場景框架)在 PR 上執行,假設變更可被提交和測試,通過後才正式執行和合併。這讓 DAO 治理與持續部署完全相容。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

