ETH/DAI 和 ETH/USDT、ETH/USDC 的 Uniswap V3 sqrtPrice 差别很大

Uniswap V3 sqrtPrice for ETH/DAI and ETH/USDT, ETH/USDC vastly different

我使用 IUniswapV3PoolState.slot0 到 return sqrtPriceX96 并在 Uniswap V3 中勾选不同的货币对。 ETH/DAI的结果非常合理,但是ETH/USDT和ETH/USDC的结果就很不一样了。

这不是因为令牌的顺序,而是价格的最终结果(在处理平方根和Q96之后)相差10^(-12)。所以我会得到 ETH/DAI 大约 $3200,而 ETH/USDT 和 ETH/USDC 会得到 $3200*10^(-12)。有什么我想念的吗?谢谢!

EVM 兼容区块链使用定点数学。您在 UI 中看到的浮点值是抽象的,从技术上讲,一切都是整数;为表示小数而保留的特定位数。不同的 ERC-20 代币保留不同的小数位数。

  • WETH 和 DAI 有 18 位小数
  • USDT和USDC有6位小数。

如果您的资产 X 有 6 个小数点,资产 Y 有 18 个小数点,那么必须根据这个事实更正 Y 的 X 价格。

让我们使用price = y/x,那么根据小数位数调整后的价格将是price_adjusted = y/x * 10^(-12)。要了解原因,请参阅 Section 3.3.2 here: