鏈上清算:Aave 與 Compound 的機制,以及圍繞它們的機器人生意
Aave 上的清算是一個持續存在的公開要約:替別人償還債務,以 5%到 15%的折扣拿走他們的抵押品。這個要約被寫進了不可篡改的合約裡,不需要任何許可,不需要 KYC,也不需要與協議建立任何關係——只要在倉位越過清算線的那個區塊裡,成為第一個呼叫 liquidationCall() 的地址即可。這是加密世界裡最純粹的競速:獎金精確到分,觸發條件(大體上)可預測,唯一的問題是你的基礎設施能否比所有人都先到達終點。
本文將從頭到尾拆解這臺機器:決定倉位何時變得可清算的精確數學公式、為什麼 Chainlink 預言機機制讓清算變得可預測而非被動反應、一個有競爭力的清算機器人到底由什麼組成,以及為什麼這場競速的經濟效益已經被壓縮到大部分獎勵都流向了區塊構建者——並且越來越多地迴流給協議本身。文章最後,我們會將其與永續合約 DEX(GMX、Hyperliquid)的清算做對比,後者表面相似,實則是完全不同的遊戲。
機制:健康因子、閾值、獎勵
LTV 與清算閾值
Aave v3 上的每一種抵押資產都帶有兩個不同的風險參數,混淆它們是借款人最常犯的錯誤:
- LTV(貸款價值比)——開倉時你能針對該資產借出的最大比例。以 Aave v3 主網上的 WETH 為例,大約是 80%。
- 清算閾值——倉位變得可被清算的抵押率水平。對 WETH 而言,大約是 83%。
兩者之間的差距是刻意設定的緩衝區:你無法開出一個立即就能被清算的倉位。但這個緩衝區很薄——只需幾個百分點的不利價格波動,就能把"已借滿"變成"待宰羔羊"。
健康因子將一切彙總成一個數字:
其中 是抵押資產 的數量, 是其預言機價格, 是其清算閾值,而 是每筆債務倉位的價值。當 時,任何人都可以發起清算。沒有寬限期,沒有追加保證金通知,也沒有任何提醒。這個條件是惰性求值的——在有人呼叫該函數之前,什麼都不會發生。

清算折扣係數與清算獎勵
還有兩個參數決定了清算人能拿到什麼:
- 清算折扣係數(close factor)——單次清算可以償還的債務比例。Aave v3 的預設值是 50%。自 Aave v3.3 起,當 (即
CLOSE_FACTOR_HF_THRESHOLD)時,或者當倉位的抵押品或債務低於一個粉塵閾值(約 2,000 美元)時,清算折扣係數會跳升到 100%——小倉位不值得用兩筆交易來處理,而剩餘的粉塵會造成壞賬記賬問題。 - 清算獎勵(也叫清算罰金,取決於你站在哪一邊看)——清算人購買抵押品時享受的折扣。在 Aave 上,這是一個由治理按資產設定的固定價差:WETH 和主流穩定幣大約是 5%,波動性較大的長尾抵押品最高可達 10%到 15%。
Compound v2 的運作方式相同,只是常數不同:liquidateBorrow(),清算折扣係數為 50%,清算激勵為 8%(被沒收的 cToken 抵押品價值是被償還債務的 1.08 倍)。Compound v3(Comet)將流程重新設計為兩步:absorb() 把資不抵債的倉位拉到協議自己的資產負債表上(債務被計入儲備金而社會化,抵押品變成協議財產),而 buyCollateral() 則讓任何人都能以治理設定的折扣、用基礎資產從協議手中購買這些抵押品。實踐中,清算人會在一筆交易裡同時呼叫這兩個函數——absorb 本身不產生任何收益,利潤完全來自打折的 buyCollateral。
一個具體倉位的逐步清算
以有代表性的 Aave v3 WETH 參數為例:LTV 80%,清算閾值 83%,清算獎勵 5%。
初始設定。 你存入 10 WETH,價格 3,000 美元(共計 30,000 美元抵押品),借出 20,000 USDC。
清算價格。 當抵押品價值跌至 20{,}000 / 0.83 = \24{,}096HF = 1$,也就是 ETH 跌到2,410 美元——回撤 19.7%。聽起來很安全。但實際並不安全,因為 ETH 跌 20%就跟家常便飯一樣。
下跌發生。 預言機報出 ETH 價格為 2,350 美元。此時抵押品價值為 23,500 美元:
,因此適用 50%的清算折扣係數。一個清算人替你償還 10,000 USDC 的債務,並按預言機價格沒收價值 10{,}000 \times 1.05 = \10{,}500$ 的抵押品:
清算人的盈虧。 他們花了 10,000 美元,拿到了價值 10,500 美元的 ETH:一次函數呼叫帶來 500 美元的毛利,這還沒算上 gas 費、平倉 ETH 時的兌換成本,以及——最關鍵的——為了贏得這場競速而必須支付的競價成本(下文詳述)。
你的盈虧。 債務降至 10,000 美元,抵押品降至 5.532 WETH(13,000 美元)。新的健康因子:
請注意兩個令人不快的事實。第一,你為這次被迫去槓桿支付了 500 美元的代價——這筆獎勵完全來自你的權益。第二,新的 HF 1.079 只是勉強浮在水面上:ETH 再跌 7%,剩下一半倉位就會再次觸發清算。固定價差清算恢復的是償付能力,而非安全性。這種"清算一半、依然脆弱、再次被清算"的模式,正是級聯動態背後的微觀結構,我們在姊妹文章清算級聯作為交易訊號中對此有詳細討論。
觸發條件:清算是可預測的,而非被動反應的
這裡正是區分懂行者與外行的關鍵所在:在 Aave 和 Compound 上,倉位並不是在市場價格變動時變得可清算的。它們是在預言機更新時變得可清算的。
兩個協議都從 Chainlink 資料來源讀取價格。當以下兩個條件之一觸發時,以太坊主網上的 Chainlink 資料來源就會推送一個新的鏈上價格:
- 偏離閾值——鏈下聚合價格相對上一個鏈上數值的變動超過設定百分比:主網 ETH/USD 為 0.5%,大多數較小的資料來源為 1%到 2%。
- 心跳間隔——一個最長時間間隔(ETH/USD 為 3,600 秒),不論偏離程度如何,到時就會推送更新。
這帶來了一個深遠的後果。在兩次更新之間,鏈上價格從結構上就是陳舊的。如果幣安上的 ETH 價格下跌了 0.6%,而鏈上資料來源仍顯示舊價格,那麼每一個精明的參與者都知道,一筆預言機更新交易即將到來,也大致知道新價格會是多少,並且能夠——在更新落地之前——精確計算出哪些倉位在更新那一刻會跌破 。

