為什麼淺流動性池特別容易被拿來洗價?這跟深流動性池有什麼本質差異?
這跟 AMM(自動做市商)的定價機制有關:池子裡的資產比例決定報價,池子越淺,同樣金額的交易對比例造成的變動就越大,也就是滑點越高。在一個有數千萬美元流動性的池子裡,攻擊者想把價格拉抬 50%,可能需要動用數百萬美元的真實資金,而且拉抬過程會製造出可觀察的異常成交量;但在一個只有幾千美元的池子裡,可能只需要幾百美元的來回交易,就能把報價推到任意水準,而且交易量本身微小到不容易觸發監控警報。
這也是為什麼「這個資產的市值看起來有多少」跟「這個資產的流動性實際有多深」是兩個必須分開檢視的指標——攻擊者製造出來的帳面市值可以是天文數字,但底層流動性池可能薄得不堪一擊。
協議設置最低流動性門檻,是不是就能完全防堵這種攻擊?
最低流動性門檻能大幅提高攻擊成本,但不是萬靈丹。門檻設多高本身就是一個需要持續調整的參數——如果門檻設得太低(例如只要求 5 萬美元流動性),對攻擊者來說依然是可負擔的成本;如果設得太高,又可能把真正有潛力的新專案擋在門外,影響協議的資產多樣性與競爭力。
更根本的問題是,單一門檻無法應對「先養大流動性池、再一次性抽走」的變種手法——攻擊者可以分階段操作,先合法地建立一個看起來夠深的流動性池通過門檻審核,等到代幣被接受為抵押品後,再透過其他方式抽走大部分流動性,讓池子事後變回淺池。這也是為什麼多數審慎設計的預言機系統,會把最低流動性門檻跟 TWAP、白名單審核期等其他機制疊加使用,而不是只依賴單一防線。
TWAP(時間加權平均價格)具體是怎麼提高操縱成本的?
TWAP 的核心邏輯是不採信單一時間點的報價,而是取一段時間窗口(例如過去 30 分鐘)內的價格平均值。這代表攻擊者如果想把 TWAP 報價拉抬到目標水準,不能只在一個瞬間拉高價格然後立刻執行攻擊,而必須在整個時間窗口內持續維持這個被拉高的價格——這意味著攻擊者需要投入的資金與交易次數會隨時間窗口拉長而顯著增加,因為套利者或其他市場參與者可能會在這段期間內進場交易、把價格拉回正常水準,攻擊者必須不斷用資金對抗這股拉力。
這也是為什麼 TWAP 常被視為對抗閃電貸類型攻擊特別有效的防禦——閃電貸的資金必須在同一筆交易內借入並歸還,沒有辦法跨越一個時間窗口持續操縱價格,TWAP 天生就能抵消這種攻擊模式。但 Drift 事件裡,攻擊者使用的是分階段、跨越數天布局的手法,如果協議的 TWAP 窗口設置不夠長,依然有被跨越多個區塊、逐步拉抬價格突破的空間。
身為一般存款人,我要怎麼知道自己存款的協議接受哪些資產作為抵押品、這些抵押品的預言機設計是否穩健?
多數借貸協議會在官方文檔或介面上公開列出「已核准的抵押品資產清單」,這是第一個該查的地方——如果清單裡出現你完全沒聽過、市值來路不明的代幣,值得進一步追查。第二步是查該資產的預言機報價來源,通常會在協議的技術文檔或 GitHub 裡標註使用的是哪個預言機服務(例如 Chainlink、Pyth 等第三方預言機網路,或協議自建的內部報價機制),第三方預言機網路通常會整合多個交易所的數據並套用 TWAP,相對於協議自建、只讀取單一淺池報價的機制更穩健。
第三步,如果協議有公開的風險參數文檔,可以查該資產是否設有借貸上限(supply cap)——即使某個資產的預言機設計有疑慮,只要協議把它能被借出或用作抵押品的總額度設得夠低,單一資產出問題造成的損失上限也會被控制在可承受範圍內,這是評估整體風險時值得一併考慮的緩解機制。
如果有人告訴你,只要花幾千美元,就能讓一個剛創造出來、沒有任何實際用途的代幣,被一個管理數億美元資產的借貸協議承認為合格抵押品,聽起來像是天方夜譚。但這正是 2026 年 4 月造成約 2.85 億美元損失的 Drift Protocol 攻擊事件裡,其中一個關鍵環節——攻擊者鑄造了一枚名為「CarbonVote Token」的假代幣,用極少的資金操縱它的鏈上報價,最終讓協議的價格預言機把這枚代幣當成價值約一美元的合法資產。理解這個手法怎麼運作,能幫助你判斷一個協議的預言機設計是否真正經得起考驗。
攻擊者不會選擇操縱 SOL 或 USDC 這類流動性深厚的資產,因為那需要動用龐大資金,而且極易觸發市場異常監控。更聰明(也更便宜)的做法,是直接創造一枚全新的代幣——沒有任何過去的交易紀錄,沒有既有持有人會在價格被拉抬時賣出獲利了結,也沒有市場既定的「合理價格」可以拿來對照。這枚代幣就像一張白紙,攻擊者可以在上面寫下任何他們想要的數字。
接下來,攻擊者只需要在去中心化交易所(例如 Solana 上的 Raydium)建立一個極小規模的流動性池,可能只有幾千美元。這裡的關鍵原理是滑點:在流動性極淺的池子裡,即使是小額交易,也會對報價造成劇烈影響。攻擊者只需要用自己的資金,在池子裡反覆買賣(也就是洗售交易),就能把鏈上顯示的價格推到任何想要的水準——在 Drift 事件裡,攻擊者鑄造了 7.5 億枚代幣,只用了幾千美元的流動性,就把單價洗到接近 1 美元,帳面市值瞬間膨脹到理論上高達數億美元,儘管實際上根本沒有這麼多資金流入。
洗價本身不會直接造成損失,真正的風險發生在協議的預言機系統把這個被操縱的報價當成可信數據來源的那一刻。如果一個借貸或衍生品協議的預言機設計沒有做到以下幾件事,就可能被這種手法突破:沒有設置最低流動性門檻(也就是低於一定規模的資金池,報價直接被視為不可信,不予採納);沒有採用時間加權平均價格機制(單一時間點的報價容易被瞬間操縱,跨時間窗口平均能大幅提高操縱成本);沒有設置新資產上架的觀察期或白名單審核流程(任何代幣一旦被創造就能立即被接受為抵押品,等於完全沒有審查關卡);沒有搭配多數據源交叉驗證(只依賴單一交易所或單一流動性池的報價,等於把整個系統的信任押在一個容易被操縱的來源上)。
傳統的智能合約漏洞(例如重入攻擊)可以透過程式碼審計找出來,因為問題出在邏輯本身;但預言機操縱攻擊利用的是「市場數據本身可以被偽造」這個更根本的問題,程式碼邏輯可能完全正確地執行了「讀取鏈上報價、據此計算抵押品價值」這個流程,只是它讀到的報價從一開始就是假的。這也是為什麼多份分析 Drift 事件的報告都強調,僅僅通過程式碼審計不足以保證預言機系統的安全性,審計通常聚焦合約邏輯是否有漏洞,不一定涵蓋預言機的價格來源設計是否足夠穩健。
如果你把資金存入一個借貸協議的流動性池,你的資金安全某種程度上取決於其他用戶存入的抵押品是否真的值那個價格——如果協議接受了一批被操縱報價的假抵押品,等到真相曝光、這些代幣的真實價值歸零時,協議可能出現壞帳,而壞帳最終往往由存款人集體承擔。下次評估一個協議時,除了看它接受哪些資產作為抵押品,也值得查一下這些資產的預言機報價來源是單一淺池,還是有多數據源與時間加權機制的保護。