Uniswap是一个去中心化的交易平台,可以进行REC20代币之间的兑换,根据DeFiLlama网站数据显示,目前uniswap总锁仓量为$3.37billion,根据coingec网站数据显示,24小时成交量为$338万,币种856个,币交易对1556个,在Ethereum、Polygon、Arbitrum、Optimism、Celo均有部署协议,是目前DEFI的头部项目之一。
基本原理
Uniswap作为去中心化的交易平台,与中心化的交易平台最大区别在于,传统中心化交易所的交易系统采用是中央限价订单簿 (CLOB) ,交易者给出交易价格和交易数量,在市场上匹配两个交易者的买卖订单达成交易。这种系统的存在一个主要的问题是流动性问题,在交易订单不足的情况下即市场深度不足,出现无法匹配交易订单的情况。Uniswap采用的是自动做市商(AMM)模型中的恒定乘积乘积做市商模型,首先需要维护两个代币兑换的一个流动池,任何人都能提供相应的代币到这个池子中,称之为提供流动性(这个就是 做市商的工作,为交易系统提供流动性),但是需要两种代币以相同的价值的数量同时投入,保证流动池中的两种资产的价值相等。例如在代币A和代币B的流动池,代币A价格是每枚1$,代币B价格是每枚10$,那么想要投入10枚代币A到流动池的同时也要提供流1枚代币B,这样向流动池子内提供的两种代币价值才是相等的都是10$。Uniswap添加流动性界面如下图
当交易者想用一定的数量的代币y兑换成x时,系统则会自动计算出可以兑换的x数量。这个计算就涉及到Uniswap中恒定乘积做市商模型最核心的计算公式:k = x * y,x和y分别代表当前流动池中两个代币的数量,k就是x与y的乘积,有兑换代币的交易发生中x和y的值可以变化,但是要保持k的值不变。k值为常数,则x和y的关系如下图
例如此时一个流动池中代币A数量为 100,代币B数量为10,那么当交易者想用10枚代币A兑换代币B,计算过程如下:此时k值为100 * 10 = 1000 兑换完代币A数量增加10变成110, 流动池中代币B数量变为 1000 / 110 = 9.09 ,那么交易者得到的代币B为10 – 9.09 = 0.91,系统就会显示交易者用10枚代币A将得到0.91枚代币B。这个模型可以解决市场流动性不充足时无法进行交易的问题,只要流动池的代币数量大于要兑换的代币数量,就能保证能兑换出代币,所以流动池的深度也就是流动池中代币数量的多少就显得的十分重要。流动池的深度越深,其一能保证有充足的代币兑换,其二深度越深,滑点越低,平均交易成本也越低。 那么就需要吸引更多的流动性提供商Liquidity Provider简称为LP将代币投入流动池,Uniswap依靠的是对每笔交易收取手续费,对LP进行奖励。
自动做市商(AMM)模型优劣
优点:
1、能够降低做市商的门槛,让一般交易者也能成为做市商。在基于中央限价订单簿 (CLOB)做市商需要专业的能力强、资金雄厚、抗风险能力高,一般的交易者是无法担任做市商的角色,所以在传统交易系统中做市商一般是大型的金融机构。而自动做市商模型,只需要简单的向流动池添加代币,便能让一般交易者也参与提供流动性的过程,同时通过手续费的奖励,吸引交易者提供流动性。
2、在流动性不足的市场仍然能够交易。在基于中央限价订单簿 (CLOB)系统中,需要匹配订单,当市场流动性不足时,会出现无法交易的情况。而自动做市商模型,通过确定的算法设计,能够解决在流动性不足的市场也能进行交易。
缺点:
1、资本效率低,大多数的交易是在极小的价格范围交易,大部分的流动性并没被使用,理论恒定乘积做市商模型能够提供两种代币之间所有价格低兑换,而实际上以ETH/USDC池为例子,大部分的交易者能够接受的价格范围在ETH目前市价1200美元左右的范围内,即1 ETH兑换 1200个左右的USDC。
2、流动性提供商将承担无常损失。当市场上的代币价格波动大时,可能会对流动提供商造成损失。例如:假设代币A/B流动池中代币A数量100,代币B数量1000,代币A的市价为10$,代币B市价为1$,流动性提供商Nolan已经在流动池提供的代币A数量10,代币B数量100,占流动池的10%,那么当市场上如果代币A的价格上升为40$,A/B流动池中就会出现套利空间,套利者将会用代币B换取出更高价值的代币A实现套利。经过这样的套利过程流动池中将会有代币A 50枚,代币B 2000枚。那么此时nolan如果将资金提现将会获得5枚代币A、200枚代币资产为40 * 5 + 1 * 200 = 400,如果nolan没有讲资产添加到流动池那么现在她的资产为 10 * 40 + 100 * 1 = 500。与存入流动池相比,持有资产反而会获得更多的利益,这就是无常损失(nolan通过流动池的手续费获取的利益在这里是忽略的)。
3、存在三明治攻击。由于区块链的信息是透明的,我们可以看到交易执行成功之前的订单情况。攻击者发现有大单交易时,就这个订单前后进行买卖套利。例如:
1.Nolan在ETH/BTC流动池中,发起一笔交易100ETH买入BTCgas费为x
2.Alan发现这笔交易,使用gas费为y(y > x)抢先用 100ETH买入BTC
3.Nolan的交易成功,由于Alan的交易使得BTC数量减少,价格上升,Nolan买入BTC也减少
4.Alan在发起一笔交易卖出BTC,由于BTC价格已经上升了,所以Alan就实现了获利
在上面的例子中,Nolan的交易在Alan的两笔买卖交易之中,所以称为三明治攻击,Alan的攻击使得Nolan交易产生了更大的滑点,交易成本随时上升了。
非均匀的分布式流动
Uniswap V3版本,可以允许LP在特定的价格范围内提供流动性。
在ETH/USDC池中,如果选择价格范围为全范围提供1 ETH 需要同时提供1217.43USDC 如下图
如果选择在1200~1301.2区间内提供流动性1 ETH 只需要 265.972USDC。如下图
Uniswap V2.0的模型为x * y = K ,而Uniswap V3.0的模型引入了Lp可以自定义流动性的设置,可以为流动性的提供者提供更加高效精准的资本效率,模型为(x +L√pb) * (y + L√pa) = L * L,L为固定值(L就是 √k),Pb和Pa代表的是当前a点和b点价格。pa = ya/xa,即在a点y点数量除以x的数量。(当设置的流动性为全范围时,√pb = 0,√pa = 0,模型就会变回 x * y = K )例如在上图中
可以看到黄线就是LP实际提供的代币数量关系曲线,即LP希望在一定价格范围内提供流动性,而超出价格则不提供流动性。对于单个用而言提供的流动性就是黄色这条线,而实际按照模型计算时曲线是上图的蓝色曲线,那么为了符合模型则协议会给代币x和y加上一个常量,可以理解为一种变相的加杠杆。2.0的模型x * y = k ,x和y是用户提供的代币数量,3.0则为 (x + L / √pb) (y + L * √pa) = L * L,同样x和y是代表LP提供的实际代币数量,不同点在于模型加上了一个常量。那么这个常量是如何计算的呢,首先我们知道 价格 P = y / x(注意此时点y和x的代表的是蓝色曲线上的代币数量,并非实际用户提供的代币数量,在模型内 x = x0 + x1,x0是Lp实际提供的代币数量,x1是常量参数)L = √x * √y,那么结合两个公式我们可以得到 x = L / √p ,y = x * √p ,所以带入b点价格Pb,而且在b点时实际上对应黄线上的点我们可以看到实际上用户提供的代币只有y,没有代币x了即x0 = 0,由x = x0 + x1 = L / √pb ,那么参数x1 = L / √pb。同理带入a点,我们也可以得到 参数 y1 = L * √pa。
3.0相较于2.0的模型的优势在于:Lp可以自定义流动性的范围,选择他们认为适合的头寸。由于实际上市场时的流通性往往集中在一定的价格区间内,开放这样功能相当于让市场决定流动性分布到哪里。Lp可以通过将价格集中在分布在当前价格的窄带里面,并随着价格的变动添加和移除代币以保持其流动性活跃,从而降低资本成本。
对于整体池子而言则需要把所有用户的流动性进行整合,不同的用户选择的价格区间不同就会导致不同价格区间的流动性不同。如上图所示,在V2版本中流动性范围在在⽐(0, ∞)之间,V3中对于单个用户的流动性在pa 和 pb 之间,对于整个池子而言由于不同区间提供的流动性时不同的所以就会呈现成每个价格区间的流动性有高有低,流动性的大小和分布的是由市场决定。LP在每个价格区间提供的代币数量支撑这个价格区间的流动性,Lp投入的代币越多,交易频次越高,LP获取的手续费就越高。(在交易频次越高的价格区间提供流动性,虽然获取的手续费会越高,但是同时也存在无偿损失风险也越高)。
手续费
uniswap V3为每个代币对池子可以设置 0.05%、 0.30% 和 1%的费率。在V1、V2中代币对池子中统一收取的手续费为0.3%,虽然这个默认费⽤等级在历史上对许多代币来说都表现良好,但对于某些池(例如两个稳定币之间的池)来说可能太⾼了,⽽对于其他池(例如包含⾼度波动或很少交易的代币的池)来说可能太低了,所以增加了0.05%和1%费率。
白话区块链|同步全球区块链资讯、区块链快讯、区块链新闻
本站所有文章数据来源:金色财经
本站不对内容真实性负责,如需转载请联系原作者
如需删除该文章,请发送本文链接至oem1012@qq.com