57 lines
1.4 KiB
Markdown
57 lines
1.4 KiB
Markdown
# Uniswap V3 Pricing Documentation
|
|
|
|
This document explains the Uniswap V3 pricing model and how it's implemented in the MEV bot.
|
|
|
|
## Core Concepts
|
|
|
|
### Ticks
|
|
In Uniswap V3, prices are represented as ticks. A tick is defined as:
|
|
|
|
```
|
|
tick = log√1.0001(√P)
|
|
```
|
|
|
|
Where P is the price of token1 in terms of token0.
|
|
|
|
Ticks are integers that range from -887272 to 887272.
|
|
|
|
### sqrtPriceX96
|
|
Prices are stored internally as sqrtPriceX96, which is:
|
|
|
|
```
|
|
sqrtPriceX96 = √P * 2^96
|
|
```
|
|
|
|
This allows for precise fixed-point arithmetic without floating-point operations.
|
|
|
|
### Liquidity
|
|
Liquidity in a pool is represented as a uint128 value that determines the depth of the pool at a given price.
|
|
|
|
## Mathematical Relationships
|
|
|
|
### Converting between representations
|
|
|
|
1. Tick to sqrtPriceX96:
|
|
```
|
|
sqrtPriceX96 = 1.0001^(tick/2) * 2^96
|
|
```
|
|
|
|
2. sqrtPriceX96 to Tick:
|
|
```
|
|
tick = log_1.0001(sqrtPriceX96 / 2^96)^2
|
|
```
|
|
|
|
3. Price to Tick:
|
|
```
|
|
tick = log_1.0001(price)
|
|
```
|
|
|
|
## Implementation Details
|
|
|
|
Our Go implementation uses the math/big package for precision and handles the fixed-point arithmetic required for Uniswap V3 calculations.
|
|
|
|
Key functions:
|
|
- `SqrtPriceX96ToPrice`: Converts sqrtPriceX96 to a floating-point price
|
|
- `PriceToSqrtPriceX96`: Converts a floating-point price to sqrtPriceX96
|
|
- `TickToSqrtPriceX96` : Converts a tick to sqrtPriceX96
|
|
- `SqrtPriceX96ToTick` : Converts sqrtPriceX96 to a tick |