In CenturionDEX v3, a liquidity position is defined over a bounded price interval. The endpoints of that interval are not arbitrary real numbers; they must coincide with protocol ticks. Ticks are indexed by integers i∈Z, and the price associated with tick i is
p(i)=1.0001i.
We refer to i as the tick index of the price level p(i). Since adjacent ticks differ by 0.01%, the grid of admissible prices is extremely fine and, in practice, covers a very broad range of relevant market prices.
For the concentrated-liquidity model, it is convenient to use canonical notation. Let x and y denote the virtual reserves of tokens X and Y, let L denote the liquidity parameter, and let p denote the spot price of token X in units of token Y. These quantities satisfy
x⋅y=L2,p=xy.
Therefore, the virtual reserves can be written as
x=pL,y=Lp.
Hence, the pair (L,p) completely determines the virtual state of the position.
Since
p(i)=1.0001i/2,
the tick index associated with a price p>0 is the largest integer i such that p(i)≤p. Equivalently,
i(p)=⌊log1.0001(p)⌋=⌊2log1.0001(p)⌋.
Here, ⌊⋅⌋ denotes the floor function.
Example
Consider a CenturionDEX v3 pool between CTN and USDC. Suppose that its current virtual balances are
x=24(CTN),y=60,000(USDC).
Then the current spot price is
p0=xy=2460,000=2,500USDC/CTN.
The corresponding liquidity parameter is
L=xy=24⋅60,000=1,200.
Using the tick-index formula above, the current price is associated with the tick index
i(p0)=⌊log1.0001(2500)⌋=78,244.
Indeed, the neighboring tick prices are
p(78,244)=1.000178,244≈2499.906990,
and
p(78,245)=1.000178,245≈2500.156980.
Now suppose that a liquidity provider wants to create a position over the target price interval
[pa,pb]=[2300,3100].
To obtain a tick-aligned interval that contains this target range, we choose the lower boundary as the greatest tick price not exceeding 2300, and the upper boundary as the smallest tick price not below 3100. Thus,
Therefore, a tick-aligned interval that contains the desired range [2300,3100] is
[p(77,410),p(80,396)]≈[2299.882,3100.126].
Thus, in practice, the liquidity provider would implement the position using these discrete tick bounds rather than the continuous target interval [2300,3100].