為什麼有審計的協議還是會被攻破?審計到底檢查了什麼?
智能合約審計的範圍是合約程式碼本身:有沒有邏輯漏洞、權限設計是否嚴謹、資金操作路徑是否安全。這個流程的一個標準假設是「預言機回傳的價格是可信的輸入」——審計員通常不會去驗證這個價格來源本身夠不夠穩健,因為那屬於另一個技術領域(預言機基礎設施與經濟安全設計),不在合約程式碼審查的範圍內。
Balance Coin 的案例正好示範了這個落差:合約程式碼本身沒有 bug,攻擊者也沒有找到任何程式邏輯漏洞,他攻擊的是「協議相信哪個價格來源」這個設定層。這代表看到一個協議寫著「已通過審計」時,你知道的是程式碼寫得沒有明顯漏洞,但不代表這個協議的價格輸入機制同樣經過同等嚴謹的檢視——這是兩個需要分開評估的問題。
如果我用的協議標榜使用 Chainlink 這類「業界標準」預言機,是不是就代表安全?
不完全是。Chainlink 這類鏈下彙整多節點的預言機,確實比單一來源的預言機更難被單一攻擊者操縱,但「使用 Chainlink」不等於「安全」——關鍵在於協議端怎麼使用這個資料。2025 年 Euler Finance 上一起針對 deUSD 的事件裡,Chainlink 價格短暫誤報成 1.03 美元,這個看起來微小的 3% 偏差,依然觸發了約 50 萬美元的不當清算,原因是協議端沒有針對這種小幅異常設下合理的容忍區間。
這代表評估一個協議的預言機安全性時,除了「用了哪家預言機」,更該問的是:協議有沒有檢查資料的更新時間戳記(避免用到過期價格)?有沒有設定價格合理區間、超出區間就暫停或忽略異常值?是否只依賴單一資料源,還是會交叉比對多個來源取中位數或平均值?這些協議端的實作細節,比單純「用了哪個品牌的預言機」更能決定實際的安全程度。
TWAP(時間加權平均價格)聽起來可以防範瞬間操縱,實際上真的有效嗎?
TWAP 的設計邏輯是:與其相信「這一刻」的價格,不如取一段時間窗口內的加權平均,這樣攻擊者如果只在極短時間內拉抬或壓低價格(例如靠一筆閃電貸),這個瞬間異常會被稀釋在整段時間平均裡,難以單靠一筆交易就大幅扭曲最終價格。這確實能防範最單純的「單一區塊內閃電貸操縱」這類攻擊。
但 TWAP 不是萬靈丹,它的有效性完全取決於時間窗口設定得合不合理:窗口設得太短(例如幾分鐘內),攻擊者只要能維持操縱價格夠久(例如透過多筆交易或跨多個區塊),一樣能拉動平均值;窗口設得太長,雖然更難被操縱,但價格更新會嚴重滯後於真實市場,在市場劇烈波動時,協議依據的價格可能跟現實脫節數分鐘甚至更久,這段時間差本身也會被套利者利用。換句話說,TWAP 是用「延遲」換取「抗操縱性」,這個取捨本身就需要因協議的資產類型與波動特性去客製化調整,沒有一組放諸四海皆準的參數。
如果我沒有能力去分析協議的預言機技術細節,有沒有比較簡單的判斷方式?
完全理解預言機的技術實作確實需要一定的技術背景,但有幾個相對容易觀察的訊號可以參考:第一,看協議是否公開揭露自己用的是哪個預言機服務、有沒有說明多來源交叉驗證的設計,願意公開這些細節的協議,通常代表團隊本身重視這一層風險;第二,留意協議是否曾經歷過類似 Balance Coin、Ostium 這類事件——過去發生過預言機相關事故但沒有公開說明後續改善措施的協議,風險相對更高;第三,觀察協議管理的總鎖倉價值(TVL)與它的知名度、審計紀錄是否相稱,一個 TVL 快速成長但預言機基礎設施相對簡陋的新協議,通常比成熟、經過多次壓力測試的協議風險更高。
更根本的判斷原則是:把「智能合約已審計」跟「這個協議整體安全」分開看待,審計只回答了其中一部分的問題,預言機這一層需要另外評估,尤其是當你考慮把資金投入任何依賴加密貨幣抵押品定價的協議時。
2026 年 7 月 22 日,運作在 BNB Chain 上的算法穩定幣 Balance Coin(BLC)在幾個區塊之內從 1 美元崩到約 0.0014 美元,跌幅超過 99%。攻擊者只花了不到一百萬美元,就讓整個協議的錨定機制瞬間失效。事後鑑識報告指出,問題不在智能合約的程式碼——那份合約通過了 CertiK 的審計——問題在餵給合約的價格預言機本身被操縱了。這起事件是理解穩定幣機制時容易被忽略的一層:合約寫得再嚴謹,如果它相信的價格是假的,一切防禦都形同虛設。
智能合約審計檢查的是程式碼本身有沒有邏輯漏洞——重入攻擊、整數溢位、權限控管缺陷——這些審計流程通常把預言機回傳的價格視為「可信輸入」,不會去驗證這個價格本身合不合理、有沒有異常波動保護、有沒有更新延遲的容忍上限。OWASP 在 2026 年智能合約十大風險清單中,把預言機價格操縱列為 SC-03,明確承認這是一類主要攻擊向量,但多數審計案件的合約範圍並不包含預言機基礎設施本身。Balance Coin 事件正是打在這個審計視角的死角上:攻擊者針對的是預言機的設定層,而不是合約程式碼本身。
Balance Protocol 使用的是一個中位數預言機(Median Oracle),為協議上的 BTC 抵押品計價。攻擊者對這個預言機餵入一個造假的 BTCB 價格,讓協議誤判某些原本健康的抵押倉位已經抵押不足,觸發清算。攻擊者接著用這個被人為壓低的假價格買下被清算的抵押品,再利用這個價差套利,整個流程在單一或極少數幾筆交易內完成,沒有任何斷路器機制能在人工介入之前擋下它。這不是 2026 年唯一一起同類案例——同年稍早,Ostium 協議因價格報告被操縱損失約 1800 萬美元,Summer.fi 因收益顯示介面被操縱損失約 600 萬美元,安全機構觀察到的共同模式是:單一價格來源、驗證不足、且能在極少數交易內完成價值提取。
不同的預言機設計在成本、延遲、抗操縱性之間做取捨,沒有一種是零風險的。鏈上 DEX 現貨價格容易被閃電貸瞬間拉抬或壓低;時間加權平均價格(TWAP)能抵抗短時間的操縱,但視窗設得太短一樣會被攻破,設得太長又會讓價格更新滯後;像 Chainlink、Pyth 這類鏈下彙整多節點回報的預言機,理論上更難被單一操縱者影響,但如果協議端沒有檢查資料的新鮮度、沒有設定合理的價格區間、沒有備援機制在資料異常時停止運作,即使用了 Chainlink 依然可能出事——2025 年 Euler Finance 上一起針對 deUSD 的事件裡,Chainlink 價格短暫回報成 1.03 美元,這個看似微小的偏差仍觸發了約 50 萬美元的不當清算,顯示問題往往出在協議如何「使用」預言機資料,而不是預言機本身的技術規格。
如果你持有的是像 USDC、USDT 這類法幣儲備型穩定幣,預言機風險跟你的關係相對間接——這類穩定幣的價值錨定靠的是儲備資產與贖回機制,不是鏈上價格預言機。但如果你使用任何依賴加密貨幣抵押品(如 BTC、ETH)並透過預言機計價的協議——不論是借貸、合成資產、還是算法穩定幣——你實際上把資金安全性的一部分,交給了「這個協議的預言機設計夠不夠嚴謹」這個問題。在你把資金存入或抵押進任何這類協議之前,值得花時間確認:它用的是單一價格來源還是多來源彙整?有沒有 TWAP 或價格區間保護?出現異常價格時,協議是自動暫停還是照樣執行?這些問題的答案,比協議有沒有通過智能合約審計更能反映你的資金實際暴露在什麼風險之下。