现代 DeFi 借贷协议是如何构建的 - 合集

  • mixbytes
  • 发布于 2024-09-21 12:27
  • 阅读 288

这篇文章深入探讨了现代去中心化金融(DeFi)借贷协议的实施细节,涵盖了多个前沿技术和理念,包括集中流动性、层次化协议和新型高效的数学模型。文章具有清晰的结构,通过不同借贷协议的对比,提供了丰富的实际案例,使开发者和审计员能够更好地理解并应对面临的挑战。

介绍

在我们关于现代借贷协议实现的系列文章中,我们探索了多种新协议,每个协议都有其独特的特征和实现技巧。现在,是时候将最重要的想法和实施见解汇聚在一起,以帮助 DeFi 开发者和审计员构建更高效、安全和创新的 DeFi 结构了。 开发新的借贷协议面临着一系列挑战,无论是从商业还是技术层面来看。在商业层面,需要确保借款人和供应商的安全性和激励机制,管理坏账等。在技术层面,则要考虑如何保持交易的可负担性,如何有效地进行清算,如何保护协议免受突发变化,以及如何保护其核心逻辑不被破坏。 这些问题的解决方案是复杂的——我们处理的是先进的数学模型、动态速率限制、协议内“范围”操作的额外聚合结构、多层架构等。在本文中,我们将详细探讨这些解决方案。与我们以前的讨论一样,我们不会将任何方法标记为严格的“好”或“坏”,因为考虑的范围太广。无论是处理经济问题的高级数学,还是具有强治理的更简单、安全的代码,或是完全无权限的设置,只有时间能证明哪种方法是最好的。

话虽如此,所有这些改进都应该被描述,以给 DeFi 开发者和审计员提供新的见解,帮助他们解决这些挑战。让我们开始吧。

集中流动性和范围内的操作

Uniswap v3

将价格区间分割为独立的 tick 的想法首次由 Uniswap V3 大规模实现,使流动性提供者能够在特定价格范围内放置自己的流动性。这些协议中的价格(两个资产之间的比率)由方程定义:ratio=G ,其中 G 是一个略高于 1.0 的值(如 1.0015 或 1.005),t 是一个有符号的“tick”(或“带”,或“桶”)编号。每个 t 的值代表某种固定比率(或范围)的价格:

Uniswap V3 的 ticks

这种方法的效率不仅在于流动性提供者能够精确定位他们的流动性,还在于算法能够跟踪“ticks”内的附加值。在 Uniswap V3 中,这导致了一个高效的收费系统,使 LP 可以在“ticks”范围内提供流动性,而无需对每个 tick 执行“每个”的操作。收取的费用也可以在不需要触碰范围内每个 tick 的情况下收集(只有下边界和上边界的 ticks 会受到影响( 文章))。

在借贷协议中,“ticks” 通常代表债务代币和抵押代币之间的比例。我们已经讨论过这些实施方案,如 CrvUSD LlamaLendFluid + Vault 协议和 Ajna。尽管所有这些协议都使用相同的价格范围概念,但它们应用该概念的方式各不相同。

CrvUSD LlamaLend

在 CrvUSD LlamaLend 中,每个“带”包含自己的流动性,并且协议还具有外部预言机价格。这允许“带”的流动性朝向预言机价格“移动”,不断地进行债务到抵押或抵押到债务的交换。这一过程使所有左侧的带完全处于债务资产中,而右侧的带完全处于抵押资产中(类似于 Uniswap V3 的 ticks)。在 CrvUSD 中,带的池还充当一个 DEX,允许市场制造商兑换债务和抵押的资产,反之亦然。这使得这些操作在当前带向实际市场价格更近的方向上变得更具盈利性。CrvUSD 中一个非常有趣的机制不仅包括当前价格带的“移动”,还包括整个价格范围规模的“调整”,使得带的范围变得“更宽”或“更窄”,以提高软清算的盈利性。同时,这种移动用抵押品替换掉不足抵押的债务,类似于传统借贷协议中的清算功能。

CrvUSD LlamaLend bands

Fluid Vault

Fluid Vault 协议同样使用集中流动性的概念,将池中的全部债务-抵押金额拆分为“ticks”,每个 tick 代表特定的债务-抵押比率。与 CrvUSD 相似,外部预言机价格决定下一个借贷者会落入哪个 tick。然而,协议的其余部分与 CrvUSD 有显著区别。

在 Fluid Vault 中,协议跟踪预言机价格的变化。当抵押价格下跌时,协议会开始在名为“分支”的特殊结构中聚合有关变为不足抵押的 ticks 的信息。这些分支用于将流动性从不足抵押的 ticks 转移到已抵押的 ticks,依次移除“坏”的流动性并将其放入“安全”的 ticks 中:

Fluid + Vault 的清算

这些在 Fluid Vault 中的操作并不是在“每个位置”基础上执行的,类似于 Uniswap V3 的收费系统,这种方式极为高效,因为在单个“清算”操作后,许多借款者的头寸同时变得“更安全”。

Ajna

Ajna 项目( 文章)使用相同的债务-抵押比率 ticks(或“桶”),但“无预言机”概念使该协议脱颖而出。每个借款者的位置属于特定的桶,表示债务单位的固定价格。借款者可以将其存款放入任何“允许”的桶中,其中“允许”意味着债务得到抵押的桶的范围(在 Ajna 中非常简单,因为每个桶直接代表债务和抵押之间的价格):

Ajna 的桶

Ajna 使用两个阈值来跟踪桶的范围:最低利用价格(LUP)和最高阈值价格(HTP)。协议中每项债务/抵押的操作都会使这些值向市场价格靠拢。与 CrvUSD 或 Fluid Vault 不同的是,Ajna 的操作无法聚合,而是需要与每个位置和桶进行直接交互。结果,没有操作的聚合。相反,Ajna 利用特殊的数据结构来跟踪桶中债务/抵押的部分总和(使用 Fenwick 树)和一个“最大堆”树以跟踪最大值。

所有使用集中流动性概念的协议——将流动性拆分为离散的桶/ticks/bands——方式各不相同。这种方法允许“软”清算、对多个位置的聚合操作,以及创建“无预言机”的机制。然而,它也要求对多个实体进行更细致的控制,并要求使用先进的数据结构才能足够高效...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
mixbytes
mixbytes
Empowering Web3 businesses to build hack-resistant projects.