Как перевести квадратный корень цены Uniswap v3 в единицы токенов

Пул возвращает корень из отношения минимальных единиц в фиксированной точке. Даже правильно возведя значение в квадрат, график может ошибиться на двенадцать порядков без поправки на точность токенов.

Начните с порядка токенов и целой арифметики

Прочитайте token0, token1 и slot0 на одном блоке. Рассчитайте квадрат sqrtPriceX96, делённый на 2^192, в достаточно широких целых или как дробь. Это сырые единицы token1 на сырую единицу token0.

sqrtPriceX96 = 2^96
raw token1/token0 = 1
token0 decimals = 6; token1 decimals = 18
human token1 per token0 = 10^-12

Для отображения умножьте на 10 в степени decimals0 минус decimals1. В примере целому token0 соответствует 10^-12 token1. Обратную котировку получайте обращением дроби и округляйте только для вывода.

Отделите моментальную цену от исполнения обмена

slot0 показывает текущую предельную цену пула. Обмен конечной суммы может пересечь диапазоны ликвидности и платит комиссию. Для него нужны расчёт обмена или симуляция. Точность проверьте по конкретным контрактам токенов. github.com UniswapV3Pool.sol