一位安全研究員在測試CoW協議時發現,整數除法的向下取整特性,能讓惡意求解器把每筆交易的手續費"抹零"到0 wei。
這不是理論推演。他用Foundry框架跑出了完整測試用例,1000 wei的極小交易量,就能讓協議收不到一分錢。
![]()
漏洞藏在哪:部分成交訂單的計費公式
CoW協議允許用戶簽署可部分成交的訂單。求解器可以分多次執行,每次按比例計算手續費。
公式看起來合理:
executedFeeAmount = (feeAmount × executedAmount) / sellAmount
問題在于Solidity沒有浮點數,整數除法永遠向下取整。當分子小于分母時,結果就是0。
研究員的測試用例很直白:賣單金額100 ether,手續費1 ether,執行量僅1000 wei。計算過程是(1e18 × 1000) / 100e18,結果精確歸零。
這個測試通過了。意味著協議確實沒收到手續費。
正方:這是設計取舍,不是漏洞
從工程角度看,整數運算是智能合約的必然選擇。浮點數在鏈上成本極高,且不同語言的實現差異會帶來更大風險。
向下取整也是行業慣例。以太坊本身的gas計算、Uniswap的K值校驗,都遵循同樣邏輯。如果每筆交易都向上取整,小額交易者反而吃虧。
1000 wei的攻擊門檻,意味著求解器需要拆解海量訂單。gas成本、計算開銷、被檢測風險,都會侵蝕所謂的"套利空間"。
協議的經濟模型或許已經考慮這點——微量流失被視作系統摩擦成本,就像傳統支付網絡的手續費損耗。
反方:自動化攻擊會放大漏洞
研究員的反駁很具體:單個交易只漏幾wei,但自動化求解器可以重復數千次。
這觸及DeFi的核心矛盾。求解器本身就是自動化程序,它們批量撮合訂單、優化路徑、拆分執行。把大單拆成 dust 交易,在技術上毫無障礙。
更深層的問題是不公平競爭。遵守規則的求解器正常繳納手續費,利用漏洞的求解器零成本運營。長期看,劣幣驅逐良幣。
協議收入流失還有連鎖效應。CoW協議的DAO依賴手續費維持運營和激勵,持續流失會削弱整個經濟飛輪。
我的判斷:精度問題是DeFi的系統性風險
這個案例的真正價值,在于揭示了一個被低估的攻擊面。
整數除法的精度損失不是CoW協議獨有的。任何涉及比例計算的DeFi協議——AMM、借貸清算、收益分配——都面臨同樣困境。區別在于,有些協議用乘數放大精度,有些用庫函數處理舍入,有些則像這里一樣暴露在外。
研究員提出的修復方案值得對比。"最低手續費"檢查簡單直接,但會傷害小額交易場景;向上取整的mulDivUp更公平,卻可能增加合約復雜度。
沒有完美解,只有權衡。
這個發現最終指向一個更本質的問題:智能合約的"確定性"既是優勢也是枷鎖。當所有計算都必須在鏈上公開、可驗證、無歧義地完成時,傳統金融里被忽略的微量誤差,在這里會被無限放大和利用。
安全研究的價值,正在于把這些隱形成本顯性化。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.