Free

Пусть Claude прочитает пул Uniswap V3 за 5 минут

Поле liquidity пула Uniswap V3 — это ни деньги, ни глубина свопа. Пусть Claude разъяснит каждое поле, которое легко прочитать неправильно.


Любой, кто связался с DeFi, рано или поздно начинает разглядывать данные пулов Uniswap V3. И в той сетке цифр на странице пула есть как минимум одно поле, которое почти все читают неправильно с первого раза —— настолько неправильно, что можно поверить, будто в пуле на 100 миллионов долларов лежит 3,2 квинтиллиона долларов «ликвидности».

Эта статья читает пул от начала до конца за пять минут, используя smarts MCP вместе с Claude. Реальные данные, пул USDC/WETH 0.05% на мейннете.

Вытащить всё состояние пула одним запросом

Когда smarts MCP подключён, Claude вызывает get_uniswap_v3_pool со слагом univ3-usdc-weth-eth и получает вот это:

protocol: Uniswap V3
pair: USDC/WETH
fee: 0.05%
price:
  1 WETH in USDC: 2310.3381
  1 USDC in WETH: 0.00043283
tick: 198868
liquidity: 3243712254364037809
liquidity_note: Uniswap V3 sqrt-formula virtual liquidity
                at the current tick. Not a USD amount and
                not the depth available to swap.
tvl_usd: 100,645,897.62
tokens:
  token0: USDC (decimals 6)
  token1: WETH (decimals 18)
block_number: 24959248

Сами по себе данные простые. Дело в том, что в каждом поле есть ловушка. Разберём по очереди.

token0 и token1 упорядочены не по бизнес-логике

Многие думают, что в пуле USDC/WETH USDC — это «основная валюта», а WETH — «оцениваемый актив». Не так. Uniswap V3 строго упорядочивает token0 и token1 по числовому значению адресов. Адрес USDC 0xa0b8... меньше адреса WETH 0xc02a..., поэтому token0 = USDC, token1 = WETH.

Этот порядок управляет всеми внутренними расчётами: куда направлена цена, в какую сторону движутся тики, в чём измеряется ликвидность. Перейдите к другому пулу, например WETH/DAI, и роли token0/token1 могут поменяться местами —— любую интуицию «ETH идёт вверх или вниз?» придётся пересчитывать.

Один из плюсов того, что пул читает Claude: он сразу возвращает цену с метками для обоих направлений, и не нужно в уме определять, «какая сторона тика — какой токен».

fee 0.05% означает «стабильную пару»

Четыре стандартных уровня комиссии в Uniswap V3 — 0.01% / 0.05% / 0.30% / 1.00%.

  • 0.01%: стейблкоин против стейблкоина (USDC/USDT)
  • 0.05%: сильно скоррелированные активы (USDC/WETH и подобные —— глубокие, малой волатильности пары)
  • 0.30%: обычные пары
  • 1.00%: длинный хвост, высокая волатильность

То, что USDC/WETH использует 0.05%, а не 0.30%, говорит: маркетмейкеры ставят на оборот, а не на жирные комиссии за сделку, потому что волатильность ограничена, а поток огромен.

Зная это, увидев новый пул на 1% комиссии, можно догадаться: либо это свежий токен, либо парой никто не интересуется.

price берётся прямо из текущего тика —— нет «последней цены сделки»

В состоянии пула V3 нет отдельного поля «последняя цена сделки». Текущая цена — это то, что говорит slot0.sqrtPriceX96, а тик — её логарифмическое выражение. Иными словами: пока никто не торгует, цена просто стоит там, модель совершенно отличная от «последнего исполнения» на CEX.

(Для исторических цен используется встроенный oracle V3 —— в состоянии пула хранится массив накопителей observation, из которого можно получить TWAP. Это отдельный механизм.)

Прочитанные нами 1 WETH = 2310.34 USDC — это «текущая котировка» пула; следующий swap начинается с этой цены и толкает её вдоль кривой к новому тику.

tick — дискретная координата логарифмической цены

tick: 198868 — число, которое сбивает всех с толку с первого раза. По ощущению это какая-то цена, но не доллары.

V3 дискретизирует цену логарифмически: raw_price = 1.0001^tick, где raw_price — это wei токена1, делённые на wei токена0 —— не отображаемая цена. Чтобы превратить это в «1 ETH в USDC», ещё нужно умножить на 10^(decimals_token0 - decimals_token1). После этой поправки tick 198868 действительно соответствует 1 ETH ≈ 2310 USDC.

