9

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

 3 years ago
source link: https://www.jinse.com/blockchain/1023972.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在传统金融市场上,每种证券都需要一个买方和卖方市场才能有效地进行交易。如今,股票交易的速度和简便性被视为理所当然,尤其是在新引入的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用户提供更好的流动性。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK