You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UniswapV3中slot0()返回sqrtPriceX96计算价格错误问题排查

UniswapV3 价格计算错误分析与正确公式

问题根源

你犯了两个关键错误:

  1. 价格方向完全搞反:UniswapV3的sqrtPriceX96代表的是sqrt(token1 / token0),直接用(sqrtPriceX96²)/(2^192)算出的是1个token0兑换多少token1的比例。但你的场景里,token1是WETH,token0是目标代币,你需要的是1个目标代币兑换多少WETH,也就是这个比例的倒数。
  2. 缺少法币转换环节:你算出的是代币与WETH的兑换比例,要得到美元价格,必须乘以WETH的实时美元价格。

正确计算步骤

1. 确认Token顺序

先明确池中的token0和token1:你的示例池中,token0是目标代币,token1是WETH。

2. 计算代币与WETH的兑换比例

如果目标代币是token0,正确的1个目标代币兑换的WETH数量公式为:

# 计算 1 token0 = ? WETH(token1)
price_token0_in_weth = (2 ** 192) / (sqrtPriceX96 ** 2)

如果目标代币是token1,则用你最初的公式:

price_token1_in_token0 = (sqrtPriceX96 ** 2) / (2 ** 192)

3. 转换为美元价格

由于两个代币都是18位小数,上述计算结果直接是真实数量比例,再乘以WETH的实时美元价格即可得到代币的美元价格:

# 假设WETH当前价格为2400美元
token_usd_price = price_token0_in_weth * weth_usd_price

验证你的示例

代入你的sqrtPriceX96=12934124507235850032763499380293:

  1. 计算(2^192)/(sqrtPriceX96²),得到约3.75e-5 WETH/代币;
  2. 乘以WETH的美元价格(如2400美元):3.75e-5 * 2400 = 0.09美元,与实际价格完全匹配。

内容的提问来源于stack exchange,提问作者Владислав Сизов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:45:11