【研报精选】新型稳定币Curve Stablecoin的原理及架构

Mirror发布于2023-02-27更新于2023-02-27

文章摘要

LLAMMA 是 Curve 是进行抵押品清算的演算法,通过在不同的价格范围内分散抵押物来减少清算时的损失。

Curve Finance 不管是在 Stablecoin Swap 的 AMM Algorithm, 或是广为被其他人效法的 veToken 经济模型设计,都是 DeFi 领域极具代表性的创新。去年底 Curve Finance 提出他们的稳定币白皮书,不禁让人好奇这次他们又会为 DeFi 生态端出什么新的菜色。在研究过程有一些心得和理解,希望可以帮助大家更了解 Curve 稳定币的设计。

Curve 稳定币类型及解决问题

Curve Finance 稳定币设计上是属于超额抵押类型的稳定币。这类稳定币是藉由把其他资产譬如 ETH 当成抵押品,根据特定的利率及抵押品的价值去 mint (或 borrow)出稳定币。最著名的 Protocol 就是 MakerDAO 的 DAI。把 ETH 当成抵押品抵押到 MakerDAO 中,并借出 MakerDAO 的稳定币 DAI 。在这里只是抵押的对象改成 Curve Finance 来借出 Curve 稳定币。

Figure1:

清算问题

此种类型的稳定币架构都会有清算(Liquidation)机制。清算是指当抵押品价格下降到特定价格时,造成抵押品价值可能无法支撑借出的稳定币。此时抵押品(全部或部分)会以较优惠的价格拍卖出去,借此填补借出稳定币的缺口。目前的清算模式存在几个问题:

•当鲸鱼的资产被清算时,会有很多抵押品流入市场,易造成市场波动。

大部分情形下清算者会把清算后的抵押品卖掉来获利,这举会造成抵押•品价格再次下降,而又造成另一波的清算。

•清算者通常会去 CEX/DEX 卖掉拍卖来的抵押品。若交易所缺乏流动性会造成借贷平台的坏帐 (例子)。

•被清算后使用者将会承受永久损失。即便抵押品价格回升,抵押品也已经被清算无法恢复。

有鉴于此 Curve 在设计稳定币时希望可以透过以下方式来改善清算问题。

•不依赖外部的 DEXs。因为 DEX liquidity 是无法掌控。

•当清算发生时尽量减少用户的损失。

•逐步清算用户的抵押品,并在价格反弹时将其转换回来。

Curve Stablecoin Overall Architecture

上图是白皮书中的架构图,大约可以分成两的区块。

•Controller 和 LLAMMA 主要负责抵押品清算相关的工作(上图蓝色框框的部分)。

•Monetray Policy,PegKeeper 和 Stable Pool 主要负责锚定稳定币在 1 USD 的相关工作(上图绿色框框的部分)。

本篇文章内容主要会着重在 Contoller 跟 LLAMMA 介绍,但 Monetray Policy 相关工作也会有简单的说明。所以让我们从今天的重头戏 LLAMMA 开始吧!

LLAMMA (Lending-Liquidating AMM Algorithm)

LLAMMA 全名是 Lending-Liquidating AMM Algorithm,顾名思义是一种跟借贷及清算有关的 AMM 演算法。 Curve 主要是用这套演算法来清算抵押品。

AMM 代表会有一个根据 LLAMMA 演算法的 Swap Pool,这里我们先称之 LLAMMA Pool。使用者可以透过 Controller 把他们的抵押品 deposit 进去 LLAMMA Pool 并 mint 出稳定币。 LLAMMA Pool 中的资产就是抵押品及 Curve 稳定币。以下文章中我们统一使用 crvUSD 代称 Curve 稳定币,并使用 ETH 当作抵押品来举例。

LLAMMA Pool 最大的特色是当抵押品(ETH)价格低于某个特定价格时,Pool 中的抵押品会逐渐变成 crvUSD。反之若高于某特定价格则 crvUSD 会逐渐变成抵押品(ETH)。

听起来挺神奇的吧!在了解这个转换过程之前,我们需要先知道使用者把抵押品放在 Pool 中发生了什么事情。下图是各合约互动的示意图,让大家对于 LLAMMA Pool 实际在架构中扮演的角色可以有更清楚概念。

合约互动流程示意图

Dynamic Range and Oracle Price

Band

首先 LLAMMA 将抵押品价格区间切成不同的价格区段称之为 band。当使用者 deposit 抵押品时需要提供:

•抵押品数量

•想要存进多少个 band 中

•想要 mint (or borrow)出多少 crvUSD

抵押品会根据 想要存入多少 band 的数量去切分抵押品成相同数量且等分的小块,再以目前价格及 mint 出的 crvUSD来将这些小块存放在由 band 组成的连续价格区间中。如下图是将 10 ETH 经计算存入 5 个 band 中的分布情形,先将 10 ETH / 5 = 2 ETH 的五个小块存入连续的 5 个 band 中。