因此,主導策略並不是"監視健康因子並作出反應",而是尾隨預言機更新交易(backrun):構建一個交易包,讓你的 liquidationCall() 緊跟在 Chainlink 的 transmit 交易之後、在同一個區塊內執行。預言機更新就是發令槍,而所有人都能看到裁判正在舉槍。這種交易包機制——向區塊構建者的私下提交、原子化的順序保證——與我們在三明治攻擊與記憶體池搶跑一文中講過的機制完全相同;清算不過是這套機制裡最正當的用法。
實踐中有兩個細節值得注意:
- 你甚至不需要在記憶體池中看到 transmit 交易。 由於鏈下聚合價格是可觀察的(你可以用 CEX 資料來源自己跑同樣的價格計算),你可以預測一旦偏離超過閾值,更新就必然會發生,並預先為價格上漲和價格下跌兩條路徑都構建好交易包。
- 心跳更新是可預期的流動性事件。 如果某個資料來源一小時內偏離都沒超過 0.5%,更新也會照常落地——如果價格已經朝著一大堆聚集在 附近的倉位不利的方向漂移了 0.4%,那麼這次"無害"的心跳更新就是觸發器。有競爭力的營運者會把"距離上次更新的時間"作為每個資料來源的一等訊號來追蹤。
這種可預測性也是協議最終決定回收這部分價值的原因。2025 年 3 月,Aave 集成了 Chainlink SVR(智慧價值回收):參與該機制的資料來源的預言機更新會通過 Flashbots MEV-Share 路由,尾隨交易的權利被拍賣,中標金額在 Aave DAO(65%)與 Chainlink(35%)之間分配,而不是完全流失給搜尋者和構建者。短短幾個月內,該系統已經處理了超過 3,200 萬美元的清算,並回收了超過 110 萬美元,捕獲了超過 80%的可歸集清算 MEV。可以把這看作一個市場定價訊號:公開競速已經變得如此高效,以至於協議可以直接拍賣終點線。
搭建機器人:四個子系統
一個有競爭力的清算機器人不是一個指令碼,而是一整套小型交易公司級別的基礎設施。四個子系統,每一個單獨看都很簡單,但合在一起對延遲極度敏感。