Зачем такая запутанная схема? Потому что когда цена логарифмическая, маркетмейкеры могут размещать ликвидность только в определённом ценовом диапазоне —— например, «только между 2200 и 2400». Дискретные тики и есть метки этих диапазонов. Это фирменное новшество V3 по сравнению с V2: концентрированная ликвидность.

На практике тики считать не надо. Достаточно знать: больший тик не обязательно означает более высокую цену (зависит от того, кто token0), и шаг в один тик — это изменение цены на 0.01%.

Поле liquidity: его проще всего прочитать неверно

Вот большая ловушка: liquidity: 3243712254364037809.

19 цифр, выглядит как wei. Но это не деньги.

Это «виртуальная ликвидность» L из математики Uniswap V3 —— внутренний параметр, выражающий наклон кривой маркетмейкинга в диапазоне sqrt-price. Его единицы — не USD, и его нельзя сравнивать с реальными активами пула.

Ответ инструмента прямо предупреждает через liquidity_note:

Uniswap V3 sqrt-formula virtual liquidity at the current tick. Not a USD amount and not the depth available to swap.

Почему вторая половина? Потому что ещё одна частая ошибка — читать liquidity как «сколько я могу обменять прямо сейчас без проскальзывания». Тоже неверно. Глубина swap в V3 считается по кускам: внутри текущего диапазона тиков используется этот L и формула sqrt-price; как только swap выводит цену за границу тика, переходим в следующий диапазон и переключаемся на его L. Каждая пройденная граница меняет L, пока сделка не закончится. Поэтому «сколько можно обменять без проскальзывания» зависит от того, сколько L уложено в каждом диапазоне на пути —— одно число из slot0 этого не говорит.

Запомнить: не сравнивайте поле liquidity с USD и не используйте его для сравнения «глубины» между пулами —— это вводит в заблуждение.

TVL: сколько денег реально в пуле

tvl_usd: 100,645,897.62. Вот это — реальные деньги пула.

Откуда берётся это число? Это фактический баланс контракта в USDC плюс фактический баланс в WETH, каждый умноженный на текущую цену в USD из DefiLlama, и сложено.

В сравнении с полем liquidity:

Поле Значение Смысл
liquidity 3.24 × 10¹⁸ внутренний математический параметр V3, без единиц
tvl_usd $100,645,897 реальные деньги, удерживаемые пулом

Оба обычно переводят как «ликвидность», но это разные вещи. Для рассказа смотрите на TVL, для математики — на liquidity, никогда не смешивайте.

block_number: вы смотрите на снимок блока

Последняя деталь: block_number: 24959248.

Данные on-chain всегда идут с номером блока. Каждое поле, которое вытащил Claude, прочитано в одном и том же блоке. Это даёт два следствия:

  1. Цена, ликвидность и TVL согласованы между собой (без дрейфа вроде «цена 5 минут назад, TVL — сейчас»)
  2. Через секунду они уже могут отличаться

Для логики мониторинга или арбитража это ключевое свойство —— одно чтение даёт согласованный срез мира, и не нужно бояться расхождения полей по времени.

Применить на деле

Когда всё это понимаешь, инструментарий открывается:

  • Проверка здоровья пула: возьмите фактические балансы token0/token1 (не поле liquidity) и проверьте, сходятся ли они математически с TVL. Большие балансы при цене, далёкой от справедливой, могут указывать на пространство для арбитража.
  • Сравнение между уровнями комиссии: у USDC/WETH есть пулы и на 0.05%, и на 0.30%; цены обычно идут рядом —— расширяющийся спред — сигнал арбитража.
  • Кросс-чейн сравнение: сравните USDC/WETH в мейннете Ethereum с USDC/WETH на Base —— спред говорит о стоимости моста и ликвидности.
  • Мониторинг тиков: отслеживайте движение тиков, чтобы заметить «цена пересекла границу».

Раньше всё это требовало установить web3.py, написать скрипт, поддерживать ABI, арендовать RPC. Сейчас всё это на уровне беседы с Claude + MCP —— спрашиваете, он читает.

Чтобы прочитать пул, математика не обязательна

В математической модели V3 есть стена. sqrtPriceX96, тики, L, концентрированная ликвидность —— эти понятия отпугнули многих. Но на практике 90% того, что нужно, это «здоров ли этот пул, есть ли в нём деньги, какая цена?» —— без формул.

Сделайте Claude своим переводчиком V3, превращающим виртуальную ликвидность и кодировку тиков в простое «1 ETH = 2310 USDC, в пуле 100 миллионов долларов». Решения дальше — за вами.