# Curve V2方案解析：通用与定制化AMM之争

By [StevenZ](https://paragraph.com/@stevenz) · 2022-03-21

---

> 撰文：[0x76](https://twitter.com/_0x76)

Curve V2 版本的发布极其低调，既没有制作精美的介绍页面，也没有讲解原理的视频，甚至都没有进行像样的宣传。整个的发布活动，便是在项目的官方网站放出了一版介绍 V2 基本原理的白皮书。该版白皮书虽然只有区区 5 页，但其中却充满了让普通用户望而生畏的数学公式。所以，在正式介绍 Curve V2 的意义之前，有必要先用最简单易懂的语言，解析一下 Curve 是如何在 V2 版本中，实现对非稳定币交易对的支持的。

白话解读 Curve V2 基本原理
------------------

大家千万不要一开始就被 Curve 白皮书中的累加“∑”或累乘“Π”等数学符号所吓倒，之所以 Curve 的公式会变得如此复杂，并不是因为其算法有多么玄妙。而是因为 Curve 希望在一开始就能够在底层逻辑上，原生的支持多币种交易资金池，因此原本简单易懂的二维恒定乘积公式 xy=k，也就需要升维变成

![](https://storage.googleapis.com/papyrus_images/4fd1ad26ed156c2515967031c3778bda8ed1eb2b1c87117da62e07c3aa4ef135.png)

这种看似复杂的多维恒定乘积形式。

因此，为了使读者能够更好地理解，我们在此重新将多维模型降低到更易理解的二维状态（双币资金池）。那么，在更简单的二维模型里，Curve V2 的价格曲线是什么样子呢？

![](https://storage.googleapis.com/papyrus_images/c8879e65967b951863409ed6de661443ab53177c57ffdf255945dd3bb19c5909.png)

上图是摘自 Curve V2 白皮书中的价格曲线。与 Curve V1 中通过将 xy=k 与 x+y=k 两个基本价格曲线按照一定权重比例进行拟合类似，Curve V2 的价格曲线也是由其他基本曲线拟合而成。简单来讲，就是曲线在交易价格附近更接近 Curve V1 的曲线形状（蓝色），而在远离交易价格的位置，则更加接近 xy=k（左下方虚线）。以此构成了一个在交易价格附近更平滑，但在远离交易价格范围后弧度更大的一条价格曲线（橙色）。相比 V1 版本中更接近于一条直线的价格曲线，V2 的曲线在远端的弧度更大，以此增加对非稳定币交易对的支持程度。

当然，如果 Curve V2 仅仅是重新构造了一条固定形状的价格曲线，自然也无法达到其在所有价格点动态聚合流动性的目标。Curve V2 最关键的改进，是在当价格偏离原聚合范围时，可以对流动性进行自动再平衡（rebalance），重新构造一条适用于新价格的曲线。

此时需要解决的另一个问题是，系统该如何感知市场价格的变化，并在适当的时候进行再平衡操作呢？大多数同类项目会选择直接接入外部预言机，但引入外部预言机也同时也会为系统引入新的外部风险，一旦预言机失效或被操纵，LP 的资金安全便很难得到保证。

Curve V2 为了彻底杜绝外部风险，改为依靠内部数据作为参考价格，官方将这种机制称为 EMA（exponentially moving average）预言机。读者这里同样不需要去理解 EMA 是什么，只需要了解这个 EMA 预言机提供的价格，是根据 Curve 的历史成交价以及最新的交易信息综合计算出的一种参考价格就可以。这个参考价格有些类似于技术分析中的 30 天均线，他会根据最新的成交价格进行动态调整，但在调整的同时也会保有一定的滞后性，以免在价格剧烈波动时过度频繁地触发再平衡机制。

有了内部预言机提供的参考价格，系统便有了进行再平衡的触发依据。当 EMA 预言机报出的价格偏离原始价格超过一定范围后，协议便会自动对整条曲线的形状进行调整，使得流动性重新聚合于最新的交易价格附近。

Curve V2 与 Uniswap V3 的解决方案有哪些不同
--------------------------------

早在 Curve V2 刚刚发布的时候，便有评论认为 Curve V2 版本将与 Uniswap V3 展开直接竞争。毕竟两者都提出了在全部价格区间聚合流动性的通用解决方案。可是如果仔细分析这两个项目的具体实现方式，又会发现两者间存在着明显的区别。

**区别一：如何决定在何处聚合流动性**

在 Curve V2 中做市，完全不需要 LP 主动选择流动性的聚合范围。系统将会依据市场价格的变动，自动将 LP 的流动性集中到交易价格的附近。而 Uniswap V3 则需要 LP 自己判断市场的价格走势，并自主选择做市的价格区间。

**区别二：LP 的头寸是否同质**

我们知道，由于每个 LP 的做市金额与范围都不尽相同，Uniswap 在 V3 中使用 NFT 来表示 LP 的做市头寸。而在 Curve V2 中则完全没有这个问题，每一个 LP 在资金池中的流动性分布是完全相同的，相互之间只有数量差异，因此依然可以使用同质的 ERC20 代币表示 LP 的头寸。这大大降低了其他协议与 Curve 进行组合时候的困难程度。

**区别三：如何对资金进行再平衡**

我们常常说 Uniswap 在升级到 V3 版本后，被动的做市管理方案已经不再有效，LP 需要不断主动判断价格走势并调整头寸。而 Curve V2 将再平衡的策略完全融入了协议层本身，用户不再需要了解再平衡的基本原理，也不需在市场诸多代理方案中进行选择，只需要考虑什么时候存入，何时取出，剩下的全部交给 Curve 的协议层自动执行。

**区别四：交易手续费如何确定**

在手续费的问题上，Uniswap 其实并没有给出通用的解决方案。系统原生只提供了三个档位的费率供 LP 们选择，每个档位对应一个独立的资金池，这不但限制了用户的选择范围，还增加了流动性的割裂程度。

相对来说，Curve V2 依然采用了自动化解决方案，系统内置的手续费率范围为 0.04%-0.4%（此比例来源于社区讨论，如有错误欢迎订正）。当市场价格接近流动性聚合的中点时手续费最低，而在偏离时手续费会逐渐升高。整个过程完全自动完成，不需要 LP 进行管理和干预。

经多以上对比，我们发现相比 Curve V2 这种一站式解决方案，Uniswap V3 似乎显得既复杂又难用。不但做市的几乎所有关键参数都需要用户自主选择，还需要在后续做市过程中不断进行再平衡。那么同样有着行业内顶尖开发团队的两个头部 DEX 项目，为什么会针对同样的需求，却交出了差别如此之大的解决方案呢？

方法论之争：做应用还是做生态
--------------

两种截然不同的解决方案，显然不是受制于开发团队的技术能力，根本原因在于两个团队创始人对行业核心诉求的理解截然不同。

Uniswap V3 的核心思路，是通过开发一套可以模拟任何形状价格曲线的通用解决方案，从根本上解决不断产生的定制化 AMM 分叉项目。因此开发团队必须将各种关键参数的决定权留给市场，并通过成立开发者基金不断扶持生态的发展。寄希望于市场能够通过自由竞争，形成几套成熟的主动做市管理方案，以解决不断变化的市场需求。

承认个人与团队的意志无法永远正确，并将选择权充分的开放给市场和社区，自己仅参与底层基础架构的建设，是 Uniswap 团队的核心理念。

而 Curve 团队则反其道而行之，他们认为用户的时间和注意力都是有限的，不应再使他们陷于复杂的选择困境之中。开发团队应当直接为用户提供全套的最优解决方案，使用户只需考虑何时存入资金，何时取回资金，其他的过程一律交给协议自动完成。

承认多数用户不具备专业分析能力，作为更专业的行业精英有必要提供一揽子解决方案，尽量解决用户可能遇到的一切障碍，是 Curve V2 的核心理念。

是直接做一个功能强大的好产品，还是成为一个通用的底层架构并赋能生态发展，这是 Curve 与 Uniswap 两个顶级团队开发思路最重要的区别。两种不同的方法论哪一个会最终通过市场的考验，或许只有等待时间来给出答案。

---

*Originally published on [StevenZ](https://paragraph.com/@stevenz/curve-v2-amm)*
