# Limits

{% hint style="info" %}
Limits are similar to ticks on Uniswap V3, but with 10x more precision.
{% endhint %}

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](https://docs.uniswap.org/concepts/protocol/concentrated-liquidity#ticks), except they have a minimum increment of `1.00001` (rather than `1.0001`) to allow for more precise price points.&#x20;

### Converting limits to prices

Limits are stored as (positive or negative) integers that must be exponentiated to convert them to a regular price. Specifically:

$$price = 1.00001^{limit}$$&#x20;

For instance:

$$price=1.00001^{720,000}=$1339.38$$   where $$limit =720,000$$

$$price=1.00001^{0}=$1$$   where $$limit = 0$$

$$price=1.00001^{-12,000}=$0.887$$   where $$limit = -12,000$$

### Limit width

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.

### Valid range of limits

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.&#x20;

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`
