DeFi security Summit 2023 - Session 10: Focused Talks 2 -Justin Jacob
三句話摘要
Cairo 1.0零知識證明語言的架構改進與Caracal靜態分析工具。 Cairo 1.0透過Sierra中間表示與線性類型系統實現了「高階開發體驗與底層零知識證明保證的完美統一」,配合Caracal工具開啟了可審計的智能合約新時代。 Cairo 0.x開發體驗極差——需手動操作內存單元、無迴圈、無類型系統、除法運算遵循模運算規則導致結果反直覺,開發者必須理解底層約束才能編寫正確代碼。
重點整理
重點- 1
Cairo 0.x開發體驗極差——需手動操作內存單元、無迴圈、無類型系統、除法運算遵循模運算規則導致結果反直覺,開發者必須理解底層約束才能編寫正確代碼。
- 2
Cairo 1.0透過Sierra中間表示層實現抽象——採用線性類型系統確保每個對象只被使用一次、避免懸垂引用,庫函數從構造上就生成正確代碼,大幅簡化開發流程同時保留零知識證明的底層保證。
- 3
Gas計量與錯誤處理革命——舊版本無法對失敗交易收費、會導致測序器無償工作,Cairo 1.0計算每個操作的Gas成本並將錯誤轉為分支傳播,徹底堵住了交易洪泛DOS攻擊。
- 4
Caracal工具生態成熟——7個檢測器涵蓋重入、事件順序等常見漏洞,與Scarb無縫集成,支持控制流圖與函數圖可視化,降低開發者安全審計門檻。
實用技巧與重點
乾貨- Trail of Bits開源工具:
- Slither、Medusa、Salsi Select、Caracal
- Cairo 0.x核心特性:
- 提示(hints):證明者可在內存放入任意輸入
- 不可變內存:寫入後永不可改
- 字段類型:252位字段元素
- 模運算除法:30÷9的結果非常大(因為x÷y×y恆等於x)
- 無迴圈、無自動內存管理
- Cairo 1.0新特性:
- Rust風格語言、強類型系統
- 基礎類型:u256、u128、size,保留原生Feel型但非溢出安全
- 模式匹配、泛型、trait、抽象數據類型
- Sierra中間表示:
- 中間表示層(Cairo代碼→Sierra IR→Cairo汇編)
- 線性類型系統:每對象僅使用一次
- 庫函數:自動生成正確的Cairo汇編代碼
- Gas與錯誤機制:
- drawable gas庫、Branch align庫
- 將assert false轉為分支而非無法滿足的約束
- Caracal靜態分析工具:
- 7個檢測器
- 檢測項目:重入漏洞(純粹重入、良性重入)、事件順序混亂
- 與Scarb集成(使用`scarb`指令即可運行)
- 輸出:控制流圖(CFG)、函數圖可視化
結論
結論“Cairo 1.0透過Sierra中間表示與線性類型系統實現了「高階開發體驗與底層零知識證明保證的完美統一」,配合Caracal工具開啟了可審計的智能合約新時代。”
完整解析
詳細Cairo是零知識證明領域的編程語言,運行在StarkNet區塊鏈上。舊版本Cairo(0.x)采用低階抽象,開發者必須直接操作內存單元、手寫所有計算步驟,不支持迴圈和類型系統,一切皆為252位字段元素。更糟的是,除法遵循模運算規則——在模數下確保x÷y×y恆等於x——導致30÷9等簡單運算產生巨大的非直覺結果。這種設計源於零知識證明的約束生成需求,但嚴重降低了開發體驗。
Cairo 1.0完全重新設計了開發界面。開發者現在可以像寫Rust一樣編寫高階代碼,內存管理完全被抽象化——AP指針操作、tempvar、locals這些低階概念全部消失。新增的強類型系統提供u256、u128等標準類型,取代了之前所有變量都是字段元素的局面。實現這一切的關鍵是Sierra中間表示層——一個位於高級代碼與Cairo汇編之間的中間抽象。Sierra採用線性類型系統確保每個對象只被使用一次,並借鑑Rust的內存模型,杜絕懸垂引用。更妙的是,Sierra的庫函數從構造上就生成正確的Cairo汇編代碼,開發者無需擔心底層實現。
Gas計量與錯誤處理是另一項核心改進。舊版Cairo遇到`assert false`這類失敗語句時會產生無法滿足的約束,測序器無法將其包含在區塊中,導致無償工作。這給了攻擊者送入大量無效交易的機會。Cairo 1.0為每個操作計算Gas成本,並透過drawable gas和Branch align庫完全同步。更重要的是,失敗不再導致約束爆炸,而是轉為代碼分支,將錯誤向上傳播至虛擬機入口點,讓測序器能夠繼續執行——這徹底堵住了DOS攻擊的窗口。
為幫助開發者發現代碼漏洞,Trail of Bits開源了Caracal靜態分析工具。Caracal構建於Sierra IR之上,使用標準的數據流分析技術,提供7個檢測器指出常見的Cairo漏洞,包括三種重入檢測(純粹重入、良性重入、事件順序混亂)。該工具與Scarb無縫集成——只需在項目根目錄運行`scarb`指令即可分析,體驗與Foundry + Slither一致。Caracal還提供控制流圖和函數圖可視化,幫助開發者理解合約交互邏輯。Cairo Playground和Remix插件也在開發中。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

