Uniswap V3 Pool Contract 的maxLiquidityPerTick 的 初识 (三)——uint24((maxTick - minTick) / tickSpacing) +1

library Tick {
    function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128) {
     int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing;
    int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing;
    uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1;
    return type(uint128).max / numTicks;
}
}

我们来看为何 uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1;中要加1。
计算在最小和最大价格点之间有多少个价格点(numTicks),包括两端的价格点。
使用种树的例子来解释为什么在计算价格点(ticks)时需要加1,可以这样理解:

想象你有一个长直线的道路,你想要在路上种一排树。每棵树代表一个价格点,道路的两端也都要种上树。

  1. 确定范围:首先,确定你想种树的起点(minTick)和终点(maxTick)。比如,起点是道路的一端,终点是另一端。

  2. 确定间隔:然后,决定两棵树之间间隔多远种一棵树,这个间隔就是 tickSpacing

  3. 计算间隔数:如果你想计算在起点和终点之间可以种多少个间隔,你会用总长度(maxTick - minTick)除以单个间隔的长度(tickSpacing)。这就像计算道路可以容纳多少个树之间的空隙。

  4. 加1:但是,如果你只计算间隔数,你会漏掉终点的那棵树。因此,你需要加1,以确保包括起点和终点的树。这就是为什么计算价格点时需要加1的原因。

  5. 种树:当你种下第一棵树后,按照间隔距离种下第二棵,依此类推,直到你种下了最后一棵树在终点。

  6. 包括两端:加1确保了起点和终点的位置都被计算在内,就像种树时你希望道路的两端都有一棵树一样。

  7. 流动性比喻:在 Uniswap V3 的情况下,每棵树可以被看作是一个价格点,可以提供一定量的流动性。通过计算包括两端在内的总价格点数,你可以知道在给定的价格范围内可以分配多少个独立的流动性段。

  8. 均匀分配:最后,将一个非常大的流动性值(type(uint128).max)均匀分配到每个价格点上,这就像将一大片土地的水资源均匀分配给每棵树,确保它们都能获得所需的养分。

通过这个种树的例子,可以理解在计算价格区间内的数量时加1的重要性,这确保了区间的起点和终点都被包括在内,并且可以进行正确的资源分配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值