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

Uniswap V3:从Tick计算价格序列出现异常值的问题排查

问题原因及解决办法

你的问题核心是Tick符号搞反或提取了错误的Tick值,结合你提供的交易和池信息,具体分析如下:

1. Uniswap V3 Tick与价格的对应逻辑

Uniswap V3中,Tick的取值范围是-887272到+887272,对应价格的指数级变化。价格公式的正确逻辑是:

  • 池内token0是字典序更小的代币(你的池中sUSD地址0x57ab... < WETH地址0xc02a...,所以token0=sUSD,token1=WETH)
  • 价格表示为1 unit token0 兑换多少 token1(即sUSD → WETH的汇率),对应公式:
    price_token1_per_token0 = 1.0001 ** tick * 10 ** (decimals0 - decimals1)
    
    如果你要计算1 WETH 兑换多少 sUSD(即反向汇率),需要取倒数:
    price_sUSD_per_WETH = 1 / (1.0001 ** tick * 10 ** (decimals0 - decimals1))
    

2. 异常值的直接原因

你得到的3.4e38是典型的使用了正数Tick且数值过大导致的结果:

  • 正常情况下,WETH对sUSD的汇率约3406 sUSD/WETH,对应sUSD→WETH的汇率是1/3406≈0.0002936
  • 代入公式反推正确Tick:tick = log(0.0002936) / log(1.0001) ≈ -82200(负数)
  • 如果你错误地使用了正数Tick(比如+82200),计算结果会是1.0001^82200≈3400,但如果是误取了远超正常范围的大正数Tick(比如+880000),就会得到3.4e38这种天文数字。

3. 可能的错误场景

  • Tick提取错误:你可能误提取了流动性区间的tickUpper(区间上限Tick,通常为大正数),而非交易后池的当前tick(Swap事件中的tick字段)
  • Tick符号搞反:将负Tick当成正Tick代入计算,直接导致价格指数级放大
  • 公式方向错误:混淆了token0/token1与token1/token0的价格方向,没有取倒数

验证建议

  1. 查看该交易的Swap事件日志,确认tick字段的实际值(应为负数,约-82200左右)
  2. 用正确的Tick代入公式计算sUSD→WETH的汇率,再取倒数得到WETH对sUSD的价格,对比你的直接计算结果

内容的提问来源于stack exchange,提问作者Voerch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:40:04