okx

Uniswap中的恒定乘积算法:K值解析

时间:2023-08-10|浏览:174

本文介绍了uniswap中恒定乘积算法中K值的设计。

首先,我们拿uniswap中的一个交易对ETH/USDT就决定了K值的初始大小,即K=x*y。

这样,ETH和USDT一起构成了一个流动性池。这个概念很重要,请牢记。

第一个添加流动性的人可以任意决定交易对中两个币的数量,即可以任意决定K值。

添加完流动性后,ETH的价格等于y个USDT的数量除以x个ETH的数量。如果这个价格和其他交易所之间存在差异,那么一定会有人利用这个差异来套利。

恒定乘积算法指的是在流动性池没有再添加或减少流动性的情况下,只有交易行为发生时,K值保持不变。

换句话说,无论用户在ETH/USDT交易对中买入还是卖出ETH,都无法改变K值的大小。

但是,交易行为会修改流动性池中ETH和USDT的成分。比如,用户买了dx个ETH,那么流动性池中的ETH数量就会减少(x-dx),而USDT的数量则变为K/(x-dx),即用户需要用dy=K/(x-dx)-y个USDT来购买dx个ETH。

交易手续费也会影响K值。

由于存在交易手续费,用户在使用uniswap进行交易时需要支付0.3%的手续费。例如,用户用dy个USDT购买ETH,uniswap会先扣除0.3%dy作为手续费,并将这笔费用添加到流动性池中。此时,K值变为x*(y+0.3%dy)。

因此,恒定乘积算法中的K值并非固定不变,每一笔交易都会对K值产生影响。

添加流动性也会影响K值。

假设当前资金池中有x个ETH和y个USDT,那么K=x*y。现在有人添加了dx个ETH和dy个USDT,并且dx/dy=x/y。

如果使用uniswap的默认设置进行添加流动性,即先输入ETH数量,然后uniswap会计算出需要的USDT数量,这个默认计算会保持dx/dy=x/y的比例。

但是,添加流动性后,流动性池中的资金变为(x+dx)个ETH和(y+dy)个USDT。此时,(x+dx)*(y+dy) > x*y,即K值增大了。

同样地,减少流动性会减少K值。

捐赠也会影响K值。

如果在添加流动性时,按照dx/dy=x/y的比例进行添加,即直接向合约地址转入dx>0的ETH,dy=0的USDT,这样也会改变K值。

这种捐赠行为经常发生,有些人错误地将ETH转入uniswap流动性池的合约地址,从而无意中将币捐赠给了原有的流动性提供者。

这种按非K值比例添加流动性的行为被称为捐赠,但是这种捐赠行为在设计上可以被其他人利用。例如,有人充值了dx>0,dy=0,那么另一个人可以按照K值比例充值dy,并执行添加流动性的操作,从而将dx的捐赠收入自己的账户。具体细节比较复杂,我也不太清楚。

任何不按照K值比例添加的流动性都会产生捐赠。例如,dx/dy > x/y,可以先按照(dx-ddx)/dy=x/y的比例添加流动性,并向用户返回相应数量的LPtoken,然后ddx就成为了捐赠。

在同一个区块中,有可能既有添加流动性的交易,又有买卖的交易,这会使K值变得更加复杂。

感谢PlanckerDao成员李世胜对本文的贡献。

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

在区块链世界中,智能合约不仅是代码的信任,更是商业的革命。通过了解其在供应链、版权保护等领域的应用,您将真正体验到智能合约的无限可能性
区块链世界GxPiKaQiu.com ©2020-2024版权所有 桂ICP备16002597号-2