本文详细介绍了 Curve LlamaLend 协议,围绕 CrvUSD 稳定币构建的高效借贷系统,强调了其独特的 AMM 设计及软清算机制,这些机制可以有效保持用户资产的健康状况并减少传统清算的风险。文章还探讨了协议的核心合约结构和功能,以及在市场波动时的操作逻辑。通过对技术细节的深入分析,突出了 Curve LlamaLend 在 DeFi 领域的重要性和潜在应用。
这系列文章中的下一个借贷协议是 Curve LlamaLend。这是一个非常有趣的借贷协议,围绕 CrvUSD 稳定币构建,并使用其核心组件:一个 AMM。CrvUSD 的特点包括一个引人入胜的数学模型和稳定化机制,这些机制与价格区间(类似于 Uniswap V3 中使用的tick)一起工作,但方式不同。此外,CrvUSD 采用软清算,完全不同于传统的清算。该协议主要用 Vyper 开发,以及许多其他显著的功能。
Curve LLamaLend 是一组市场,以 CrvUSD 作为稳定币进行借贷:
让我们仔细看看吧!
Curve 借贷使用与 CrvUSD 相同的机制和代码。这是有道理的,因为大多数算法稳定币的债务/抵押品头寸与借贷非常相似。主要区别在于 crvUSD 中铸造新的稳定币,而在借贷中,则是从借贷池中提取:
这两种机制的“核心”是 LLAMMA,一个设计非常有趣的 AMM。在讨论借贷时,我们不能忽视 LLAMMA 的机制,因为它为整个协议添加了独特的属性。为了更好地理解 CrvUSD 的稳定化机制,这种机制当前被用作 Curve 借贷中的可借资产,查阅 CrvUSD 白皮书是非常有用的。
LLAMMA 中的流动性以“区间”的形式组织,这类似于 Uniswap V3 的tick(在这里描述),每个区间负责自己的价格范围。Curve 的 AMM 在单一价格区间内的运作类似于 Uniswap V3。交换的操作也“交叉”区间,当前区间左侧仅剩可借资产的区间,右侧则是抵押品的区间:
但在稳定币和借贷协议中,我们总是有一个抵押资产的外部预言机价格。这些协议中的 AMM 不仅被用作 DEX,还被用作能够将用户头寸靠近“健康”状态的稳定化机制。CrvUSD(和借贷)的这一美丽理念是设计一个 AMM,刺激市场制造商持续交换抵押品与可借代币的方向,从而导致用户头寸变得更“健康”。
让我们看一张白皮书中的图像:
我们看到外部预言机价格 p 0, “当前区间”价格范围(白色部分),以及我们的 AMM 中的价格 p AMM。当一个交换移动到下一个区间(退出白色区域)时,AMM 的价格相比线性变化更为陡峭(绿色和黄色部分)。因此,左移和右移当前区间的操作会“向市场前瞻”,设置买入/卖出价格低于/高于市场。这刺激交易机器人做出更大规模的交换,并更快地接近市场价格。
这种当前区间外价格的非线性变化是通过改变整个(!)价格网格来实现的。与 Uniswap V3 不同的是,Uniswap V3 中tick之间的间隔是固定的。在 Curve 中,附加到当前区间上下方的价格是非线性变化的,这为市场制造商提供了更多的激励,在“正确”的方向上进行交换。
用户的抵押资产被放置在区间中,LLAMMA 中的交换同时将抵押品转化为可借代币,反之亦然。如果这一操作朝着正确的方向进行,它将购买增加其价格的“降低”抵押品(当抵押品价格下降,用户变得更加“不健康”时),反之则是出售抵押品。
这种设计使得 Curve 的 AMM 能够“支持”借贷机制,形成自动清算的激励和“软清算”。因此,CrvUSD 中的清算(如果价格没有大幅波动)实际上并不是清算。它是一种持续的抵押资产与债务资产的交换,反之亦然,通过交易机器人将用户头寸调整向“健康”状态。在价格突然变化的情况下,Curve 也有传统的“硬清算”,类似于其他协议,允许为了偿还用户的债务而清算其抵押品。
软清算使得用户的头寸并不固定,因为用户的抵押品可以分为两部分:一部分为抵押资产(例如,WETH),另一部分为稳定币(例如,CrvUSD),这两者之间的比例根据抵押品价格的变化而变化。
这种设计非常优美,但在价格急剧变化且 AMM 价格与预言机价格之间的差异显著时也会出现一些有趣的情况。在这种情况下,用户的抵押品可能完全转化为稳定币。在这种情况下,用户头寸的“健康”变得非常奇怪,比如将 CrvUSD 作为抵押,将 CrvUSD 作为债务,这增加了一些复杂性。
现在,让我们看看协议是如何构成的。
Curve LLamaLend 铸造/借贷的核心是三种核心合约的组合:Vault、AMM(LLAMMA)和 Controller。这些合约共同构成一个借贷市场,支持两种代币 — 一种可借用,另一种作为抵押品。该组合有两种部署变体:OneWayFactory 和 TwoWayFactory。
OneWayFactory 为 crvUSD 和某些抵押代币创建一个借贷市场。另一方面,TwoWayFactory 创建两个相互连接的借贷市场,使代币的角色“相反”(“多头”市场和“空头”市场)。例如,在第一个市场中,crvUSD 作为可借代币,WETH 作为抵押品,而在第二个市场中,角色反转:WETH 成为可借代币,crvUSD 作为抵押品。
第一步是初始化工厂 在这里, 在这里我们设置 AMM、Controller 和 Vault 合约实现的地址,以及预言机地址、货币政策参数和其他设置。初始化后,工厂可以部署新的借贷市场(目前仅支持 CrvUSD 作为稳定币)。
工厂包括几个创建 Vault 的方法(用户共享持有合约),使用已经 存在的 AMM 池(如常规 Curve 的交换池)作为价格预言机或使用一个 自定义的 价格预言机。每个新的借贷市场创建都需要设置 A 参数(放大系数),该参数作为 Uniswap V3 tick中 tickSpacing 的类似(在文章中描述 在这里)。
接下来是创建 Vault,该过程涉及在 这里 创建 AMM 和 Controller。
在 TwoWayLendingFactory 的情况下,我们创建 两个 vault。这里的关键点是两个借贷市场使用 相同 的价格预言机。使用两个不同价格预言机的设置使得 TwoWayFactory 尤其易受预言机价格操纵攻击,因为即使是小的价格变化也可能导致 vault 之间的套利机会放大。
借贷的主要驱动是在 AMM.vy 合约中实现的。LLAMMA 的最重要方面与市场价格和内部 AMM 价格之间的联系有关,这在 这里 中有描述。
LLAMMA 中最重要的函数是 _p_oracle_up(),计算公式为 p_base * ((A - 1) / A) ** n — 对于第 n 个区间的上限价格(代码中的公式计算比较复杂)。该函数控制每个价格区间的价格范围,当修...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!