时间:2023-08-10|浏览:174
Uniswap是一个去中心化交易平台,它使用了一种称为恒定乘积算法的方法来确定交易对的初始K值。恒定乘积算法中,当第一个用户添加流动性时,其所添加的资产数量决定了K值的初始大小,即K = x * y,其中x为ETH数量,y为USDT数量。
在Uniswap中,ETH和USDT构成了一个流动性池。这一概念非常重要。第一个添加流动性的用户可以任意选择所添加的两种资产数量,从而任意决定K值的大小。
添加完流动性后,ETH的价格等于流动性池中的USDT数量除以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的手续费,并将其放在一边。交易完成后,这个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,资金池中的资金量变为(x+dx)ETH/(y+dy)USDT。此时,(x+dx)*(y+dy) > x*y,所以添加流动性会使K值增大。同样地,减少流动性则会减小K值。
还有一种特殊情况是捐赠对K值的影响。如果用户在添加流动性时,不按照dx/dy=x/y的比例添加,而是直接向合约地址转入dx>0,dy=0,这也会改变K值。这种捐赠行为并不符合K值的比例规定,因此被Uniswap称为捐赠。
捐赠行为在设计上其实是可以被其他用户套利的。例如,一个用户充值了dx>0且dy=0,此时另一个用户可以按照K值比例的dy充值,并执行添加流动性操作,从而将捐赠的dx转移到自己账户。这个过程比较复杂,具体细节不清楚。
任何不按照K值比例添加流动性的行为都会产生捐赠。例如,如果dx/dy>x/y,则先添加(dx-ddx)/dy=x/y的流动性,并返回给用户对应数量的LPtoken,然后ddx就变成了捐赠。
另外,在同一个区块中,可能既有添加流动性的交易,也有买卖交易,这会使K值更加复杂地变化。
感谢PlanckerDao成员李世胜对本文的贡献。
用戶喜愛的交易所
已有账号登陆后会弹出下载