Tick 和范围
V3 使用 Tick 系统将连续的价格空间离散化。每个 Tick 代表一个特定的价格点,流动性头寸由一个 Tick 范围定义。Tick
Ticki 通过以下公式映射到价格:
每个 Tick 代表相邻 Tick 之间 0.01%(1 个基点) 的价格变化。Tick 是从 -887272 到 887272 的整数。
| Tick | 价格 |
|---|---|
| 0 | 1.0 |
| 1 | 1.0001 |
| 100 | 1.01005 |
| 10000 | 2.71828 |
| -10000 | 0.36788 |
Tick 间距
并非每个 Tick 都可用 — 头寸必须对齐到由池费率等级决定的 Tick 间距边界:| 费率等级 | Tick 间距 | 价格精度 |
|---|---|---|
| 0.01% | 1 | 每 0.01% |
| 0.05% | 10 | 每 0.10% |
| 0.3% | 60 | 每 0.60% |
| 1% | 200 | 每 2.02% |
tickLower 和 tickUpper 必须是池 Tick 间距的整数倍。
sqrtPriceX96
在链上,价格以 sqrtPriceX96 格式存储 — 价格的平方根乘以 2^96: 这种编码方式可以在不使用浮点运算的情况下实现高效的定点算术。转换回可读价格:价格范围
流动性头寸由[tickLower, tickUpper] 定义:
价格与 Tick 之间的转换
价格转 Tick: 然后四舍五入到最近的可用 Tick(Tick 间距的整数倍)。 Tick 转价格:Token0 和 Token1
V3 将价格定义为 token1 per token0(price = token1/token0)。地址较小的代币始终为 token0。
对于 KAS/USDC 池,其中 KAS 为 token0:
price = 0.05表示 1 KAS = 0.05 USDCtick ≈ -29959