普通的交易所都会有限价订单的概念,一般的做市商提供流动性都会设定价格,而这些在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交易对完成兑换。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。