KeyFrame內部研究專用

Secure by Design, Jared Flatow - DeFi Security Summit 2022

DeFi Security Summit - DSS·10月19日週三·19 min英文

三句話摘要

區塊鏈協議的安全設計方法論:從規格文件、程式碼、測試到部署的系統化四步驟。 區塊鏈協議安全的關鍵不在某個技術,而在系統化流程與「始終為真的不變量」思維——用規格明確意圖、用不變量定義邊界、用多層測試驗證承諾、用開放治理確保永續維護。 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 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