1. 倉位索引
你需要即時維護完整的借款人集合及其餘額。啟動階段是一次事件回填——自協議部署以來的每一筆 Supply、Borrow、Repay、Withdraw、LiquidationCall——折算成每個使用者當前的餘額,之後通過訂閱新日誌的 websocket 保持即時更新。Aave 的 getUserAccountData(address) 可以直接返回健康因子,但對 10 萬以上的借款人逐個、逐區塊呼叫是不現實的;嚴肅的營運者會在本地復刻協議的記賬邏輯(包括利率指數的數學計算,因為債務每秒都在增長),並把 RPC 呼叫留作校驗之用。
2. 帶預言機模擬的健康因子監控
核心迴圈並不是"用當前預言機價格計算 HF",而是"用預言機即將釋出的價格計算 HF":
def liquidatable_at(positions, feed, candidate_price):
"""Positions that cross HF < 1 if `feed` updates to candidate_price."""
out = []
for pos in positions.borrowers_exposed_to(feed):
hf = pos.health_factor(price_override={feed: candidate_price})
if hf < 1.0:
close_factor = 1.0 if hf < 0.95 else 0.5
repay = pos.debt_value * close_factor
seized = repay * (1 + pos.liq_bonus)
gross = seized - repay # the prize, pre-costs
out.append((pos, repay, gross))
return sorted(out, key=lambda x: -x[2])
deviation = abs(offchain_px - onchain_px) / onchain_px
if deviation > FEED_DEVIATION_THRESHOLD * 0.8: # update imminent
targets = liquidatable_at(positions, feed, offchain_px)
for pos, repay, gross in targets:
prepare_bundle(pos, repay, max_bid=gross - costs(pos))
按照與 的接近程度對倉位排序(用觸發每個倉位所需的價格作為鍵值的優先佇列),可以讓"熱門集合"保持較小規模。程式碼中的 0.8 這個係數就是整場遊戲的關鍵:你希望交易包在更新確定發生之前就已經構建並提交完畢,而不是之後。
3. 閃電貸驅動的執行
清算並不需要你自己有資本——你需要的只是大約 200 毫秒的區塊時間。典型的執行合約會原子化地完成以下步驟:
- 閃電借入債務資產(Balancer 手續費為 0 個基點,或 Aave 自身約 5 個基點——這與我們在利用閃電貸的原子套利一文中搭建的原語相同)。
- 呼叫
liquidationCall(collateral, debtAsset, user, repayAmount, false)——其中的false表示接收底層抵押品而非 aToken。 - 將沒收來的抵押品在報價最優的場所(Uniswap v3/v4、1inch 路由,或私下成交)兌換回債務資產。
- 償還閃電貸;剩下的部分就是利潤,並通過
require(profit >= minProfit)進行校驗,這樣一旦模擬結果過時,交易會直接回滾而不是虧本執行。
兌換這一環節正是拙劣機器人的死穴:沒收 10,500 美元的一個長尾代幣,意味著要吃掉它在 DEX 上的流動性,而平倉時的價格衝擊可能超過清算獎勵本身。有競爭力的營運者會模擬整個往返過程——包括平倉兌換——並跳過淨收益為負的清算,或者持有抵押品並用永續合約對沖,而不是直接在市場上拋售。
4. 交易包提交
最終的交易根本不會經過公開記憶體池。它會以交易包的形式提交給區塊構建者(或者在適用的情況下提交給 SVR/OEV 拍賣),內容大致是:"把我的清算交易緊跟在這筆預言機 transmit 交易之後執行,這是我的小費。"這筆小費就是你在一場"全付而輸家一無所獲"的拍賣中的出價,對手是所有跑過同樣模擬的其他機器人。這就引出了一個令人不太舒服的經濟學問題。
競爭格局:獎勵究竟流向了哪裡
學界的基準研究是 Qin、Zhou、Gamito、Jovanovic 與 Gervais 合著的《DeFi 清算實證研究:激勵、風險與不穩定性》(2021),該研究測量了 2019 年 4 月至 2021 年 4 月期間 Aave、Compound、MakerDAO 和 dYdX 上的清算業務:共 28,138 筆清算,總額 8.07 億美元,清算人合計獲利 6,360 萬美元。該論文還記錄了固定價差清算的結構性低效——這種折扣是一種粗糙的工具,相對於拍賣機制本應收取的價格,經常對借款人造成過度懲罰——並展示了清算人因策略過於簡單而在桌面上留下了可觀的錢沒有拿走。
那個時代的利潤不會重演,原因有三,且相互疊加:
gas 拍賣變成了構建者拍賣。 在 2019 到 2020 年,清算人在公開記憶體池中進行優先 gas 拍賣競爭;贏家超額支付 gas,輸家交易回滾,相當一部分獎勵留在了清算人手裡。MEV-Boost 出現之後,競爭轉移到了密封的構建者拍賣中。當 N 個機器人模擬出同一個確定性機會、算出同樣的利潤數字時,競價會趨向於把整個獎勵拍出去:獲勝的交易包通常會把毛利的 90%以上作為小費給構建者/驗證者。清算人的利潤空間被壓縮到只剩下誰的平倉定價略勝一籌、誰的成本略低,或者誰發現了別人沒看到的機會。
預言機尾隨交易主導一切,而這個空間正在被圈起來。 由於幾乎所有貨幣市場的清算都是由預言機更新觸發的,有利可圖的策略空間收窄到了一個點上:搶到緊跟在 transmit 之後的那個位置。SVR 一類的機制把這一點正式化——協議拍賣這個位置,並留下大部分收益。搜尋者能拿到的份額,從"獎勵減去 gas"縮水成"拍賣贏家的邊際利潤",而競價會把這個邊際利潤推向零。
剩下的是長尾市場。 2026 年新入局者現實可行的細分領域包括:構建者市場尚不成熟的鏈和 L2;獎勵參數定價失誤、競爭機器人較少的長尾借貸分叉協議;抵押品比較冷門、平倉兌換模擬真正有難度的倉位(靠更優的執行取勝,而非更低的延遲);以及壓力事件——MakerDAO 的"黑色星期四"(2020 年 3 月)就是典型案例,當時零出價拍賣讓清算人幾乎白白拿走了 830 萬美元的抵押品,因為當時幾乎沒有其他人的基礎設施還能正常運轉——這仍然是"這場競速在最難執行的時候回報最高"這一規律的經典範例。
誠實地估算一下預期收益:這如今是一門有真實固定成本(節點、與構建者的關係、跨十幾個部署的監控)的生意,卻要為一個已經被大幅折讓的獎池而競爭。它是一種極好的方式,能讓你比任何課程都更深入地瞭解 EVM 內部機制、預言機和 MEV 的運作原理。但作為謀生手段,它是一條艱難的路。
永續合約 DEX 的清算:同一個詞,不同的遊戲
永續合約 DEX 也有"清算",而且頭條數字更大——但其機制、進而其中的機會,在結構上是完全不同的。
GMX(v2): 倉位按預言機價格(Chainlink 低延遲資料流)與流動性池進行交易。當抵押品扣除虧損和費用後跌破維持保證金要求時,清算就會觸發,由守護者(keeper)——指定的基礎設施營運方,依據預言機簽名的價格——來執行,而不是一場公開競速。這裡沒有任何公開函數會向第一個呼叫者支付 5%的獎勵;剩餘抵押品按協議規則流入資金池。從搜尋者的角度看,這裡沒有什麼可贏的。
Hyperliquid: 清算在其 L1 自身的撮合引擎內部執行。當賬戶權益跌破維持保證金(以混合了 CEX 資料來源和訂單簿的標記價格來評估,這正是為了抵禦上文所述的那種預言機博弈)時,引擎會向訂單簿傳送清算市價單——大倉位會被拆分成多個小塊以限制衝擊。如果權益持續下跌到維持保證金的三分之二以下,該倉位會被一個屬於 HLP 內部策略的後備清算金庫以標記價格接管,自動減倉作為最後一層防線。清算的盈虧歸屬於 HLP 存款人——"清算人利潤"被社會化進了一個任何人都可以加入的金庫,而不是按單次事件競速爭奪的。
這對交易者意味著什麼:在貨幣市場上,遊戲在於成為清算人——這是一場為固定價差而展開的基礎設施競速。而在永續合約 DEX 上,清算人這個角色是封閉的,於是遊戲轉變為圍繞清算進行交易:清算價格可以從公開倉位中計算出來,被迫產生的成交流會衝擊一個可見的訂單簿,而聚集在一起的清算價位既是磁石,也是價格波動的燃料。這與 CEX 清算級聯可交易背後的邏輯是一樣的——我們在資金費率如何吞噬你的槓桿(槓桿成本正是把倉位推向懸崖邊緣的力量)和土狗幣拉盤出貨機制(刻意推動價格進入清算聚集區)兩篇文章中都提到過這一動態。將級聯作為一種訊號的完整處理——探測它們的形成過程、衡量它們的燃料、交易其中的超調——是本系列下一篇文章的主題。
應該記住什麼
貨幣市場清算是加密世界裡少有的一切都清晰可見的角落:觸發條件是一個公式,獎勵是一個由治理設定的常數,發令槍是一筆你能提前看到的預言機交易。這種清晰可見性在 2019 到 2021 年間催生了一門真正開放的生意,而後來——恰恰是因為一切都清晰可見——競爭把這個優勢壓低到只剩基礎設施質量的差異,並把剩餘部分拍賣回給了協議。這套機制仍然是必備知識:如果你在鏈上借款,這套數學就是你的風險模型;如果你圍繞被迫成交流進行交易,預言機的更新節奏和清算折扣係數會告訴你何時、以及會有多少;而如果你無論如何還是要搭建這個機器人,至少要清楚這筆錢最終真正流向了哪裡。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.