当前位置:首页 行业动态 正文

科普:CFMM(恒定函数做市商)的演变

2023-11-20

在传统金融市场上,每种证券都需要一个买方和卖方市场才能有效地进行交易。如今,股票交易的速度和简便性被视为理所当然,尤其是在新引入的Robinhood投资模式下。在这个新时代,做市商扮演着举足轻重的角色,为市场参与者创造了无缝的交易体验。在过去的一年里,做市商这个角色以名为自动化做市商(AMMs)的算法代理的形式移植到加密生态系统中。

AMMs执行的功能与传统做市商相同,促进两种数字资产之间的交易。然而,在智能合约里不是由大银行或交易公司来做市,而是通过算法做市。与传统的做市商依靠大量资源提供严格的买卖价差不同,AMMs重新定义了提供流动性的方式,并应用数学公式来决定资产交易的价格。

恒定函数做市商

恒定函数做市商(CFMM)是最流行的AMM系列。当交易者希望将代币A换成代币B时,这种AMM会使用恒定函数作为其定价机制。在这种情况下,术语 "恒定函数 "指的是资产储备的乘积必须在发生任意交易时都保持不变。

自2017年以来,针对不同使用案例的优化,一些DEX已经把这个恒定函数进行了修改。下面将介绍一些最流行的DEX,并详细介绍其采用的恒定函数。

Uniswap

Uniswap是第一个让使用恒定函数(来交换两种资产)变得流行的DEX。它使用了一种被称为 "恒定乘积AMM "的AMM变体,它强制要求两种资产储备量的乘积必须始终保持不变。

1LEmbuiBWae8sdbiE7p168kzyisbvIjUnLtCXgA9.png

在这个等式中,x和y代表流动性池中两种资产的单位数量。举例说明,假设ETH/DAI池包含100 ETH(x的值)和10,000 DAI(y的值)。在这个例子中,Uniswap将这两个数量相乘,得到k的值为1,000,000。现在的目标是保持k值恒定,而不考虑对流动性池的交易量。做到这一点的唯一方法是,x和y的数量反向变化。换句话说,当x的数量增加时(交易者将ETH加入池中),y的数量必须减少(交易者将DAI从池中取出)。最终,任何给定交易所的报价都是常量乘积公式和池中代币比例的函数。

需要注意的是,x和y之间的关系不是线性的。用10个ETH兑换1000个DAI不等于用20个ETH兑换2000个DAI。相反,这种关系是渐近式的。这意味着随着花费的代币数量增加,收到的代币数量会变小。

RHtGpuwWnnjOmqIj4V5wXGJ9BeLTBPqyUYTNSoy7.png

恒定乘积函数的特性对AMMs很有用,因为它确保了当任何一种资产的价格接近无穷大时,总会有流动性。

Balancer

Balancer的AMM一般化了Uniswap的恒定乘积功能,创造了一个被称为 "恒定平均AMM"的变体。这个AMM的核心是价值函数,它强制规定资产池中的资产余额的权重次幂的乘积应始终保持不变。

N3MaHQWPT9P9H6mq5H0tBT6xnPbrNnfdIpUS6wOI.png

在这个公式中,t代表池中的资产的种类数,Bt是资产数量,Wt是资产权重。虽然与Uniswap简单易懂的常量乘积函数相比,数学公式看起来要复杂得多,但其实很容易理解。例如,假设用户创建了一个Balancer Pool,其中包含三种资产:100 ETH、100 BTC和100,000 DAI,每种资产的权重为33.3%。Balancer对这些数值进行如下处理:

N3MaHQWPT9P9H6mq5H0tBT6xnPbrNnfdIpUS6wOI.png

类似于Uniswap,目标是在保持资产权重不变的情况下,只改变资产余额,从而保持k不变。在3种资产Balancer Pool的情况下,交易可以发生在三个资产中的任意两个之间。用户可以用ETH交换DAI,用ETH交换BTC,或者用DAI交换ETH。通过保持k的值不变,可以在三种资产之间生成一个价值面。

Lp5Z2tjtxGX7TBdBwyvwg93d6ZRURkKxQJeLnEhL.png

