Цена Uniswap V3 sqrt для ETH/DAI и ETH/USDT, ETH/USDC сильно отличается

Я использую IUniswapV3PoolState.slot0, чтобы вернуть sqrtPriceX96 и отметить разные пары в Uniswap V3. Результаты очень разумны для ETH/DAI. Но это совсем другое для ETH/USDT и ETH/USDC. Это не из-за порядка токенов, а из-за того, что окончательный результат цены (после учета квадратного корня и Q96) отличается на 10 ^ (-12). Таким образом, я получу ETH/DAI около 3200 долларов, а ETH/USDT и ETH/USDC дадут 3200*10^(-12). Есть ли что-то, что я упускаю? Спасибо!

1 ответ

Блокчейны, совместимые с EVM, используют математику с фиксированной точкой. Значения с плавающей запятой, которые вы видите в пользовательском интерфейсе, являются абстракцией, технически все является целым числом; определенное количество цифр, зарезервированных для представления десятичных знаков. Разные токены ERC-20 резервируют разное количество десятичных знаков.

  • WETH и DAI имеют 18 знаков после запятой.
  • USDT и USDC имеют 6 знаков после запятой.

Если у вас есть актив X с 6 и актив Y с 18 десятичными знаками, то цена Y в выражении X должна быть скорректирована с учетом этого факта.

Позвольте использовать price = y/x, цена с поправкой на количество десятичных знаков будет price_adjusted = y/x * 10^(-12). Чтобы понять, почему, обратитесь к разделу 3.3.2 здесь:

Другие вопросы по тегам