# Curve Stablecoin

稳定币一直被投资者称为“CRYPTO圣杯”，特别是在DeFi Summer以后，链上流动性市场开始繁荣，稳定币这块战场成为了兵家必争之地。

在2020-2021，DeFi最活跃的这几年，去中心化稳定币，抵押稳定币，算法稳定币层出不穷，更有每条链都要发行一个稳定币的趋势。

在今年各大头部协议也开始依靠自身的市场资源，纷纷进入稳定币战场，比如Curve的crvUSD，Aave的GHO。

究其原因有以下几点：

1. 稳定币是链上的价值尺度和支付手段，应用场景的刚需，不管是手续费还是铸币税，其带来的真实业务收入非常可观。
2. 成为链上美联储，吸收大量TVL，控制巨额的流动性。
3. 为协议本身的业务扩展提供最具便利性，成本最低的基础设施。

### 1 稳定机制

Curve Finance 的稳定币设计属于超额抵押型稳定币。这种稳定币是通过使用其他资产（如 ETH）作为抵押来铸造（或借用）的，基于特定的利率和抵押品的价值。这种类型最著名的协议是 MakerDAO 的 DAI。

在这种模型下，协议通常会设置一个最低保证金率，当用户的保证金率到达此阈值之后，清算者可以来清算掉用户的部分资产，以保证稳定币的稳定和协议健康。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FJirWaCxLsBZgR8m13PHN%2Fimage.png?alt=media&#x26;token=095ec6a9-d908-4d3e-8bed-118044d5d554" alt=""><figcaption></figcaption></figure>

上图中假设Bob作为稳定币用户，Lucy作为清算人的一种场景。当用户的仓位触及清算线时，通常系统会鼓励清算人的介入来偿还债务。

最终清算人获取利润，被清算的用户面临罚金，系统清除了债务。

这套机制里存在一个待优化的 **清算问题。**

上面这种类型的稳定币架构总是有一个清算机制。清算是指当抵押品的价值下跌到某个价格时，导致抵押品的价值不再支持借用的稳定币，此时，抵押品（部分或全部）将以有利的价格被拍卖，以填补借用稳定币的缺口。然而，这种清算模型存在几个问题：

1. 当大额资产被清算时，许多抵押品将流入市场，导致市场波动。
2. 在大多数情况下，清算者会出售被清算的抵押品以获利，导致抵押品的价格再次下跌，从而导致另一波清算，形成连环清算。
3. 在某种特殊情况下，如果资产价格持续急速下跌，清算人没有充足动力入场，或者外部流动性不足以支持清算量，清算不能及时完成，协议将会面临坏账的风险。
4. 清算过程不可逆，被清算的用户将遭受永久性损失。即使抵押品的价格反弹，已经被清算的抵押品也无法恢复。

鉴于这些问题，Curve 希望通过以下方式改进稳定币设计中的清算问题：

* 不依赖外部 DEX，因为 DEX 流动性是不可控的。
* 在清算发生时尽量减少用户的损失。
* 逐渐清算用户的抵押品，并在价格反弹时将其转换回来。

### 2 稳定币架构

#### 2.1 核心功能区域

1. Controller 和 LLAMMA 主要负责与抵押品清算相关的工作 (蓝色框部分)。
2. Monetary Policy、PegKeeper 和 Stable Pool 主要负责将稳定币锚定到 1 美元相关的工作(绿色框部分)。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FS62TKMUxnXWOhdpFmpjT%2Fimage.png?alt=media&#x26;token=b945e192-42b4-4364-a083-485042b255d0" alt="" width="563"><figcaption></figcaption></figure>

#### 2.2 核心合约互动

1. 稳定币用户通过与Controller合约互动来管理仓位，比如：\
   \- 创建仓位 create\_loan\
   \- 添加抵押品 add\_collateral\
   \- 移除抵押品 remove\_collateral\
   \- borrow\_more, repay, liquidate….
2. Controller合约控制用户资产与LLAMMA交互。
3. 套利者通过套利交易与LLAMMA交互协助清算。
4. Monetary Policy获取当前利率，以调控利率。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2Fxs2n5WPRp1yFyIvSJuZM%2Fimage.png?alt=media&#x26;token=28216adf-7df6-4ff8-aae9-38e94ab43ae6" alt="" width="563"><figcaption></figcaption></figure>

### 3 抵押品与清算

#### 3.1 LLAMMA

LLAMMA是crvUSD特有的借贷清算AMM算法，它的特点是在抵押品的价格低于特定价格时，池中的抵押品将逐渐变为 crvUSD。相反，当价格高于特定价格时，crvUSD 将逐渐变为抵押品。

通过LLAMMA完成清算，也被市场上称之为“软清算”，它相比较传统的抵押清算算法，最大的特点是当抵押品价格回归时，用户可以回收抵押品。

下图以 ETH 做为抵押品为例，对LLAMMA的工作原理进行解释。

