Uniswap V3 sqrt ETH/DAI 和 ETH/USDT、ETH/USDC 的价格差异很大

Tia*_*n L 4 blockchain uniswap

我用来IUniswapV3PoolState.slot0返回 sqrtPriceX96 并在 Uniswap V3 中勾选不同的货币对。对于 ETH/DAI 来说,结果非常合理,但对于 ETH/USDT 和 ETH/USDC 来说,结果却截然不同。

这不是因为代币的顺序,而是价格的最终结果(在考虑平方根和 Q96 后)相差 10^(-12)。所以我会得到 ETH/DAI 大约 3200 美元,而 ETH/USDT 和 ETH/USDC 会得到 3200*10^(-12) 美元。我有什么遗漏的吗?谢谢你!

kfx*_*kfx 7

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

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

如果您的资产 X 有 6 位小数,资产 Y 有 18 位小数,则必须针对这一事实更正以 X 表示的 Y 价格。

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

根据十进制等式调整价格