部分清算 I —— 当机制产生坏账时

S3v3ru5 发布于 2026-03-25 阅读 195

文章深入探讨了 DeFi 借贷协议中部分清算机制的逻辑缺陷。核心观点是:当“清算阈值(LT)× (1 + 清算奖励)”大于或等于 1 时,清算操作反而会降低头寸的健康因子,导致抵押品被耗尽并产生协议坏账。作者通过数学推导和案例分析,揭示了高 LT 资产(如 eMode 模式)面临的配置风险,并对协议开发者和审计者提出了防御建议。

部分清算机制及其潜在风险

部分清算(Partial liquidation)通过增量方式恢复抵押不足的仓位,与全额清算相比,它减少了借款人的抵押品损失。协议参数——清算阈值($LT$)和清算奖励(Liquidation Bonus),决定了部分清算中的抵押品损失。然而,某些参数组合可能会导致协议产生坏账并耗尽借款人的抵押品,即使该仓位最初仅处于轻微的不健康状态。

本文将探讨部分清算的工作原理、决定其有效性的参数条件、违反该条件时的后果,并为协议开发人员和安全研究人员提供实践指导。本分析主要针对单一抵押品和单一债务资产的仓位,类似的分析也可以扩展到多抵押品和多借贷资产的仓位。

背景知识:仓位与健康因子

借贷仓位由存入的抵押品和未偿还的债务组成。协议通过**健康因子(Health Factor, HF)**来追踪偿付能力:

HF = (抵押品价值_usd * 清算阈值) / 债务价值_usd

清算阈值($LT$)是抵押品价值的风险调整权重,反映了协议为该资产设置的安全缓冲。当 $HF \ge 1$ 时,仓位是稳健的;当 $HF < 1$ 时,仓位符合清算条件。

示例:

  • 抵押品 = $1000 ETH, $LT = 0.80$
  • 债务 = $850 USDC
  • $HF = (1000 \times 0.80) / 850 = 0.941$(可清算)

部分清算机制的设计初衷

全额清算通过偿还所有债务并没收所有抵押品来解决资不抵债问题。无论违规程度大小,它都会对借款人造成最大可能的损失。例如,一个 $HF = 0.99$ 的仓位在全额清算下也会失去全部抵押品。

部分清算允许清算人在每次调用中仅偿还部分未偿债务。协议会奖励清算人略多于偿还债务价值的抵押品,差额即为清算奖励(Liquidation Bonus)

没收的抵押品 = 偿还金额 * (1 + 奖励)

**平仓因子(Close Factor, $f$)**限制了清算人在单笔交易中可以偿还的债务上限:

最大偿还额 = f * 总债务

每一轮清算都会同时减少债务和抵押品,使 $HF$ 回升向 $1$。一旦仓位恢复健康,清算停止。借款人保留剩余抵押品,清算人获得奖励。在这种模型下,借款人的损失与抵押不足的程度成正比,而不是整个仓位的大小。

为什么偿还债务能提高健康因子?

如果清算人拿走的抵押品多于他们偿还的债务,为什么 $HF$ 反而会提高?

这是因为 $HF$ 不是原始抵押品与原始债务的比率,而是**计入抵押品(Counted Collateral)**与债务的比率,其中抵押品价值按清算阈值进行了折减。

假设一个仓位:抵押品 = $1000,$LT = 0.80$,债务 = $850:

  • 计入抵押品 = $800
  • 债务 = $850
  • $HF = 800 / 850 = 0.941$

如果清算人以 $5%$ 的奖励偿还 $100$,没收 $105$ 的抵押品:

  • 没收的抵押品 = $105(原始抵押品减少额)
  • 计入抵押品减少额 = $105 \times 0.80 = $84($HF$ 分子实际减少的金额)
  • 偿还的债务 = $100($HF$ 分母减少的金额)

更新后的数值:

  • 新的计入抵押品 = $800 - $84 = $716
  • 新的债务 = $850 - $100 = $750
  • 新的 $HF = 716 / 750 = 0.955$(从 0.941 上升)

债务下降了 $100,而计入抵押品仅下降了 $84。虽然没收的 $105 抵押品面值为 $105,但在计算健康因子时,协议仅将其视为 $84。

关键比率:$LT \cdot (1 + bonus)$

推广到一般情况,清算人偿还 $r$ 的债务,获得 $r \cdot (1 + bonus)$ 的抵押品。协议在计算健康因子时,仅将抵押品的 $LT$ 部分计入:

  • 移除的计入抵押品 = $r \cdot (1 + bonus) \cdot LT$
  • 移除的债务 = $r$

