一个新的 DeFi 项目 Curve.fi 目前是去中心化金融这个赛道中最火爆的明星。这个看上去非常「简单」、甚至有些「简陋」的新项目,只解决一个需求:稳定币之间的互换。
你没有看错。
稳定币之间的频繁互换,是不少业内人士的刚需,因为 USDT 出入金更方便,而 DAI 和 USDC 更合规。但是考虑到手续费高和流动性差,转换成本不低。Curve.fi 就要解决这个痛点。这个初创项目开发了基于以太坊的自动交易协议,专注于解决这个问题,同时又利用了开放式金融的可组合性,以此激励平台的贡献者。
简单来说,Curve 是一个利用了特殊算法、结合了「特定版 Uniswap」与「Compound」的去中心化交易所协议。称其为「特定版 Uniswap」,是因为该协议仅仅解决稳定币之间的互换。
Curve 已于今年 1 月上线了以太坊主网,但仍处于早期开发阶段,截止链闻发稿时,未公布合约审计结果。其界面也非常简陋(或者也可以说是「独特」),让人不禁怀疑这是开发者故意这样设计,模仿了 80 年代的电脑界面以体现目前的开发阶段。当然,这样似乎也能将不了解该产品风险的用户拒之门外。
不过 Curve 的发展速度却超过了很多人的想象。上线仅一个多月,Curve 已经被多个以太坊的去中心化聚合交易所接入。以 1inch 这个帮助用户选择最优路径(滑点最低)的交易所为例,2 月 17 日至 23 日当周,1inch 周交易量中排名第一的当属 Curve,占比 60%,是 Uniswap 的 3 倍、Kyber 的 6 倍。虽然近日数据有些滑落,但依旧占比很高。这多少也体现出,对用户而言,稳定币互换的需求非常迫切。
用户们喜欢用 Curve 来互换稳定币,是因为 Curve 的交易成本和滑点都极低,毕竟这才是稳定币的交易者最关心的因素。Curve 的自动做市算法是为稳定币交易场景定制的,比 Uniswap 的通用型算法更聚焦,所以通过该做市算法实现的交易滑点较低。另外,Curve 的交易手续费仅为 0.04%,相比之下,Coinbase 的 DAI/USDC 交易对的手续费为 Curve 的 12.5 倍。
另一方面,为 Curve 注入资金的用户还能获得超高的年化收益。为了增加协议中的资金量以满足更大规模的交易需求,Curve 为提供流动性的用户分配所有的手续费收益,并通过聚合第三方协议来获得额外收益,让投入资金的用户有机会获得约 20% 的年化收益率——相比之下,Compound 上 DAI 的年化收益目前在 8% 左右。
不过,上周末在 Curve 上发生了一起「用户损失」事件,更是把这个新产品推上了 DeFi 社区争议的风口。大家一开始都以为是由于 Curve 的流动性问题导致了这名用户损失 14 万美元,但后来根据交易行为的推测,这名用户本身可能就是想「攻击」协议并窃取其中的资金。这个过程非常复杂,我们会在后文专门分析。
不过无论如何,Curve 的产品的确还处于早期阶段,产品逻辑中的滑点保护功能尚未完善。在后文中,我们也会一一道来。
稳定币定制版「Uniswap」
来,让我们先从介绍 Curve 的运行原理说起。
整体而言,Curve 更像一个专为稳定币交易而定制的「Uniswap」。
Uniswap 是以太坊去中心化交易协议的基础设施,优点为产品逻辑简单,而且因为没有管理员特殊权限(admin key),被社区认为是去中心化程度较高的协议。Uniswap 准确来说可以定义为「自动化做市商」或「流动性池」,英文为「AMM」(Automated Market Maker)或「LP」(Liquidity Pool)。其他一些去中心化交易协议,如 Kyber、0x API,也会将部分交易分配至 Uniswap 完成。
简而言之,Uniswap 具有两个功能:注入流动性和提取流动性,对应的两个角色就是做市商和交易者。注入流动性的做市商可以获得交易池中手续费分成,而提取流动性的交易者的需求是进行代币之间的兑换(交易),并支付一部分交易费用。
举个例子,一名用户钱包中有 ETH 和 DAI,就可以把 ETH 和 DAI 按照最新的兑换比例投入 Uniswap 的资金池成为其中的做市商。假设他按照新的兑换比例投入了 1 个 ETH 和 200 个 DAI。当有一名交易者希望用 DAI 换成 ETH 时,就可以进入这个池子进行兑换,Uniswap 的「做市商算法」会计算出这个交易者可以买到多少 ETH。和中心化交易所一样,Uniswap 也会在交易中产生「滑点」,用户交易资金越大,滑点越大,也就是交易成本越高。当交易完成,这名交易者付出的交易费用,将会按照池子中所有做市商投入资金的比例进行分配。
Uniswap 采用了一个叫「恒定乘积做市商模型」(Constant Product Market Maker Model)的做市算法,逻辑非常简单,所以在大多数的通用场景中可以满足需求。
不过稳定币之间的兑换和其他类型的代币兑换不一样,值得专门对待。美元稳定币的价格是锚定 1 美元的,虽然会因为市场波动有些许的变化,但长期来看各个美元稳定币之间都是等价的,无论是抵押生成的 DAI、合法且有实体资产背书而发行的 USDC、PAX、TUSD,还是号称「有实体资产背书」的 USDT。既要考虑到「稳定币之间很多时候是等价的」,也要允许「稳定币之间存在价格差异」,当这两个要素组合在一起,就需要一个完全不同于 Uniswap 的机制。
由 Curve 团队发明的「StableSwap」(稳定互换)机制,就是专为稳定币之间互换设计的做市商算法。如果将他们的算法绘制成曲线(Curve),那这就是介于 Uniswap 曲线和恒定价格之间的一条曲线。如下图:
读者们先不用急着理解上图中的曲线或者公式,因为目前 StableSwap 的所有细节并没完全公开。但是我们可以给出一些已知的信息,帮助读者理解这个算法的原理。
我们不妨先做两个假设:
· 假设 1:如果所有稳定币之间的价格保持恒定为 1 美元,那稳定币 X 和稳定币 Y 就是等价的,可以无损互换。在上图中,如果初始状态下,稳定币 X 与稳定币 Y 各有 5 枚,那基于这个假设建立起的交易池的兑换比例就是 X+Y=10,也就是上图的那条虚的直线,也可以称为「恒定价格」做市商。对于需要兑换的交易者而言,用 3 枚 X 就能换到 3 枚 Y,但这个池子有容量上限,必须 X<=10 且 Y<=10;
· 假设 2:如果稳定币之间采用 Uniswap 的恒定乘积做市商模型,也就是图中最外部的那条虚的曲线,如果稳定币 X 与稳定币 Y 在初始状态下各有 5 枚,那条曲线就是 XY=25,也总算可以交易超过 5 枚代币了,但是随着价格波动,离「恒定价格」做市商的距离非常远,也就是价格波动非常明显;
Curve 设计的 StableSwap 机制介于上述两者之间,既考虑到了「稳定币之间很多时候是等价的」(也就是假设 1),也允许了「稳定币之间存在价格差异」(也就是假设 2)。换句话说,这是一个比 Uniswap 算法更接近「恒定价格」互换的做市商算法。
StableSwap 最大的优势是滑点更低,也就是交易成本更少。StableSwap 的白皮书中绘制了该算法和 Uniswap 的恒定乘积算法中,卖出数量和价格变化的函数曲线,其中 StableSwap 更能保持在 1 美元,而 Uniswap 的算法随着卖出的数量增加,已经把价格快速压低了。
在我们的测试中,Curve 的滑点不输中心化交易所。以 Coinbase 中稳定币之间的交易对 DAI/USDC 为例,将 10 万美元级别的订单推入交易系统,以截图时的快照来看,Curve 略优于 Coinbase,而且 Coinbase 的手续费要比 Curve 多 460 美元。
激励方式升级:利用 DeFi 可组合性提升收益
在提供了优化的做市算法后,另一个问题就是如何提升整个资金池的大小,因为只有这样才能提供更大规模的交易和更低的交易成本。
其实 Uniswap 也面临同样的问题,就是如何激励用户投入自己的资金,成为「做市商」的一员,分享收益。其中,交易费率是一个基础参数,如果太高了,交易者就可以选择其他交易费率更低的平台;如果太低了,提供流动性的「做市商」们分得的利润就很少。
Uniswap 的费率是 0.3%,Curve 是 0.04%,目前来看,Curve 的交易费率对交易者更友好,对流动性提供方不是很友好。但费用的收入还依赖于总交易量的,所以如果稳定币的需求量大,以优惠费率吸引到更多人来交易,整体的收入总规模会不输 Uniswap。
除了费率之外,Curve 还利用 DeFi 的可组合性,为流动性提供方进一步提高收益。
设想有如下两个场景:
· 以 Uniswap 为例,假设一个想要为 ETH/DAI 注入流动性的用户投入了 1 ETH 和 200 DAI,该用户就可以获得所有相关的交易费收入的分成;
· 以 Compound 为例,假设一个用户想把 DAI 投入借贷平台(比如 Compound)获得额外收入,那就可以获得 cDAI,这是一种背后有着抵押资产背书,但是又会自动产生收益的包裹后代币,该代币可以获得平台中抵押借出资产方付出的年化收益的分成。
Curve 正是将这两个场景结合在了一起,为用户最大化收益。
具体的流程为:
· 用户将 DAI 转换为 Compound 的 cDAI,即获得了 Compound 的收益,目前约年化 8%;
· 用户将 cDAI 投入 Curve,即获得了 Curve 的交易手续费收益,这部分依赖交易量而调整。
还有空间!还能再进一步提升收益
当 Curve 结合了另一个新的 DeFi 协议 iearn 之后,收益还可以进一步提升,最高曾达到年化 30%。iearn 是一个去中心化的收益聚合器(Yield aggregator),也就是会从目前借贷平台中寻找收益最高的协议,随着行情的变化,也会自动平衡到收益更高的借贷平台中。
其实 Curve 和 iearn 的组合产生的效果与 Compound 的组合类似:
· 用户将 DAI 转换为 iearn 的 yDAI,即获得了 iearn 协议挑选的最高收益平台,年化收益不低于 Compound;
· 用户将 yDAI 投入 Curve,即获得了 Curve 的交易手续费收益,这部分依赖交易量而调整。
而 iearn 提供了一个名为 Zap 的功能,可以在一个流程中实现上述两个操作,撤出资金的流程也类似。这是一个对用户而言非常友好的聚合工具,否则,对于普通用户而言,分开两步操作,太过麻烦。
需要特别写一笔的是,iearn 项目的创始人是 Andre Cronje。对于加密货币世界的老炮来说,Andre Cronje 是个熟人。他曾经是区块链媒体 Crypto Briefing 的首席代码评测官,在 ICO 热潮中,评测过一大批热门项目的代码质量,眼光犀利额,撰写的文章也以刻薄著称。不少明星项目的技术能力和代码质量被他狠狠奚落。
项目进度:1 个多月发布 4 个独立交易池
据白皮书和 GitHub 的信息显示,目前 Curve 的维护者是隐私项目 NuCypher 的首席技术官 Michael Egorov。
不过根据推特的信息来看,iearn 项目的创始人 Andre Cronje 也可能是 Curve 的核心人物之一,因为他频繁参与了 Curve 的产品规划和外部沟通。
Curve 在过去的一个多月中陆续上线了四个独立的资金池,也可以称为 V1、V2、V3 和 V4,分别是:
· Curve V1(Compound):1 月 20 日上线,支持的币种为 USDC 和 DAI (由 cUSDC 和 cDAI 结算),在交易手续费之外,还可以累加 Compound 的收益;
· Curve V2(USDT):2 月 10 日上线,支持的币种为 DAI、USDT、USDC。优势是增加了 USDT 交易,不过没有额外收益,只能依赖手续费收益;
· Curve V3(Y):2 月 13 日上线,支持 DAI、USDC、USDT、TUSD (由 iearn 的 y 代币结算),在交易手续费之外,还可以累加 iearn 的收益;
· Curve V4(BUSD):2 月 27 日上线,将 V3 的 TUSD 换成币安的 BUSD,也就是支持 DAI、USDC、USDT、BUSD (由 iearn 的 y 代币结算),在交易手续费之外,还可以累加 iearn 的收益。
根据目前四个交易池的资金量和交易量来说,V3 和 V4 版本的资金池更受欢迎,不过从趋势来看,V4 可能会追平甚至超过 V3。这也就表明了,流动性提供方更喜欢带有额外收入的 iearn 版本 Curve 资金池,哪怕需要承担更多的风险。
项目仍处于早期,技术层面风险显现
在 Curve V1 上线的 5 天后,独立安全研究者 Sam Sun 向 Curve 汇报了一个漏洞。Sum Sun 指出,该漏洞如果被利用,将会导致智能合约中的资产损失。
不过幸好,此漏洞尚未被利用。Michael Egorov 调查后发现,该漏洞隐藏在 Curve 的算法之中,而且白皮书尚未公开这些细节。他随后通过部署一个全新的智能合约,并进行前端相关的 UI 调整,将所有资金转移到了全新的智能合约中。
Curve 的网站上的提示也很明确告知了风险,不仅代码审计的细节还没有全部公开,Curve 目前也只是处于 Beta 阶段,官方希望使用者不要投入无法承担损失的资产,特别是对于流动性提供方。Curve 网站上称,对于交易功能使用者来说,风险相对很低。
Curve 在一周前表示,即将公开由 Trail of Bits 进行的安全审计细节,不过总体来说,USDT 和 Y 资金池不需要重新部署,没什么问题,但是 Compound 资金池需要重新部署,以修复上述两个资金池已经修复的问题,因为这是最早的一个合约。
但是风险依然存在,而且不仅在技术层面。
我们必须重新回顾和认识一下 DeFi 世界暗涌的各种风险。以 bZx 最近遭遇的闪电贷套利攻击为例,这名攻击者显然非常了解整套 DeFi 生态中的薄弱环节,精通利用流动性缺陷,这不完全是由技术缺陷导致的。所以,Curve 面临的问题也不仅仅是代码审计,而是其他系统性风险。
比如,iearn 协议如果被套利者攻击,那 V3 和 V4 资金池也会导致损失;如果行情大跌导致 Compound 清算系统产生损失,也就波及了 V1 资金池;风险还包括整个系统中的价格源或者是预言机出现问题,等等。由于 Curve 是基于很多项目搭建起来的,所以风险是自下而上累计的。
真的被「攻击」了
就在 Curve V4 上线但还未公开时,Curve 平台遭遇了一次特殊「事故」,也在海外 DeFi 社区闹出了不小动静。虽然这可能不属于一次黑客攻击事件,却暴露出了产品设计以及沟通层面的问题。
2 月 28 日,一名用户在 Curve V4 流动性不充足的前提下进行了超大额的兑换,虽然团队发现了该事件,并立即进行了补救,但这名用户最终还是损失了 14 万美元。后来,经过对交易记录的详细研究,却发现故事并不是表面这样简单。
事后 Andre Cronje 写了两篇文章,详细描述这件事情前因后果,而以下的分析基于他写的第二篇文章。
该事件涉及 3 个地址,为了方便起见,分别称之为:
损失者 A 地址
0x44e59f7c598644a68975ef41fed052362c4c8ed3
获利者 B 地址
0x8183866223445441b6fb9206b9f0b583410977e6
好朋友 C 地址
0x431e81e5dfb5a24541b5ff8762bdef3f32f96354
该事件发生的顺序为:
在 Curve V4(BUSD)尚未对外公开时,A 试图将 V3 的资金挪去 V4,所以进行了多次稳定币兑换。当时 V4 资金池中仅有 4.28 万 USDC(相比其他几个稳定币占比更低),但是 A 将自己远超这个数量级的资金兑换成了 USDC,所以产生了巨额损失。损失金额最大的一笔也是最后一笔:A 将 44.6 万美元换成了 2.5 万 USDC。A 所有操作共记损失 56 万美元。
A 的操作让整个 Curve V4 的四个币种产生了不平衡(特别是 USDC 太少,BUSD 太多),也瞬间拉高了 Curve V4 中的手续费收益率。用户 B 可能是在观察到了 Curve V4 中不同寻常的收益率后,尝试进行套利。他成功将 3.3 万美元换成了 9 万 BUSD,但另外两笔的操作却发生了亏损。B 所有的操作共计产生收益 3527 美元。
团队在发现该问题后,立即联系了一名在 Curve 中存有大额资金的朋友 C,让他针对资金池中四个稳定币的不平衡现象进行了补足,将 9 万 USDC 换为 46.5 万美元,将 9 万 DAI 换成 13.4 万美元,共产生收益 42 万美元。
由于各方进行了金额较大且极度不平衡的交易,所以每个人在操作过程中产生的高额手续费。据 Andre Cronje 推测,总共约有 14 万美元手续费。
所以总结来说,各位的损失和收益为:
A:损失 56 万美元;
B:获利 3527 美元;
C:获利 42 万美元;
Curve V4 资金池:获利 14 万美元手续费。
后来团队找到了 A 和 B 两个人,计划将 C 获利的 42 万美元还给 A。但是在他们联系 B 之后,他未回复并删除了社交网络账号。
所以最终的结果就是:
A:损失 14 万美元;
B:获利 3527 美元;
Curve V4 资金池:流动性提供方获利 14 万美元。
该事件在发生后受到了不少 DeFi 业内人士(如 Chris Blec)的质疑和抨击,指责 Curve 以及 iearn 没有及时将该事件的细节公开,并且指出,他们的产品因缺少滑点保护功能所以才产生了这次的事故。
当然,也有社区人士(如 Gnosis 的产品负责人 Eric Conner)认为不必对该事件过于苛刻,因为指责和攻击这些 DeFi 项目的创建者并没有任何好处,不如设立起社区的资源,帮助这个自由的市场更好地识别风险。
后来,DeFi Weekly 的作者 Kerman Kohli 与 Andre Cronje 进行了单独的沟通,在他获得了更多的信息后,他认为指责 Andre Cronje 是不公平的,之后便写了一份详细的报告,描述了这件事的经过。其中大多数的细节与 Andre Cronje 自己写的报告一致,只是更详细一些,也修复了一些之前的错误。
除此之外,Kohli 还在报告中透露了一些新的发现:根据损失者 A 的多次故意产生损失的交易行为判断,有足够的理由怀疑这名用户是在探索 Curve 的做市算法,以找到合适时机「攻击」并从中获利。因为他在已经产生了损失之后,还持续用 BUSD 兑换更少的 USDC,他可能是认为当两者的汇率有足够差异的时候,就可以将 USDC 换得更多的 BUSD。但是,中间出现了用户 B 和用户 C,让他没有能完成这样的操作,更何况,也许就算他来得及这样操作,也并不能从中获利。
但这个事件的连锁反应还在继续。iearn 的创始人 Andre Cronje 最终赌气离开 iearn 这个项目,留下已经开发完的平台。用户还可以继续使用收益聚合器、Zap、一键买入 Opyn 保险等,这些都将继续运行下去,但也有可能随着其他平台的更新而逐渐不能使用。
Andre Cronje 表示,自己对 DeFi 社区非常失望,他认为很多人并没有了解背后的具体原因,就发表错误的信息并攻击团队。他还发表了一篇名为《在 DeFi 领域创建项目逊毙了》的文章,辅以截图,证明社区不同人士是如何不公正对待他的。
幸好 iearn 目前是开发完成状态,可以自运营下去,但尚不清楚后续是否有人会接手继续更新维护。也有部分社区人士依旧在和他沟通,在推特上表示希望他可以回归。
Curve 的流动性不足是导致这件事情的起因,不过其他去中心化协议的流动性也面临同样的问题。以 Uniswap 为例,将 40 万美元的 TUSD (由于 Uniswap 未列入 BUSD,所以用了类似的 TUSD 替代)换为 USDC,也只能换得 2.8 万美元。更何况 Curve 是个仅运行了一个多月的开源协议,而 V4 资金池遭遇该事件,更是在还未对外公开之前。
但是 Uniswap 自带的滑点保护功能,却可以避免很大的滑点,为用户建立起的一道防御措施。通过该设置,用户可以选择最大可以接受的滑点比例,如果超过该比例,交易就不会成交。而 iearn 的 Zap 作为 Curve 最重要的入口功能,之前未包含这样的功能。
在该事件发生后,Andre Cronje 也终于给 iearn 加上滑点保护。Andre Cronje 表示,这是 iearn 更新的最后一个功能。
至于刚刚提到的获利者 B,由于他的以太坊地址中拥有以太坊域名「nigeldesouza.eth」,而被发现其背后的真实用户可能是 Nigel de Souza,推特账号为 @nigel_desouza。在该用户拒绝沟通后,该推特账号已经删除。大多数人推断,这应该是被该用户自己删除。
幸好还有「保险」可以买?
作为一个新晋的明星 DeFi 项目,Curve 迅速崛起。同时,该项目和 iearn 连接中出现的问题引发了争议,并且争议还在继续发酵,这成为对 DeFi 体系可能存在风险的讨论源头。
一个难以一句话回答的问题是:对于一个去中心化且开源的协议而言,如果完全按照设定的逻辑运行,产生了意外的获利或者损失,能否说是这个协议「出错」?
进而言之,如果该协议中存放着其他人几百万美元的时候,协议的开发者究竟有没有义务为投资者提供实时、清晰和透明的公开信息?如果协议产生了用户不正常的损失,谁应该承担责任,进行赔付?
不过,幸好还有几个基于区块链平台的保险业务可以帮助减轻这类风险所带来的影响。
有两个基于以太坊的平台的去中心化产品为 Curve 提供了类似于保险的业务,也算是一种可以对冲资金潜在损失风险的机制。其中一个是 Opyn,为 Curve 的资金池提供了一个名为 oCRV 的看跌期权代币,购买者相当于购买了一种保险,如果 Curve 资金池归零,Opyn 需要将之前抵押的 1.6 倍的 ETH 进行赔付。不过 oCRV 上线时成本极高,如果购买的话,将抵消可能在 Curve 赚得的收益。
另一个提供风险对冲机制的是 Nexus Mutual,这更像一个独立的保险机构,或可以称为「互助保险社区」。当用户的资金真的因为智能合约漏洞出现损失时,平台中的用户就可以对每笔理赔申请进行投票,如果投票通过的话,就可以获得赔偿。在 bZx 的事件中,就有几笔用户的损失得到了 Nexus Mutual 平台的赔付。
除了安全性之外,用户体验也是 Curve 目前尚未探索的领域。从目前网站页面来看,这点并不着急,因为 Curve 更像是在做一个协议,更多的流量应该是来自于接入的服务商。目前来看,Curve 的交易量主要来自于 1inch 这类的聚合交易所,另外还有 ParaSwap 和 0x API 接入了 Curve 的交易功能,而注入流动性的功能主要通过 iearn 的 Zap 实现。
之前 Curve V3 曾经可以提供 20% 的年化收益,这很吸引人,但可能不可持续,因为在安全性、用户体验和入口流量的问题解决之后,就会有更多资金注入,成为「做市商」的一员,分摊更多的收益。于此同时,这又会进一步提升资金池的大小,开启一个良性循环。
不过谁知道呢,毕竟这些算法、参数、交易费都要经过试验才能知道其有效性。这就像 Curve 在推特说的第一句话:「我们有史以来第一次有能力进行『实验经济学』。我们开始做吧!」
他们说的很对。让我们开始吧,为 DeFi 喝彩,但也不要放松警惕。
参考文献
关于用户在 Curve 损失 14 万美元的来龙去脉
https://medium.com/@andre_54855/post-mortem-28-02-2020-6d675a85a33b
Andre Cronje 《在 DeFi 领域创建项目逊毙了》
https://medium.com/@andre_54855/building-in-defi-sucks-b8fdfda0ef58