* P\_Oracle（横轴）：外部价格。
* P\_AMM（纵轴）：内部价格。
* 蓝色线为一个斜率为 1 的直线，表示 P\_Oracle​ 外部价格的变化。
* 红色线表示 P\_AMM​ 内部价格的变化。
* P\_CU 和 P\_CD 分别表示某个 band 范围内的上下限价格（内部价格）。
* P\_UP 和 P\_DOWN 分别表示外部价格坐标中选定的两个参考边界价格（外部价格）。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FZcbro3LwnUEWFm9nXgwC%2Fimage.png?alt=media&#x26;token=eaf04a2e-8e58-422d-a943-9c58184128d0" alt="" width="563"><figcaption></figcaption></figure>

**价格变化：**

1. 当 ETH 价格高于 P\_UP​（黄色范围）时，该band范围内的所有资产将转换为 ETH。
2. 当 ETH 价格低于 P\_DOWN​（绿色范围）时，该band范围内的所有资产将转换为 crvUSD。
3. 当价格位于 P\_UP​ 和 P\_DOWN​ 之间（白色范围）时，资产将处于部分 ETH 和部分 crvUSD 的状态，ETH 和 crvUSD 的比例由价格变化决定。

**套利清算：**

那么crvUSD和抵押品 ETH 之间的转换是谁来完成的？

「套利者」

当外部价格 P\_Oracle 变大时，P\_CD、P\_CU 和红色线的斜率高于蓝色1:1线，所以它代表内部价格会以更快的速度变大。同理当外部价格 P\_Oracle 变小时，内部价格也会以更快的速度变小。

**所以，在LLAMMA的设计中，即使不发生交易，LLAMMA 内部价格也会随着外部价格自动改变，且变化速度更快。**

这种价格变化速度上的差异创造了套利空间，鼓励套利者介入来完成上面提到的LLAMMA池中 ETH 和 crvUSD 之间的转换。当 ETH 价格下跌时，AMM 内部价格会下跌的比外部价格更多，套利者会在 LLAMMA 中买入价格相对较低的 ETH，因此 LLAMMA池中的 ETH 减少而 crvUSD 会增加。

{% hint style="info" %}
从用户的角度来看，当处于高价时，用户的资产 ETH 原封不动的放在流动性内。当价格下跌至用户流动性区间上限价格时，开始将用户的 ETH 逐渐转换成 crvUSD。当价格下跌至区间下限价格时，用户的所有 ETH 都被转换成了 crvUSD。
{% endhint %}

套利者从 LLAMMA 中买入 ETH 的行为其实就是在清算用户的资产，并为LLAMMA注入了crvUSD，而套利者的获利即为买入的价差。假设转换完成后LLAMMA得到的 crvUSD 大于用户的债务，那么协议将不会有坏账风险，并且整个过程不需要传统借贷协议中清算者角色的介入。

***

📖 下面用图示来详细展示这个过程：

当 P\_AMM > P\_Oracle 时，套利者将开始存入 ETH 并取出 crvUSD，P\_AMM 线（红色）将开始向右移动，直到 P\_AMM = P\_Oracle 再次平衡。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2F6qnoRbLdsS8s7Nujavz7%2F2ac2fcbe-dde3-4172-8338-294f89c5bdcb_510x714.gif?alt=media&#x26;token=c1d25ee2-7a7a-43be-8731-be0e9a15af24" alt="" width="255"><figcaption></figcaption></figure>

当 P\_AMM < P\_Oracle 时，套利者将开始存入 crvUSD 并取出 ETH，P\_AMM 线（红色）将开始向左移动，直到 P\_AMM = P\_Oracle 再次平衡。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FrqgmKeuNjv6yibIbhoDN%2F14ea1cbf-9e48-4fb0-b789-43897bf8e90a_510x714.gif?alt=media&#x26;token=91710361-187d-4344-b893-c3db35e48895" alt="" width="255"><figcaption></figcaption></figure>

***

#### 3.2 Band

首先，LLAMMA 将抵押品价格范围划分为不同的价格段，称为band。当用户存入抵押品时，他们需要提供：

1. 抵押品的数量
2. 存储抵押品的band数量
3. 要铸造多少crvUSD

抵押品将根据要存储的band数量被平均分成小块，并然后根据当前价格和铸造的 crvUSD 存储在由band组成的连续价格范围内。下图显示了在计算后将 10 ETH 存储在 5 个band中的分布情况，每个带状存储 2 ETH 的 5 个小块。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2F0QuBUCVc68r5g0QlO6n2%2Fimage.png?alt=media&#x26;token=07ad641a-5ae8-432f-853d-8b9d0b5c834e" alt="" width="563"><figcaption></figcaption></figure>

此外，应注意，每个band都有一个上限价格（P\_UP​）和下限价格（P\_DOWN​）。前一个band的上限价格也是下一个band的下限价格。

例如，上图中 band0 的上限价格（3000）也是 band−1 的下限价格（3000）。每个band的上下限价格代表该band的清算开始和结束价格。当价格达到上限价格时，存储在该band中的抵押品将开始被清算，直到价格达到下限价格，表示清算结束（意味着该band中的所有抵押品已转换为 crvUSD）。