有趣的是,这个曲面与Uniswap的常量乘积函数并没有太大区别。另一种思考方式是将图1中的恒积函数,额外增加一个代表池中第三个代币的轴。通过改变图2的角度,两个函数之间的相似性变得更加明显。

4Zmd42Md8iVUCGOF4vUtDgLjWsMYbcwfOM95nmmD.png

由于Balancer池被设计成有2到8种资产,任意两个代币之间的交易价格报价就比较复杂了。池中的每一对代币都有一个价格,这个价格取决于该特定代币的余额B和权重W。从形式上看,交易执行的价格是按照代币余额与代币权重的比值来计算的。

QuEx1ILo8ly72MtCFMC9QqEdLyzlMJerzovxaVJ0.png

在上面的公式中,代币A代表被卖出的代币(进入池子) 而代币B是被买入的代币(离开池子)。如果池子的持有者不改变资产储备,很容易看出价格的变化完全基于交易,因为资产权重必须始终保持不变。这种机制与图2所示的恒定面相结合,可以保证买入资产的价格上升,而卖出资产的价格下降。在与Uniswap相同的情况下,套利机会保证了Balancer Pools提供的价格与市场其他部分同步变动。

Curve

Curve是一个交易所流动性池,预期价格稳定的资产之间可以在该池里进行高效交易(如稳定币或封装的比特币(wrapped bitcoin))。Uniswap和Balancer主要是针对波动和价格不稳定的代币的交易。然而,当处理那些想要互相保持稳定的资产之间的交易时,低价格滑点是最重要的。之前迭代的各种AMMs固有曲率就有问题了,因为交易规模越大,滑点就越大。

解决价格滑点问题的一个方法是,使用常数和函数作为AMM的内部交易机制。当使用两种资产进行操作时,恒和(constant sum)做市商强制规定资产数量之和必须保持不变,并遵循以下函数:

LE1wHLzQRyFmUIgR88D480fppZko2udpbmB1Ahua.png

如图,一个双资产恒和做市商是一条简单的直线。

fWNz6Q11qG0kQhBHPeksVZC9garIOZXDRMK17JzS.png

虽然这个函数的简单性实现了低滑点,但它缺乏恒定产品做市商的关键属性,即当任何一种资产从池子中流出时,池子总还会有流动性,而另一种资产的数量趋于无穷大。

为了解决这些问题,Curve通过结合恒定总和和恒定乘积函数创造了一种混合AMM:在曲线的平衡点附近创建一条相对平坦的曲线,类似于恒定总和函数,以保持价格相对稳定,同时使两端更加倾斜,类似于恒定乘积函数,因此在曲线的每个点都有流动性。在双资产的情况下(x和y),最终的结果是下面的复杂函数。

VgIrjHsegD7EOE1L1t4LSfwReB0FqCxzKx0cECpI.png

除了复杂的数学之外,请注意两个常数函数是如何嵌入方程中的。左边是常数和,右手边是常数积。此外,公式中还包含了一些其他的项来达到预期的目的。在公式中,n代表资产数量(在本例中n=2),A是一个 "放大系数 "参数,它决定了函数与常积函数的相似程度。A的值越低,Curve的函数就越接近Uniswap的函数。

就像之前的CFMMs一样,我们的目标是在x和y之间发生交换时保持k的值不变。绘制该函数会像这样:

r7e4nLdDzz0TGr4sonejBQ9TFoQfYW9eudcbhOT2.png

来源:Curve白皮书

从图5中可以看出,Curve的函数在中间表现为恒定加和函数,但随着x和y的值的变大,则变为恒定乘积函数。这种形状使曲线中间段的价格保持稳定,同时又能在两端提供流动性。

结论

在过去的几年里,AMMs通过以去中心化的、全球可访问的和非托管的方式汇聚和提供流动性,它已经成为DeFi的重要组成部分。具体而言,Uniswap、Balancer和Curve等CFMMs获得了巨大的增长和应用,交易量超过数十亿美元。

自2017年以来,这些去中心化的交易所已经开发了恒定函数的各种变体,以解决特定的交易所问题。随着该领域继续扩大,涵盖各种资产,为使交易更高效,交易所必须对底层功能进行大量思考。虽然这项技术仍处于早期阶段,但它已经带出了新的研究领域,更多的AMM设计将会出现,最终为所有DeFi用户提供更好的流动性。