YFI创始人:“流动性挖矿” 概念的由来
本文来源于 YFI 创始人 Andre Cronje 在启动 yearn.finance 项目前撰写的一系列博客。
Yield Farming
我们开发成功了一款新的流动性挖矿(Yield Farming)产品,但在启动之前,我希望先解释几个概念。
在我们开发 iearn 的时候,我们拥有的选择是非常简单的:Aave、Compound、Dydx,还有 Fulcrum。每一个产品都为不同的资产提供了借贷市场。你可以出借手中的资产、赚取一份被动收入。
SNX(Synthetix)项目引入了带激励的流动性池(incentivized pool)的概念。他们希望大家来为他们的 sETH 池子提供流动性,也意识到了,最好的办法就是奖励早期参与者:如果你在 Uniswap 上为 sETH/ETH 交易对提供了流动性,你就可以得到 SNX 代币作为奖励。
像我这样比较老的玩家可能还记得 Havven,记得 SNX 的目标是做成一种新的稳定币,也就是 Synthetix 交易所中的 sUSD。但那时候只有 Uniswap V1,只有 资产/ETH 这一种流动性池,所以他们无法仅仅激励一个包含 sUSD/ETH 的流动性池,只能激励多个池子。
然后就是 CRV(Curve),一个新的、更简单的自动化做市商(AMM)。说它更简单,不是指它的公式更简单,而是在设计上更简洁。有了 Curve,大家就有了新的方法用稳定币参与获得被动收入,你只需提供 DAI 以及/或者 USDT,就可以赚到手续费了。
所以,一直关注这个领域的人,会知道已经有了一些方法,可以让我们赚取被动收益率了:
通过为 Uniswap 市场提供资产来获得交易手续费;
通过为 sETH/ETH 交易队提供流动性来获得 SNX 代币;
通过为 CRV 市场提供 DAI 或 USDT 来获得交易手续费;
通过在 Aave、Compound、Fulcrum 或者 Dydx 借贷市场存入资产来获得存款利率。
iearn V1 就是一个简单的借贷市场 LP(Liquidity Provider,流动性提供者),每当用户 存款/取款 就在不同的流动性池子间切换一次。
于是我们开始跟 CRV 商量推出一个自动切换收益率的流动性池(yield switching pool),后来就成为 CRV 的 Y Pool。Y Pool 结合了 iearn 和 CRV 的最优点,变成了一个最优化出借效率、自动切换获得手续费的池子。
当你在 y.curve.fi 上做交易时,你实际上是在交易 y token,比如 yDAI、yUSDT,等等,但池子本身会意识到 yToken 在交换 token,然后 存入/取出 底层的 token 资产。
然后,我们又开始跟 SNX 商量,因为他们即将要启动自己的稳定币交易池(就是为了 sUSD),而我们添加了另一层。这样流动性提供者就可以得到 yToken(存款收益)、curve.fi 的手续费,再加 SNX 奖励。
所以那时候,我们已经有了终极组合:自动切换被动收益率的 token + 交易手续费 + 项目的流动性激励。
然后各个项目就开始了激励流动性的战争。Compound 用他们的 COMP token 打响了第一枪,然后大家就蜂拥而上。Balancer 很快推出了 BAL,mStable 推出了 MTA,Fulcrum 推出了 BZX,而 Curve 蓄势待发要推出 CRV。(译者注:这些项目激励流动性的模式核心都类似:根据用户提供的资产体量,按比例获得增发的协议原生 token;2020 年 8 月 16 日,Curve 推出了 CRV。)
但是,这就使得 Yield Farming 变得更加复杂,仅仅根据存款利率来切换选择就不够了。
现在,策略会复杂成这样:
把 DAI 存入 compound,把 cDAI 存入 Balancer。通过 DAI 赚取 COMP、通过 cDAI 赚取 BAL,再加上 DAI 可获得的存款利率,和 cDAI 在 Balancer 交易池中的手续费。
把 DAI 存入 curve,然后把 curve token 存入 Synthetix Mintr 交易所。通过 DAI 赚取 CRV,通过 curve token 赚取 SNX;再加上在 curve 交易池中可获得的交易手续费。
把 DAI 存入 mStable,把 mStable 存入 Balancer。DAI 可获得一份利率,mStable token 在 Balancer 协议中获得 BAL;再加上可以从 Balancer 的交易池中赚取手续费。
把 USDC 存入 Maker,铸出 DAI,然后重复选项 1,2,3。
而且上面几种策略只是一些例子。几周以前,最好的策略是从 Compound 市场中借出 BAT;现在则是用 Compound 做 DAI 的刚刚。但是下一周,也许就是参与 Curve 的 SNX 池。
上面所有策略面临的共同问题是,这些策略的意义都基于 COMP、BAL、MTA、SNX、CRV,等等,的价值。而所有这些 token 的价格都是会浮动的。这也意味着,所有这些策略都要依赖于价格信息传输机制。在撰写文本之时,还没有 COMP、BAL、MTA、SNX 和 CRV 的价格信息传输机制,除非你使用 Uniswap 交易池或 Balancer 交易池中的价格作为指数;不过一旦你用了,就准备好自己的流动性被闪电贷吸干吧。
本文的目的是想告诉大家,流动性挖矿(Yield Farming)已经变得很复杂了,而且我们预计它以后会变得越来越复杂。所以我们需要提供一种新的产品,不是简单地在这些选项中作选择,而是培育出新的选项(instead of trying to choose between these options, seeds these options)。
更能感知收益的自动化做市商
我们先从几个基本的例子开始
假设你持有 BAT ,你有以下几个选择:
将 BAT 存入 Compound ,赚取存款利息和治理代币 COMP
将 BAT 存入 Aave 赚取利息。
卖掉 50% 的 BAT ,用这笔钱买入 ETH ,将 BAT 和 ETH 存入 Uniswap 的 BAT/ETH 流动性池,赚取手续费,并承担无常损失(impermanent loss)。
卖掉 50% 的 BAT ,用这笔钱买入 ETH ,将 BAT 和 ETH 存入 balancer 的 BAT/ETH 资金池,赚取手续费和治理代币 BAL ,并承担无常损失。
再变得复杂一点:
将 BAT 存入 Compound ,获得 cBAT ,将 cBAT 和 ETH 存入 balancer 的 cBAT/ETH 资金池,赚取手续费和 BAL ,并承担无常损失。从表面上来看,你以为你赚取的是 COMP 和 cBAT 的利息收益。
实际上,是 Balancer 的资金池在赚取 COMP(而不是你),而且 balancer 的资金池也在赚取 cBAT(这部分收益将由套利者获得,因此严格来说,你赚取的是交易费,而非 cBAT 的利息收益)。虽然你的投资策略看似很明智,但是最后的收益近似于直接将 BAT 和 ETH 存入 balancer 的资金池。
从中,我们可以发现以下几个问题:
流动性池(而非流动性提供者)赚取了激励型代币,如 COMP、BAL 等。
流动性池(而非流动性提供者)赚取了代币的存款利息。
你必须卖掉 50% 的 BAT 来为池子提供流动性。(这一点对我们的解决方案来说至关重要,会在专门的文章中讨论)
从上述几点可知,现有的 AMM(自动化做市商)流动性池无法满足我们的需求,因此我们需要更能感知收益的 AMM 。
支持 Aave 代币(aToken)非常容易。aToken 都支持一个名为 redirectInterestStream 的函数,可以让你配置一个用来接收利息的地址。但是,这就意味着,你获得的利息不是以复利计算的。
Compound 代币(cToken)的价值虽然能基于其供应指数而增长,但也正因此,这些代币很难管理。这就需要 AMM 能够感知 cToken 的基础价值,而非 cToken 的价值。因此,所有互换交易和报价核查都要衡量基础价值,而非 cToken 本身的价值。
适用于 cToken 的方案也适用于 aToken,并且解决了复利问题。
引入这一变化之后,AMM 就能在持有 cBAT 或 aBAT 的同时进行 BAT/ETH 代币对之间的交易。
给 COMP 设计的方案非常简单,我们根据每一次内部余额(cBAT)的变化来衡量 COMP 余额的变化,并为其分配一个索引。
但是,我们希望支持将来有可能加入的所有代币,并且在余额没有改变的时候也重新分配。因此,我们对上述内容进行过修改,可以适用于任何代币,并增加了一个针对核心代币的地址查找功能。
以上就是第一部分——可感知收益的 AMM ,能让流动性提供者从提供最高利率的借贷市场里赚取利息,同时获得激励型代币(例如,COMP)。
下一篇文章将详细讲述,在你仅持有一种代币的情况下,我们是如何帮助你避免卖出 50% 来买入另一种代币的。
稳定币
在讲解下一块内容之前,我们需要先了解稳定币。
为什么 1 USDT 价值 1 美元?简单来说,如果我持有 1 USDT ,我可以可以找发行方 Tether 将 1 USDT 兑换 1 美元。因此,如果 USDT 的价格跌至 0.9 美元,我就会想方设法购买 USDT ,并将它兑换成 1 美元来套利,直至其价格回归 1 美元为止。如果 USDT 的价格涨至 1.1 美元,我就会想方设法用美元来 “铸造” USDT ,从中套利,直至其价格回归 1 美元为止。
同理,USDC 及其发行方 Circle ,还有 TUSD 及其发行方 Trust 也是如此。
那么 DAI 呢?DAI 是由 ETH ,而非美元背书的。我们可以提供价值 100 美元的 ETH ,然后铸造价值 100 美元的 DAI (实际上只能铸造价值 66 美元的 DAI ,这是清算系统用来维护 DAI 价格稳定的方式,但是简单起见,假设担保率是 100% 。)
如果 1 DAI 的价格是 1.1 美元,我们就可以使用 ETH 来铸造 DAI ,然后再用 DAI 换回 ETH 。假设你之前使用价值 1.5 美元的 ETH 铸造了价值 1 美元的 DAI 。现在,这个 DAI 的价值变成了 1.1 美元,你可以将它兑换成等值的 ETH ,这样依然比你的质押品价值低了 0.4 美元。(这就是为什么 DAI 有时会与美元脱钩)。
解决上述问题很容易,不是吗?只要我们能以价值 1 美元的 ETH 铸造价值 1 美元的 DAI 就可以了。这里的问题在于 ETH 本身具有波动性,如果 ETH 的价格下跌 1% ,整个系统都会不稳定,因为没有足够多的 ETH 能偿付 DAI 。
这就是为什么 Tether 等公司会惹上那么多官司。Tether 称其发行的 USDT 是以美元 1:1 足额背书的,也就是说,如果所有 USDT 持有者同时要求 Tether 兑付,Tether 能拿出足够多的美元吗?这是确保系统稳定的关键问题:当所有人要求兑付时,系统始终可以提供足够的基础资产。
因此,我们设计了一种新型稳定币(我们知道,同类稳定币够多了,但是从技术上来说,我们的不一样)。我们设计的是 AMM(自动做市商)转账机制。
每当我们创建一个新的 uniswap 流动性池时,都需要提供等价值的两种代币。假设你提供了价值 1 美元的 BAT 和价值 1 美元的 ETH 创建了一个 BAT/ETH 流动性池。这时,有人提供价值 1 美元的 DAI 和价值 1 美元的 ETH 创建了 DAI/ETH 流动性池。如果你想使用 BAT 兑换 DAI ,就要先在 BAT/ETH 池子中将价值 1 美元的 BAT 兑换成等值的 ETH ,然后再到 DAI/ETH 池子中兑换成等值的 DAI 。
在上述示例中,ETH 只起到了价值转移的作用。只要 1 ETH = 1 ETH ,则价值 1 美元的 BAT = 价值 1 美元的 DAI 。
引入了价值转移资产后,我们就可以做一些有趣的事情了。假设你提供价值 1 美元的 BAT 给这个新的 AMM 转账机制,就可以创建出等价的价值转移代币。如果有其他人提供价值 1 美元的 DAI ,也可以创建出等价的价值转移代币。
接下来就会发生一些有趣的事情:1. 我们只需要提供一种代币的流动性 2. 价值转移代币的价值等于系统中所有代币的价值总和 3. 如果交易者为这个系统注入了更多 A 代币,就要取出同等价值的 B 代币,从而遵守规则 2 。4. 如果价值转移代币的价值高于系统中所有代币的价值总和,交易者就面向该系统出售价值转移代币,并取出其它代币,从而遵守规则 2 。
我们已经上线了这个名为 Stable AMM 的流动性提供系统。该系统能够在保证内部稳定性的同时,获得更高的收益。
Scan QR code with WeChat