作者:闪电黄世亮
本文介绍uniswap里的恒定乘积算法中的K值是怎么设计的。
我们拿uniswap里的一个交易对,ETH/USDT来举例说明K值是怎么设计的。
恒定乘积算法
uniswap里第一个人添加x个ETH和y个USDT的作为流动性时,决定了K值的初始大小,即K=x*y。
这时,ETH和USDT共同构成了一个流动性池。请记住这个概念,很重要。
第一个添加流动性的人,可以任意添加交易对中的两个币的数量,即可以任意决定K值。
分析 | 币价连续多日持续窄幅震荡 继续等待方向性选择:据Bgain投研数据:自北京时间11月16日18点-11月17日18时,BTC价格上涨0.1%,结合量化交易的BTC本位增强指数均略有下跌,其中Bgain交易指数下跌0.21%,CTA指数下跌0.27%,对冲交易指数下跌0.08%。截至18点,OKEX精英用户多空占比为50%/47%;火币精英用户多空占比47%/50%,Bitfinex多/空保证金占比为80%/20%,BitMEX多空仓位占比为52%/47%,市场情绪持续观望。币价日间波动微弱,尾盘波动幅度超200点,多空双方都略有试探,但都后续乏力,币价连续多日持续窄幅震荡,继续等待方向性选择。[2019/11/17]
添加完流动性后,ETH的价格就等于=y(USDT的数量)/x(ETH的数量)。如果这个价格和其他交易所之间有价差,那肯定会被人搬砖套利。
分析 | BTC期货合约主力持仓数据:金色独家分析:截止北京时间9月27日22:06,我们统计了BITFINEX、BITMEX两家交易所的主力多空持仓数据,目前BITFINEX主力空头依然占优,持仓52.65%,而BITMEX主力多头占优,56.10%,两个市场合计主力多头持仓52.52%,多头占有优势,最近几日仓位变化不大,说明市场相对平稳,但接下来振幅也许会加剧。建议投资者保持理性投资,做好风险控制。[2018/9/27]
所谓的恒定乘积算法,指的是在流动性池没有再添加或减少流动性的情况下,只有交易行为发生的情况下,K值是不变的。
波卡公布最新路线图,预计异步支持功能将使 TPS 达到 10-100万:9月27日消息,波卡联合创始人 Rob Habermeier 在官方博客公布波卡最新路线图,其中包括年底前在 Kusama 上部署异步支持功能,随后部署在主网,该功能可以将平行链出块时间减少到 6 秒,将每个区块的可用空间量增加 5-10 倍,并允许平行链区块在第一次尝试没有进入中继链时被“重用”,预计此次更新将使网络的总 TPS 容量达到 100,000 到 1,000,000 之间,而不会影响网络所做的安全保证。
此外,波卡还计划在 2023 年第一季度或第二季度上线平行线程功能,该功能使平行链临时参与波卡安全性、启动区块链而无需参与拍卖并租用专用平行链插槽;在 2022 年 10 月中旬投入使用 Weights V2,该版本引入了多维权重的概念,它不仅测量执行时间,还测量特定操作访问的状态量。[2022/9/27 22:31:32]
即如果用户在ETH/USDT交易对里买入或卖出ETH,都无法改变K值的大小。
而交易行为会修改流动性池里的ETH和USDT的成分。比如用户买了dx个ETH,则流动性池里的ETH的数量就会变成,而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的手续费丢在一边,完成交易后,这0.3%dy会被添加到流动性池里,此时K值就变成了x*(y+0.3%dy)。
所以,恒定乘积算法的K值并不恒定,每一笔交易都会影响K值。
添加流动性影响K值
如果现在资金池里有xETH/yUSDT,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,dy=0,也是可以的。这同样会改变K值。
这样的事是经常发生的,有些人错误地将ETH转入一个uniswap流动性池合约地址里,就产生了捐赠行为,白白把币送给了所有原来的流动性所有者。
这种非K值比例添加流动性的行为,被uniswap称为捐赠。
但这种捐赠行为,在设计上是可以被其他人套利的。比如有人充值了dx>0,dy=0;此时另外的人可以充值按K值比例的dy,并且执行一个添加流动性的操作,就可以把那dx的捐赠给薅走。这个挺复杂的,细节我也搞不清楚。
任何不是按K值比例添加的流动性,都会产生捐赠。比如dx/dy>x/y,则先添加(dx-ddx)/dy=x/y的流动性,并返回给用户对应数量的LPtoken。然后ddx就变成了捐赠。
还有,在同一个区块里,可能即有交易是添加流动性的,也有交易是买卖,那K值就会更复杂的变化。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。