移除的计入抵押品与移除债务的比率: $\frac{r \cdot (1 + bonus) \cdot LT}{r} = LT \cdot (1 + bonus)$

这个**关键比率(Key Ratio)**决定了清算后 $HF$ 的走向:

  1. $LT \cdot (1 + bonus) < 1$:每偿还 $1 债务,移除的计入抵押品少于 $1。计入抵押品相对于债务增加,仓位可以恢复。
  2. $LT \cdot (1 + bonus) = 1$:每偿还 $1 债务,正好移除 $1 计入抵押品。$HF$ 仍会下降,仓位恶化(因为分子分母同时减少相同数值,且分子小于分母时,比率会变小)。
  3. $LT \cdot (1 + bonus) > 1$:每偿还 $1 债务,移除的计入抵押品超过 $1。计入抵押品相对于债务减少,仓位恶化。

数学推导

定义缺口 $G$ 为债务与计入抵押品之间的差额: $G = D - C \cdot LT$

当仓位不健康时,$G > 0$。恢复健康意味着将 $G$ 降至零或以下。

经过一轮清算(偿还额为 $r$)后,新的缺口为: $new_G = (D - r) - (C - r \cdot (1 + bonus)) \cdot LT$ $new_G = D - r - C \cdot LT + r \cdot (1 + bonus) \cdot LT$ $new_G = (D - C \cdot LT) + r \cdot ((1 + bonus) \cdot LT - 1)$ $new_G = G + r \cdot (Key_Ratio - 1)$

缺口的变化量为 $r \cdot (Key_Ratio - 1)$。由于 $r > 0$,$(Key_Ratio - 1)$ 的符号决定了缺口是缩小还是扩大。

坏账风险:当部分清算使协议状况恶化

当 $Key_Ratio \ge 1$ 时,清算过程本身就会产生坏账。随着每一轮清算缺口不断扩大,仓位持续恶化,直到抵押品在所有债务偿还前被耗尽。剩余的债务将没有抵押品支撑,迫使协议承担损失。

这种情况适用于该配置下所有不健康的仓位,无论初始缺口有多小。

案例分析:部分清算 vs 全额清算

假设配置如下:

  • 抵押品 = $1020.00, $LT = 0.97, bonus = 0.05, close_factor = 0.50$
  • 债务 = $1000.00
  • $HF = (1020 \times 0.97) / 1000 = 0.9894$(可清算)
  • $Key_Ratio = 0.97 \times 1.05 = 1.0185$(不可恢复)

1. 部分清算过程

每一轮缺口增加 $r \cdot 0.0185$:

  • 第 1 轮:偿还 $500.00,没收 $525.00。剩余抵押品 $495.00,债务 $500.00,$HF 0.9603,缺口 $19.85
  • 第 2 轮:偿还 $250.00,没收 $262.50。剩余抵押品 $232.50,债务 $250.00,$HF 0.9021,缺口 $24.47
  • 第 3 轮:偿还 $125.00,没收 $131.25。剩余抵押品 $101.25,债务 $125.00,$HF 0.7857,缺口 $26.79
  • 第 4 轮:偿还 $62.50,没收 $65.62。剩余抵押品 $35.62,债务 $62.50,$HF 0.5529,缺口 $27.94
  • 第 5 轮:偿还 $31.25,没收 $32.81。剩余抵押品 $2.81,债务 $31.25,$HF 0.0873,缺口 $28.52
  • 第 6 轮:偿还 $2.68,没收 $2.81。抵押品耗尽。

结果:抵押品耗尽,协议产生 $28.57 的坏账。缺口从最初的 $10.60 扩大到了 $28.57。

2. 全额清算过程

清算人在一次调用中偿还全部 $1000 债务,并获得所有可用抵押品:

  • 清算人偿还:$1000.00
  • 没收抵押品:$1020.00(受限于余额,实际奖励上限本为 $1050)
  • 清算人净利润:$20.00
  • 剩余债务:$0.00
  • 协议坏账:$0.00

结果:债务被完全清偿,没有产生坏账。

结论

关键比率(Key Ratio) < 1 时,部分清算对借款人更友好。但当 关键比率(Key Ratio) $\ge 1$ 时,部分清算反而会导致抵押品被耗尽并留下坏账。协议开发者必须确保其清算阈值和奖励参数的乘积严格小于 1,以维持系统的偿付能力。

  • 原文链接: s3v3ru5.github.io/posts/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论