本文深入探讨了 DeFi 领域中坏账的概念、产生原因以及协议应如何处理坏账。文章详细解释了坏账的定义,即用户债务超过其抵押品价值的情况,并分析了坏账不可避免的原因,例如市场波动和交易拥堵。此外,文章还提供了协议在实施和战略层面上处理坏账的建议,包括风险参数设置、清算激励措施以及坏账分配方案。
什么是坏账,为什么它是不可避免的,以及你应该如何处理它
根据定义,这打破了任何超额抵押借贷协议或稳定币的核心不变性:即每个用户的债务必须小于或等于他们的抵押品(或者,更好的是,他们的抵押品的 LTV)。
然而,这是不可避免的。它会在任何借贷协议或稳定币中在某个时候发生。
本文解释了所有内容:
什么是坏账
为什么坏账不可避免
协议应该如何处理坏账
什么是坏账
注意:本节介绍了坏账的概念。如果你已经熟悉这个概念,请随意跳到“为什么坏账不可避免”部分。
当用户的债务大于他们的抵押品时,就会发生坏账。
在 DeFi 中,大多数借贷协议只允许超额抵押贷款:如果你要借 1,000 美元,你必须提供超过 1,000 美元的抵押品。
鉴于 DeFi 的免许可和匿名特性,如果用户的债务价值超过他们的抵押品,他们可以直接放弃该钱包并创建一个新的钱包。
没有人可以强迫他们偿还债务,因此如果一个仓位变为水下,那就等于损失了。即,坏账。
那么这在实践中是什么样的呢?
坏账的逐步描述
对于视觉学习者,下图显示了 Alice 在第 4 步时的仓位,当时她的仓位仍然是健康的(即当抵押品大于债务时);以及在第 6 步时的仓位,当时她的仓位变成了坏账:
抵押品价格下跌前后 Alice 的仓位
坏账可以通过以下方式产生:
用户的抵押品价格下跌,导致其抵押品价值低于其债务价值(如上图所示)
用户的债务价值因利息累积而增加,导致其高于其抵押品价值
用户的借入资产价格上涨,导致其债务价值高于其抵押品价值
为什么坏账不可避免
如何避免坏账
DeFi 开发者很聪明。他们提出了一个非常巧妙的解决方案来避免坏账:清算。
通常,借贷协议或稳定币协议会设置 2 个变量,以抵押品价值的百分比来衡量:
贷款价值比(LTV)
清算阈值/偿付能力阈值(LT)
LTV 代表用户可以借用的抵押品的最高百分比。例如,80% 的 LTV 将允许拥有 1,000 美元抵押品的用户借入高达 800 美元。
LT 代表一个百分比,如果用户的债务超过该百分比,他们就可以被清算。例如,90% 的 LT 将允许清算人清算一个拥有 1,000 美元抵押品的借款人的仓位,如果该仓位的债务超过 900 美元。
一张供视觉学习者参考的图表:
抵押品 LTV 和 LT 图示
注意:并非所有协议都设置不同的 LTV 和 LT。一些协议允许在 LTV 被突破时立即进行清算。
为什么这种机制并不总是有效
尽管这种机制很巧妙,但它并不完美。
原因是,要实际清算一个债务仓位,需要发生两件事:
必须执行清算交易
到执行时,清算必须是有利可图的
我们通常认为这些事情是理所当然的,但在剧烈波动时期,这两件事都可能出错:
在非常紧张的市场条件下,几个连续的区块可能会被填满,从而阻止交易被执行(#1)
如果交易延迟执行,抵押品的价格可能会进一步下跌,从而使清算变得无利可图并恢复原状(#2)
区块链活动增加导致 gas 价格上涨可能会使清算无利可图(#2)
如果抵押品的价格在单个区块中大幅下跌(例如,通过大量抛售代币),清算可能会变得无利可图(#2)
如果发生任何这些事情,导致清算没有及时执行,协议将留下坏账。
这不是一个理论上的情况。快速搜索“[协议名称] + 坏账”将显示几乎任何借贷或稳定币协议的坏账案例,通常损失数百万美元。
鉴于坏账是一件坏的且不可避免的事情,协议应该如何处理它?请继续阅读以了解。
协议应该如何处理坏账
本节分为 3 个主题:
在实现中处理坏账
从战略上处理坏账
坏账中的常见问题,以及如何缓解这些问题
在实现中处理坏账
在实现中处理坏账意味着在代码中定义当协议中累积坏账时会发生什么。
每个协议的具体实现会有很大差异,因此在这里我只讨论主要概念和含义:
预期坏账
检测坏账
解决坏账
分配坏账
👉 任何有债务的系统都必须考虑到坏账的可能性。
例如,假设一个代码库有以下计算:
// Vulnerable: uint256 freeAssets = collateral - debt;
易受攻击:uint256 freeAssets = collateral - debt;
在这种情况下,坏账事件将导致 freeAssets 计算下溢,可能导致对运行此部分代码的函数的 DoS 攻击。
一个考虑到坏账可能性的实现可能是这样的:
// Fix: if (collateral >= debt) { ...
修复:if (抵押品 >= 债务) { ...
👉 系统必须主动检测坏账,以便可以解决它。
例如:
// badDebtTrigger = true;
badDebtTrigger = true;
在这个例子中,如果债务大于抵押品,badDebtTrigger 变量被设置为 true,允许协议根据它采取行动,如果需要的话。
注意:上面的第 1 点和第 2 点是必须的:如果没有实现,它们可能会导致协议中的关键问题。第 3 点和第 4 点是可选的,基于协议的设计决策。
👉 一旦检测到坏账,代码必须决定如何解决它。一些选项:
什么也不做,保持像往常一样运行
阻止退出功能(提款、存款或新的借款)
更新风险参数,如 LTV/ LT
更新清算参数,提供更高的激励
触发紧急模式
👉 坏账是协议遭受的损失,这种损失必须被分配并由某人承担。
问题是:由谁。
这是一个每个协议必须做出的设计决策。一些选项:
最后的提款人承担损失:这有点常见,尽管可能是所有选项中最不公平的 - 用户像没有发生损失一样提取他们的资金,直到协议耗尽资金来处理提款。然后,最后的提款人损失他们所有的资金。我不推荐这个选项。
损失按比例分配给用户:这是一个中间解决方案:相对公平且相对简单。损失可以根据用户的资产、债务或协议决定的任何其他标准按比例分配给用户。
损失由指定实体承担:这可能是最安全的选择,尽管也是最复杂的。协议可以指定一个实体来承担坏账,从而消除对“普通”用户的任何影响。这是一个战略和经济决策 - 更多信息请参见下面的“从战略上处理坏账”部分。
注意:如果协议选择指定实体选项,它还必须选择一个备用选项,如果指定实体耗尽资金。
从战略上处理坏账
协议在处理坏账方面有两个战略目标:
阻止坏账发生
在坏账发生时补救坏账
阻止坏账主要涉及设置适当的风险和清算参数,并积极管理这些参数。
设置适当的风险和清算参数包括:
仔细选择哪些资产可以作为抵押品提供和借用
根据其风险,单独为每个资产设置 LTV 和 LT
设置对清算人足够有吸引力但不至于过度的清算激励
设置清算激励,以便激励清算人尽快清算可清算的仓位
积极管理参数包括:
跟踪每个已加入资产的风险参数,如波动性和流动性
相应地调整参数,包括在必要时停止使用资产
确保有一个适当的清算人网络与协议集成
如上所述,在坏账发生时分配坏账最安全的选择是让指定实体承担它。
这可以通过几种方式完成,其中大多数涉及预留协议中产生的利息的一部分作为保险基金,该基金将用于在坏账发生时弥补坏账。
这可以由协议拥有和管理,或者为社区去中心化。
例如,一个去中心化的选项将允许用户质押资金,这些资金将获得通过贷款产生的利息的一部分。当发生坏账事件时,用户的全部资金(包括他们的质押和应计利息)将可用于弥补损失。
坏账中的常见问题,以及如何缓解这些问题
坏账会导致许多问题,尤其是在没有适当的预期、检测、解决或分配的情况下。
以下是一些常见问题,以及如何缓解这些问题:
用户可以抢先坏账事件 描述:用户可以通过提取他们的资金来避免影响,从而抢先坏账事件,不公平地增加其他用户的影响。 缓解:这可能是最难缓解的问题,大多数协议承认风险而不是缓解它。一种可能的缓解方法是拥有一个两步提款流程,并在两者之间设置一个坏账触发器。
用户可以故意使他们的仓位变成坏账 描述:坏账是一种损失,任何用户都不应该能够随意地对协议造成损失。除了故意对他人造成损失之外,能够故意造成坏账的用户可能会利用它从协议或其他用户那里提取资金。 缓解:设置适当的风险参数,例如 LTV/ LT、每个资产的最大敞口、风险隔离,并执行积极的风险监控,包括衡量可用流动性。
坏账仓位可能无法清算 描述:根据定义,坏账用户的净资产为负数。如果没有为此进行设计,它可能会触发下溢,如上面“在实现中处理坏账/ 1. 预期坏账”示例所示。 缓解:设计负净资产的可能性。
用户可以滥用坏账激励 描述:如果协议实施坏账激励,用户可能会尝试“自然地”获得坏账仓位(即,开立风险仓位并等待市场波动将其变为坏账),以滥用这些激励。 缓解:必须设计坏账激励,使其在经济上不应该有意义获得一个坏账仓位然后清算它。
坏账没有得到适当的分配(在上面“在实现中处理坏账/ 4. 分配坏账”中详细介绍)。
在部分清算期间没有考虑坏账 描述:如果部分清算 90(即 0 抵押品,10 债务),则 10% 坏账的仓位(例如 90 抵押品,100 债务)将变为 100% 坏账。这在绝对术语上没有区别,但它确实使坏账在比例术语上更糟。 缓解:只允许完全清算坏账仓位,或在剩余抵押品中按比例分配坏账。
感谢你阅读到这里。 我希望你喜欢这篇文章。
我是否遗漏了任何关于如何处理坏账的重要信息? 请在评论中告诉我。
- 原文链接: x.com/philbugcatcher/sta...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!