UniswapV3 slot0() sqrtPriceX96 中的价格不正确

问题描述 投票:0回答:2

我想获取uniswapV3对中代币的价格。例如,我有一对https://etherscan.io/address/0x409634ea16d98b0b245f345079c8f3cfe3ef1fa6。 调用slot0()的结果是[12934124507235850032763499380293, 101910, 0, 1, 1, 0, True],其中12934124507235850032763499380293是sqrtPriceX96。我使用这个公式:价格 = (sqrtPriceX96 ** 2) / (2 ** 192)。结果是 26666 ETH,而实际价格是 0.09$。 Token有18位小数,WETH也是如此。问题出在哪里?

正确的价格计算公式

solidity smartcontracts contract uniswap
2个回答
2
投票

我明白了。如果pair中的token0是基础token,本例中为WETH,则需要进行反向操作。 1/价格。这里我得到 26666 -> 1 / 26666 * 2400 (ETH 价格) = 0.09$.


0
投票

数据中的价格是正确的。这里有一个解释:

.slot0() 返回以下类型

type Slot0RawType = [bigint, number, number, number, number, number, boolean];

可以进一步转换为

type Slot0ReturnType = {
  sqrtPriceX96: BigInt; // Returns a bigint representation of the sqrt price
  tick: number; // Returns the current tick (usually a number)
  observationIndex: number; // Returns the last observation index
  observationCardinality: number; // Returns the max observations that can be stored
  observationCardinalityNext: number; // Returns the next cardinality
  feeProtocol: number; // Returns the protocol fee
  unlocked: boolean; // If the pool is unlocked
};

安装

@evmexplorer/uniswap
以导入类型。该包还包含
convertSlot0()
将数组转换为对象。

© www.soinside.com 2019 - 2024. All rights reserved.