Limits
Last updated
Last updated
Limits are similar to ticks on Uniswap V3, but with 10x more precision.
To optimise gas efficiency, prices on Haiko are partitioned into price intervals called limits
. Limits define valid price points at which liquidity positions and limit orders can be placed.
Limits work in the same way as Uniswap's ticks, except they have a minimum increment of 1.00001
(rather than 1.0001
) to allow for more precise price points.
Limits are stored as (positive or negative) integers that must be exponentiated to convert them to a regular price. Specifically:
For instance:
price=1.00001^{720,000}=$1339.38 where
price=1.00001^{0}=$1 where
price=1.00001^{-12,000}=$0.887 where
The interval of valid limits can be configured through a width
parameter, on a per-market basis. Valid limits must be a multiple of width
. For example:
a market with width
of 1 has limits of 25, 26, 27, 28 etc (the minimum width)
a market with width
of 10 has limits of 10, 20, 30, 40 etc
a market with width
of 2500 has limits of -2500, 0, 2500, 5000 etc.
The range of valid price limits spans from -7,906,625
to 7,906,625
for markets of width
1. This is a total of 15,813,251
(251 ** 3
) limits.
At the smart contract level, limits are shifted to range from 0
to 15,813,250
, avoiding the need for signed integers which are not currently natively supported in Cairo. This allows them to fit inside a single u32
slot.
For markets of other widths, the range of valid limits becomes -R
to R
, where R
is the greatest multiple of width
such that R ≤ 7,906,625
.
For example:
markets with width
10 range from -7,906,620
to 7,906,620
markets with width
50 range from -7,906,600
to 7,906,600
markets with width
500 range from -7,906,500
to 7,906,500