**对比传统的抵押清算模式**

1. LLAMMA自带流动性，不依赖外部的流动性支持，缓解了因外部流动性不足而无法及时清算抵押品的情况。
2. 减少了对清算者角色的依赖，缓解出现清算不及时的情况。
3. 清算是连续性而非阶段性的，每次资产被卖出时比较贴近市场价格，缓解用户损失。
4. 如果抵押品价格反弹，crvUSD会自动买回抵押品，一定程度上解决了永久性损失的问题。[^1]

#### **3.3 Oracle**

LLAMMA对Oracle数据进行了EMA处理，以防止剧烈波动对协议造成不必要的损失。具体细节我们在 [#llamma](https://cmdefi.gitbook.io/cmdefi/home/defi-qu-zhong-xin-hua-jin-rong/curve-oralce#llamma "mention")  中进行了讨论。

### 4 锚定机制

* 第一道防线：PegKeeper调整货币发行量
* 第二道防线：Monetary Policy调控利率

#### 4.1 PegKeeper

PegKeeper 也叫做 stabilizer，是一组用来帮助 crvUSD 价格维持锚定的合约，其工作原理是通过铸造和销毁稳定币来调整稳定币的供应量，以此来影响市场价格。这些合约主要用来和 crvUSD 相关的池进行交互。

* 当 price >1 时，意味着 crvUSD 供给不足，PegKeeper 会在不需要抵押的情况下 mint 出 crvUSD 并添加到 Curve V1 池子中，以增加 crvUSD 的市场供给。
* 当 price<1 时，意味着 crvUSD 供给过剩，PegKeeper 会将之前添加的流动性从 Curve V1 池子中移除，以减少 crvUSD 的市场供给。
* 由于添加时 crvUSD 价格高，移除时 crvUSD 价格低，PegKeeper 在偿还债务后会剩余一些 LP token，这些 LP token 就是 PegKeeper 产生的利润。这些利润会在每次外部调用者调用 PegKeeper 合约时将产生利润的 1/1000 分给外部调用者作为 gas 补偿和激励，剩余的利润则会保留作为协议收益。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FNDiKxYZlR1Adgpdsjh0Q%2Fimage.png?alt=media&#x26;token=307b7b92-a762-48c6-98f2-7b568d530e2e" alt="" width="539"><figcaption></figcaption></figure>

这个方法会存在一个问题，就是PegKeeper铸造crvUSD能力和销毁能力是完全不对等的。理论上PegKeeper拥有在无抵押的情况下无限铸造crvUSD的能力，但是在销毁crvUSD的时候，它只能回收的上限源于之前铸造了多少crvUSD的量。

也就是说，会出现一种情况，PegKeeper已经回收了全部额外铸造的crvUSD，但仍然无法使其锚定到1。

这种情况下，就需要第二个锚定措施 Monetary Policy。

#### 4.2 Monetary Policy

一个动态调节借贷利率的组件，用来根据市场供需调节利率，进一步帮助稳定 crvUSD 的价格锚定，主要用于 crvUSD < 1 的情况。

如下图，当价格大于1时，借款利率极小。当价格小于1时，借款利率迅速上升。这将导致铸造 crvUSD 的借款人迅速偿还债务，否则他们的抵押品可能会被清算。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FjbSeQcCt9WQHbUEvaUz6%2Fimage.png?alt=media&#x26;token=0803e3e4-197f-462d-bf3b-40231da71e6b" alt="" width="375"><figcaption></figcaption></figure>

***

参考文献：

[Introduction to the Principles and Architecture of Curve Stablecoin](https://mirror.xyz/albertlin.eth/H0m3nyq65anotTWhTdWDIWEfMPOofNPy-0qyARYXNF4)

[Curve Stablecoin 非权威解读](https://paco0x.org/curve-stablecoin/)

[Curve Stablecoin whitepaper](https://github.com/curvefi/curve-stablecoin/blob/master/doc/curve-stablecoin.pdf)

[Curve LLAMMA - Desmos](https://www.desmos.com/calculator/zepny2jhpq?lang=zh-CN)

[crvUSD Primer](https://typefully.com/eli5_defi/crvusd-primer-xpEjCZW)

[Dan Robinson: Curve’s new stablecoin design is built around a dynamic AMM that sells as the price goes down, to gradually liquidate collateral. This design is cool but introduces a path dependence that makes it hard to predict.](https://twitter.com/danrobinson/status/1595090420740112385)

[^1]: 即使抵押品可以在LLAMMA中自动买回，但无法做到完全无损失，因为 LLAMMA 的算法设计会使内部价格比外部价格变化更快，在价格下跌时始终都会让 Pool 中的资产折价被卖出。当价格回升时，LLAMMA 并不一定能帮用户买回所有的原始抵押资产，这是因为 LLAMMA 主动改变 AMM 价格的行为将导致 [AMM Path Dependence](https://vitalik.ca/general/2017/06/22/marketmakers.html) 问题。
