Uniswap的自动做市商 (uniswap如何做市商)

2023-03-02 11:00:02 views

How to make automatic market makers? Virtual currency exchange platform digital currency ordinary exchanges will have the concept of limit orders. General market makers will set prices when they provide liquidity, but these are not available in market makers. The rest can be made through the mechanism of virtual currency exchange platform digital currency virtual currency exchange platform digital currency virtual currency exchange platform digital currency home newsletter blockchain encyclopedia home encyclopedia How to make automatic market makers? 比特币今日价格行情网_okx交易所app_永续合约_比特币怎么买卖交易_虚拟币交易所平台

普通的交易所都会有限价订单的概念,一般的做市商提供流动性都会设定价格,而这些在Uniswap都没有。在Uniswap,做市商只需提供代币资金,剩下的可以通过机制来解决。普通的交易所需要交易对手,做市商通过设置买入价和卖出价,一是为市场提供流动性,二是可以获得交易的利差。这些设置的价格形成了限价订单。当然这些订单可能成交,也可能不会成交。如果交易所将所有人的订单都集中到两个大型的池中,交易者不会愿意,他们不希望自己的订单跟其他人的订单混在一起。


而Uniswap要做的就是将代币混在一起,同时做市商无须指定其希望买入和卖出的价格。Uniswap为什么会这么做?这源于Uniswap自动做市商的设计。


Uniswap的特色之一就是将每个人的流动性集中到一起,然后根据算法进行做市。也就是它本质上是基于算法的自动做市服务。Uniswap会有一些预定义的规则,根据这些规则它会向用户提供兑换代币的报价。自动做市的规则可以有多种,Uniswap采用的是其中一种。


Uniswap采用的自动做市模型是基于“Constant Product Market Maker Model”的变体。它有一个特点很有意思,理论上,它可以提供无限的流动性,可以有很大的订单规模,且不用担心流动池很小。之所以能做到,跟它的Constant Product自动做市模型有关。那么,什么是Constant Product自动做市的模型呢?


让我们假设,流动性提供商提供ETH/MKR的交易对。假设根据当前的汇率,1MKR=3.5ETH,如果你想为Uniswap提供流动性资金,你向资金池提供100MKR和350ETH的资金。那么,Uniswap会将两个数值相乘,得出Constant Product:100*350=350,00。


其公式是X*Y=K,其中X是ERC20代币,Y是ETH,K是常数。Uniswap会让K常数350,00保持不变。为了保持K不变,那么,X和Y就是此消彼长的关系。如果有人在这个合约中购买了ETH,那么MKR就会增加,因为购买者向流动性池中增加MKR,同时减少ETH。而ETH被购买者买走,从而使其在流动池中的数量减少。


不过,根据买入量的不同,用户付出的成本也不同,也就是实际价格不同。假设交易费用为入池代币/100(实际上是0.3%,这里主要是为了简化说明),我们得出如下的兑换关系:



从上表可以看出,池中MKR为100个,ETH为350个,其常数为100*500=35,000;


在这种情况下,如果用ETH购入MKR,那么每次ETH买入量不同,其购买的成本也是不同的,如果往流动池中注入1ETH,用来兑换MKR,那么可以兑换0.282个MKR,成本为3.5453,购买MKR成本上涨了1.294%;如果用350ETH来兑换MKR,那么这意味着ETH流动池有696.5ETH(减去3.5ETH的交易费用),根据计算公式,MKR的流动池剩下50.2513个MKR,那么350ETH可以换得49.7487个ETH,而单个MKR兑换成本高达7.0353;购买MKR的成本上涨超过100%,这个滑点太大了。


不过,如果池中MKR和ETH数量足够多,则滑点会小很多。截止到蓝狐笔记写稿时,实际来看,MKR的流动性可以达到23,238个ETH,超过3,000,000美元,如果用350ETH兑换MKR,可以兑换104.8559个,价格滑点为2.88%。当然这个流动池还不够大,如果再大一些,可能连1%的滑点都不到。


这里还有一个概念需要清楚,就是每次兑换之后,会产生新的流动池,同时也会产生新的常数。原因是每次交易后产生的手续费会重新回到流动性资金池中,这样手续费会在完成代币价格兑换计算后重新添加到资金池,这样常数在每次交易后稍为变大一些,这样可以为流动性提供者提供系统性的盈利。


举个例子,按照上面数字假设,假如用户用100ETH兑换MKR,假设1%的费率,那么,MKR的流动池是77.9510MKR,ETH的流动池为450ETH,根据规则,新的常数是77.9510*450=350,77.95,比原来的常数350,00增加了77.95。



除了ETH和ERC20代币可进行兑换之外,ERC20代币之间也可以实现兑换,且不必存在单独的资金池。其兑换的方法是通过ETH完成兑换,因为ETH是所有ERC20代币的通用交易对,它可以成为不同ERC20代币之间进行交易的媒介,例如MKR和SNX代币之间的兑换,首先通过MKR/ETH的交易对兑换成为ETH,然后通过SNX/ETH交易对完成兑换。