此外需要注意每个 band 都会有一个 upper price (P_UP)和 lower price (P_DOWN)。同时上一个 band 的 upper price 会是 下一个 band 的 lower price 。举例来说譬如上图中的 band 0 的 upper price (3000)同时也是 band 1 的 lower price(3000)。每个 band 的 upper price 跟 lower price 就代表这个 band 开始清算和结束清算的价格。当价格到达 upper price 时,存放在这个 band 的抵押品就会开始清算,直到价格到达 lower price 时就结束清算(代表这个 band 的抵押品已全数变成了 crvUSD)。

Oracle Price

在 LLAMMA 中有另一个重要的角色就是 Oracle Price, Oracle Price 就是指外部的抵押品价格(可以想成是目前市场价格)。 LLAMMA 设计 Oracle Price 角色来达到抵押品在特定价格会开始进行 ETH <-> crvUSD 转换的行为。详细如何做到我们会在后面的章节来说明。这里我们先假设 Oracle Price 为 P_ORACLE。 LLAMMA Pool 中的价格我们假设为 P_AMM。

关于 oracle 的设计,确定的是每次在获得外部的价格后,会先做 EMA 处理才会使用此价格。以免外部价格剧烈波动造成用户损失,另一方面也增加操纵 oracle price 的难度。因为目前服务还没有上线,所以无法确定会用哪个服务当作 oracle source(撰写文章当下 Curve 社群有在投票是否要针对 stablecoin 机制建立 EMA Pool)。

How to Work in LLAMMA Pool

下图是 band 区间中的价格变化情形(用 ETH 当作抵押品)。当 ETH 价格高于 P_UP(黄色区间)时, band 区间的资产会全部变成 ETH。当 ETH 价格低于 P_DOWN(绿色区间)时, band 区间的资产会全部变成 crvUSD。当价格在 P_UP 和 P_DOWN 之间(白色区间),资产会处于部分 ETH 和部分 crvUSD 的状态,根据价格变化决定 ETH 和 crvUSD 所占的比例。

中间紫色的线是指P_ORACLE 的价格变化,红色的线是指 P_AMM 的价格变化。可以把 P_CD 和 P_CU 想成是为了找出这个 band 的 upper price 和 lower price 所制造出来的两条方程式。

LLAMMA pool price diagram

当 P_ORACLE 和 P_AMM 相等时就会是图中间蓝色的点,此时 Pool 中的 ETH 价格跟外部的价格是一致。

Oracle Price 上涨

从上图(LLAMMA pool price diagram)可以发现,当价格开始上升的时候(橘色线的部分),会发现红色(P_AMM)的线会比紫色(P_ORACLE)的线上升的更快。当P_AMM > P_ORACLE 时就会产生一个套利空间,使得外部的套利者(Arbitrgeur)有动力存入 ETH 到 LLAMMA Pool 借以交换出更多的 crvUSD 来获利,直到 P_AMM = P_ORACLE再度达到平衡。过程中池子中的 ETH 的数量逐渐变多,crvUSD 的数量逐渐变少。当高过 P_UP 时,这个区间的就会只剩下 ETH。下图显示套利者在套利过程中 AMM price(P_AMM)变化情形(下图中 X 轴表示 oracle price, Y 轴表示AMM price。为了可以更清楚表示出价格位置,分别在 X 轴和 Y 轴都列出 oracle price 的橘色线)。

当 P_AMM > P_ORACLE 时套利者会开始存入 ETH 拿出 crvUSD,P_AMM 线(红)会开始往右移动直到 P_AMM = P_ORACLE 再度平衡。

Oracle Price 下跌

反之亦然,当上图中(LLAMMA pool price diagram)价格开始下降时(绿色线的部分),会发现红色(P_AMM)的线会比紫色(P_ORACLE)的线下降的更快。当P_AMM < P_ORACLE 时也会产生一个套利空间,使得外部的套利者存入 crvUSD 换取更多的 ETH,直到价格再度达到平衡。过程中池子中的 crvUSD 的数量逐渐变多,ETH 的数量逐渐变少。当低于 P_DOWN 时,这个区间的就会只剩下 crvUSD。

当 P_AMM <P_ORACLE 时套利者会开始存入 crvUSD拿出 ETH,P_AMM 线(红)会开始往左移动直到 P_AMM = P_ORACLE 再度平衡。 ( X轴:oracle price, Y 轴: AMM price,橘色线: oracle price)

LLAAMA Formulas

为什么 P_AMM 会上升或下降得比 P_OARCLE 来要快呢?这一点要从 P_AMM 的公式来看。

•LLAMMA Invariant 其中的 I, f 和 g 都是跟 P_ORACLE 有关的公式。表示 I, f, g 都会改变,不是固定的常数。

•x 和 y 则是指区间的 USD balance 和 ETH balance 。

•y_0 是当 P_AMM = P_ORACLE = P_UP 时的 ETH balance,可以先暂时将y_0 视为一个常数(实际上他也是跟 P_ORACLE有关函式)

•若把 band 区间排成一个数列,会发现是一个等比级数的数列。而 A 是决定这个等比数列的比例的数字。 contract 部署时就决定 A 是多少,所以 A 也是一个是不变量。

可以发现 P_AMM 只跟参数 f 和 g 有关,而 f 和 g 只会跟着 P_ORACLE 变动有关(其他几乎都是常数)。当 P_ORACLE 上升时,f 值会上升(平方关系会上升更快)且g 值会下降,P_AMM 上升的幅度会比 P_ORACLE 更多而导致 P_AMM > P_ORACLE。当 P_ORACLE 下降时,f 值会下降(平方关系会下降更快)且g 值会上升,P_AMM 下降的幅度会比 P_ORACLE 更多而导致 P_AMM < P_ORACLE。即使 LLAMMA Pool 没有任何 swap ,P_AMM也会随着 P_ORACLE变动,且P_AMM 的幅度都会比 P_ORACLE 更大,进而制造出一个套利空间来平衡池子的资产比例。

小结 LLAMMA

LLAMMA 是利用 P_AMM 上升和下降的幅度都大于 P_ORACLE 的方式,刻意制造一个套利空间让外部的套利者有利可图。当套利者去试图平衡池子中的资产比例时,其实就是在对池子中的资产做部分清算。这样的好处是清算是动态且持续,不会有一次清算大笔资产而导致市场波动。当价格回升时资产也会转换回抵押品而不会造成抵押品的永久损失。

Stabilizer and Monetary Policy

讲完了 LLAMMA 是如何解决清算抵押品问题,让我们回头简单说明一下什么是 PegKeeper 和 Monetary Policy 及他们是如何运作。 PegKeeper 和 Monetary Policy 则是 Curve Finance 用来锚定 crvUSD 在 1 USD 的机制。

PegKeeper

这是将 crvUSD 结合 curve pool 用来平衡 1 USD 机制。假设存在 crvUSD 与其他稳定币的 curve pool 。

•当 crvUSD price > 1 USD 时:表示 curve pool 里面的 crvUSD 太少(供不应求)。 PegKeeper 可以在无抵押品的情形下 mint 出新的 crvUSD 并deposit 到 Curve Pool,以增加市场中的 crvUSD。

•当 crvUSD price < 1 USD 时:表示 curve pool 里面的 crvUSD 太多(供过于求)。 PegKeeper 便会开始从 curve pool 中 withdraw 之前 mint 出的 crvUSD 并 burn 掉这些 crvUSD,以减少市场中的 crvUSD。

以上行为都是被定义在 PegKeeper contract 中,PegKeeper 可以被任何的 external caller 呼叫。呼叫 PegKeeper 锚定 crvUSD 时会产生利润,而这些利润会以 LP token 的形式回馈给 external caller。举例来说,假设 PegKeeper 一开始 mint 200 crvUSD,然后把这 200 crvUSD deposit 到 curve pool 拿到 300 LP token。等到 price 下降,只需要 200 LP token 就可以 withdraw 200 crvUSD。那剩下的 100 lp token 就会被 external caller 所拥有。

虽然这边是提到各 curve pool 去跟 crvUSD 组成池子,但比较可能作法猜测会是类似 3pool 类型的 pool 跟 crvUSD 组成池子。这样只要有一组 pegKeeper 就可以去调节 crvUSD 的价格。另外 Curve Team 可以用 CRV 投票在 crvUSD ↔ 3pool 这个池子来提高奖励,吸引人们去抵押铸造 crvUSD 的诱因。但这些只是个人猜测,还是要看实际上线后的情形才知道。

Monetary Policy

若 PegKeeper 已经 burn 完这些无抵押的 crvUSD 后, crvUSD 价格仍低于 1 USD 时该怎么办呢? Curve Finance 有另一套方法来拉高 crvUSD price,这个方法就是利用 Monetary Policy 来提高 borrowing rate。

https://www.desmos.com/calculator/cqtavnvhps?lang=en

可以看到当 price > 1 时, borrowing rate 会极小(趋近于 0) 。若 price < 1 时,borrowing rate 会上升极快。这会导致借出(mint) 出 crvUSD 的抵押者会赶快 repay ,不然抵押品可能会被清算。会发现其中 price 会影响 borrowing rate, 同样也会影响借款的金额。当然实际会上升多快还是要等 crvUSD 正式上线后才会知道。

TL;DR

•LLAMMA 是 Curve 是进行抵押品清算的演算法,通过在不同的价格范围内分散抵押物来减少清算时的损失。

•它通过比外部价格更大的变化幅度来产生套利机会来动态清算抵押品。当价格下跌时,抵押品会变成crvUSD,价格上涨时会变回抵押品。

•PegKeeper 铸造或烧毁无抵押 crvUSD 降低或提高 crvUSD 价格。 Monetary Policy 则是利用控制借款利率,以使 crvUSD 锚定在1美元。

•Curve Finance 这套机制设计得非常精妙,很值得再继续深入研究其中的各项实作设计。在理解 Curve 稳定币机制时,发现 PACO 大大在研究 Curve 稳定币方面造诣很深。从他的文章和影片都获益良多。其中图表都是从 PACO 的资料得来,强烈建议想要了解更深入可以去看 PACO 大大的文章和影片,我会一并放在 Reference 中。

以上是研究 Curve 稳定币过程中自己的一些理解和整理。

你可能也喜欢

交易

现货
合约
活动图片