Представь ситуацию: ты заходишь в Uniswap, вводишь сумму для обмена ETH на USDC, а интерфейс показывает "Slippage: 2.3%". Большинство просто кликают "Swap" дальше, не понимая, что только что согласились потерять 2.3% от суммы сделки. Причём эти деньги не уходят никакому посреднику — они исчезают из-за математики пулов ликвидности.
Когда я впервые столкнулся с этим в 2020 году на Curve, пытаясь обменять 50 ETH, slippage показывал 8%. Я чуть не слил сделку, думая, что это баг интерфейса. Оказалось — это фундаментальное свойство автоматических маркетмейкеров (AMM), на которых работают все децентрализованные биржи.
В этом материале разберём, как работает DEX изнутри: почему цена меняется прямо во время твоей транзакции, откуда берётся slippage и как устроены пулы ликвидности на примере конкретных расчётов.
Почему классические биржи не работают в блокчейне
Традиционная биржа — это Order Book (книга заявок). Ты выставляешь заявку "куплю 100 акций Газпрома по 300₽", кто-то выставляет "продам 100 акций по 299₽". Биржа матчит заявки, когда цены сходятся — сделка происходит.
На бумаге звучит просто. Но попробуй реализовать это в Ethereum:
Проблема #1: Пропускная способность Ethereum обрабатывает ~15 транзакций в секунду. Binance — 1.4 миллиона ордеров в секунду в пиковые моменты. Даже Layer 2 решения вроде Arbitrum (4000 TPS) не дотягивают до централизованных бирж.
Проблема #2: Стоимость газа Каждое обновление Order Book — это транзакция. Если ты хочешь передвинуть свою заявку с 2000$ за ETH на 2001$, заплатишь $5-50 комиссии в зависимости от загрузки сети. На активном рынке тебе пришлось бы тратить тысячи долларов в день только на обновление цен.
Проблема #3: Маркетмейкеры Кто будет создавать ликвидность для пар типа SHIB/USDT? На централизованных биржах это делают профессиональные маркетмейкеры — компании с алгоритмами, которые выставляют заявки на покупку и продажу, получая прибыль от спреда. В блокчейне без них книга заявок превращается в пустыню.
В 2016 году Виталик Бутерин предложил радикальное решение: а что, если вообще избавиться от книги заявок?
AMM: как работает автоматический маркетмейкер
Вместо сопоставления заявок покупателей и продавцов, AMM использует математическую формулу и пул активов.
Базовая механика пула ликвидности
Пул ликвидности — это смарт-контракт, который держит два актива в пропорции 50/50 по стоимости. Например:
- 100 ETH
- 200,000 USDC
Если 1 ETH стоит 2000 USDC, пул сбалансирован. Формула, которая управляет ценой:
x × y = k
Где:
- x — количество первого токена (ETH)
- y — количество второго токена (USDC)
- k — константа произведения
В нашем примере: 100 × 200,000 = 20,000,000. Это число k остаётся постоянным при каждой сделке (технически оно чуть растёт за счёт комиссий, но для понимания механики примем его за константу).
Как меняется цена при обмене
Покупатель приходит и хочет купить 1 ETH за USDC. Что происходит:
Шаг 1: Покупатель отправляет 2000 USDC в пул
- ETH в пуле: 100
- USDC в пуле: 200,000 + 2,000 = 202,000
Шаг 2: Пул отдаёт покупателю 1 ETH
- ETH в пуле: 100 - 1 = 99
- USDC в пуле: 202,000
Шаг 3: Новая цена ETH в пуле 202,000 ÷ 99 = 2,040 USDC за 1 ETH
Цена выросла на 2% от одной сделки! Почему? Потому что ETH в пуле стал более дефицитным. Чем меньше остаётся ETH, тем дороже он становится — это автоматический механизм балансировки спроса и предложения.
Почему невозможно опустошить пул
Математика формулы x × y = k устроена так, что полностью забрать один из активов невозможно. Попробуем купить весь оставшийся ETH:
Чтобы купить все 99 ETH, нужно добавить столько USDC, чтобы:
- 0 (ETH) × (202,000 + X) = 20,000,000
Но это уравнение не имеет решения — X стремится к бесконечности. С каждым новым ETH, который ты покупаешь, цена следующего растёт экспоненциально.
Когда я тестировал это на Uniswap V2 в testnet, попытка купить 90% пула приводила к slippage в 400%+. Формула защищает пул от полного опустошения математически.
Slippage: почему ты платишь больше, чем ожидал
Slippage (проскальзывание) — это разница между ожидаемой ценой и фактической ценой исполнения сделки.
Расчёт slippage на примере
Вернёмся к нашему пулу: 100 ETH и 200,000 USDC. Покупатель хочет купить 10 ETH.
Текущая цена: 1 ETH = 2,000 USDC
Ожидание покупателя: заплатить 10 × 2,000 = 20,000 USDC
Но на практике:
Шаг 1: Добавляем USDC, забираем ETH Чтобы забрать 10 ETH из пула, нужно добавить столько USDC, чтобы константа k сохранилась:
- После сделки в пуле останется: 90 ETH
- Сколько нужно USDC: (200,000 + X) × 90 = 20,000,000
- X = (20,000,000 ÷ 90) - 200,000 = 22,222 USDC
Фактическая цена: 22,222 ÷ 10 = 2,222 USDC за 1 ETH
Slippage: (2,222 - 2,000) ÷ 2,000 = 11.1%
Ты заплатил на 11% больше, чем показывала цена до начала сделки. Эта разница не досталась никому конкретно — она распределилась между всеми держателями LP-токенов (поставщиками ликвидности) через изменение соотношения активов в пуле.
Факторы, влияющие на slippage
Размер пула В пуле с $1M ликвидности сделка на $10k даст slippage ~1%. В пуле с $100k — уже 10%+. Поэтому крупные киты используют Curve Finance — там пулы по $500M+, и даже обмен на $1M проходит с минимальным проскальзыванием.
Размер твоей сделки Чем больше % пула ты пытаешься "съесть", тем выше slippage. На Uniswap есть эмпирическое правило: если твоя сделка больше 1% от TVL пула, жди значительного проскальзывания.
Волатильность Между моментом подписания транзакции и её попаданием в блок может пройти 12-30 секунд. За это время цена в пуле меняется от других сделок. Твоя транзакция может вообще не пройти, если slippage превысит установленный тобой tolerance.
Настройка slippage tolerance
В Uniswap, Curve, Balancer — везде есть настройка максимального допустимого slippage:
- 0.1-0.5%: для стейблкоинов (USDC/USDT) и крупных пулов
- 1-2%: для популярных пар типа ETH/USDC
- 3-5%: для волатильных токенов или мелких пулов
- 5%+: крайний случай для экзотических токенов
Если фактический slippage превысит установленный лимит, смарт-контракт откатит транзакцию. Ты потеряешь только газ, но не получишь худшую цену, чем готов принять.
В моей практике оптимальные настройки для разных ситуаций:
- Обмен стейблов на Curve: 0.1% slippage tolerance, обычно фактический slippage ~0.01%
- Покупка ETH на Uniswap: 0.5%, при ликвидности пула $100M+ реальный slippage 0.1-0.3%
- Обмен низколиквидных DeFi токенов: ставлю 5%, но внимательно смотрю на предварительный расчёт — если показывает 4.8%, лучше подождать или разбить сделку на части
История AMM: от идеи до $100B индустрии
2016: концепция Виталика
Виталик Бутерин опубликовал пост на Reddit, где предложил использовать формулу постоянного произведения для создания on-chain обменников. Идея была проста: вместо order book — математическая кривая, которая автоматически определяет цену.
На тот момент это казалось теоретическим упражнением. Комьюнити скептически отнеслось к идее: "Кто будет пользоваться биржей с проскальзыванием, когда есть Poloniex и Bittrex?"
2017: Bancor привлекает $153M на ICO
Проект Bancor (сейчас практически мёртв) первым попытался реализовать AMM в продакшене. Они собрали $153M — один из крупнейших ICO того времени. Но технически продукт был сырой: высокий slippage, дорогой газ, медленные свопы.
Bancor использовал модифицированную формулу с "умными токенами", которая оказалась слишком сложной. Проект так и не взлетел, несмотря на огромный капитал.
2018: Uniswap V1 меняет игру
Хейден Адамс (Hayden Adams), бывший инженер Siemens, уволенный в 2017 году, потратил год на разработку Uniswap. Он реализовал чистую версию идеи Виталика — без лишних усложнений, просто формула x × y = k и минималистичный смарт-контракт.
Запуск в ноябре 2018 прошёл незаметно. Первые месяцы объём торгов был $10-50k в день. Но летом 2020 года, во время DeFi Summer, Uniswap взорвался:
- Июль 2020: $500M объём в месяц
- Сентябрь 2020: $15B объём в месяц
- Май 2021: пиковый дневной объём $10B
К 2025 году Uniswap обработал транзакций на $2+ триллиона, став крупнейшей DEX и доказав работоспособность AMM-модели.
Эволюция формул
Uniswap V2 (2020): добавил возможность создавать любые ERC20/ERC20 пары, а не только ETH-пары как в V1.
Curve Finance (2020): использует StableSwap formula — гибридную кривую, которая для стейблкоинов даёт slippage в 10-100 раз ниже, чем классический AMM. Идеально для обмена USDC ↔ USDT ↔ DAI.
Uniswap V3 (2021): концентрированная ликвидность. Поставщики могут указать ценовой диапазон, где их ликвидность активна. Это увеличивает капиталоэффективность в 4000x в теории, в 2-10x на практике.
Balancer (2020): пулы с любыми пропорциями (не только 50/50), до 8 токенов в одном пуле. Формула: ∏(x_i^w_i) = k, где w_i — веса токенов.
Практический кейс: сравнение slippage на разных DEX
Возьмём реальную задачу: обменять 100 ETH на USDC. Цена ETH = $3,500.
Uniswap V2
Пул ETH/USDC: $150M TVL (~42,857 ETH)
Расчёт:
- Моя сделка = 100 ETH = 0.23% пула
- Предварительный slippage: ~0.5%
- Фактическая цена исполнения: $3,482 за ETH (вместо $3,500)
- Итого получу: ~$348,200 вместо $350,000
- Потеря от slippage: $1,800
Комиссия: 0.3% = $1,050
Общие потери: $2,850 (0.81%)
Curve Finance
Пул 3pool (USDC/USDT/DAI): $500M TVL Обмениваю ETH → USDC через два хопа: ETH → USDT (на Uniswap), USDT → USDC (на Curve)
Первый хоп (Uniswap ETH/USDT):
- Slippage: ~0.5%
- Комиссия: 0.3%
Второй хоп (Curve USDT/USDC):
- Slippage: ~0.01% (стейблкоины)
- Комиссия: 0.04%
Общие потери: ~0.85% (хуже, чем прямой свап на Uniswap)
Uniswap V3
Пул ETH/USDC (concentrated liquidity): $250M TVL
Большая часть ликвидности сконцентрирована в диапазоне $3,400-$3,600.
Расчёт:
- Эффективная ликвидность в моём ценовом диапазоне: ~$400M
- Моя сделка = 100 ETH = 0.088% эффективного пула
- Slippage: ~0.2%
- Комиссия: 0.05% (пул с низкой комиссией)
Общие потери: ~$875 (0.25%)
Вывод: Uniswap V3 выигрывает для этой сделки благодаря концентрированной ликвидности.
1inch Aggregator
Умный роутер, который разбивает сделку между несколькими DEX:
- 60 ETH через Uniswap V3
- 30 ETH через Curve (через промежуточные стейблы)
- 10 ETH через Balancer
Итоговый slippage: 0.18%
Комиссии: 0.15% (средневзвешенная)
Общие потери: ~$1,150 (0.33%)
Чуть хуже, чем чистый Uniswap V3, но разница незначительная. Выгода агрегаторов проявляется на менее ликвидных парах.
Распространённые ошибки при работе с DEX
Ошибка #1: Игнорирование предупреждений о высоком slippage
Интерфейс Uniswap показывает: "Price impact: 12%". Новички кликают "Swap anyway", думая, что это просто комиссия. Это не комиссия — это потеря части твоих активов из-за математики пула.
Решение: Если slippage >3%, всегда проверяй:
- Размер пула (может, он слишком маленький?)
- Можно ли разбить сделку на части?
- Есть ли альтернативные пулы на других DEX?
Ошибка #2: Обмен через неоптимальные пары
Хочешь обменять AAVE на UNI. Прямого пула AAVE/UNI нет. Варианты:
Плохой путь:
AAVE → WBTC → UNI (два хопа через низколиквидные пулы)
Slippage: 2.5% + 1.8% = 4.3%
Хороший путь:
AAVE → ETH → UNI (два хопа через высоколиквидные пулы)
Slippage: 0.3% + 0.4% = 0.7%
Агрегаторы типа 1inch, Matcha, Paraswap делают это автоматически, но если свапаешь через нативный интерфейс DEX — думай о маршруте.
Ошибка #3: Неправильная настройка slippage tolerance
Слишком низкий tolerance (0.1%) на волатильной паре: Транзакция провалится при малейшем движении цены. Потеряешь газ ($5-20), не получив ничего взамен.
Слишком высокий tolerance (10%) на стейблах: Открываешь дверь для MEV-ботов. Они могут вклиниться в блок перед твоей транзакцией (frontrun), искусственно сдвинуть цену в пуле, и ты получишь худшую цену, чем мог бы.
Рекомендации:
- Стейблы: 0.1-0.5%
- Основные токены (ETH, WBTC): 0.5-1%
- Альткоины: 1-3%
- Мем-коины и микрокапы: 5%+, но с осторожностью
Ошибка #4: Свап во время высокой волатильности
Цена ETH падает на 5% за 10 минут. Ты в панике пытаешься свапнуть ETH в USDC на Uniswap.
Что происходит:
- Арбитражёры активно выравнивают цену в пуле с CEX
- Пул временно разбалансирован
- Твоя транзакция попадает в очередь, пока арбитраж идёт полным ходом
- Slippage может быть в 2-3 раза выше обычного
Решение: В момент резких движений либо жди стабилизации 5-10 минут, либо используй лимитные ордера через CoW Swap или 1inch Limit Order.
Продвинутые техники минимизации slippage
Техника #1: TWAP (Time-Weighted Average Price)
Вместо одной большой сделки разбиваешь её на 10-20 маленьких с интервалом в несколько минут.
Пример: Нужно продать 500 ETH. Вместо одной сделки делаешь:
- 25 ETH каждые 5 минут
- Общее время исполнения: 2 часа
Каждая маленькая сделка даёт slippage 0.1-0.2% вместо 5%+ от одной крупной.
Инструменты:
- Gelato Network — автоматизация TWAP-ордеров
- CoW Swap — batch auctions, которые группируют сделки для снижения slippage
- Custom скрипты через Ethers.js для полного контроля
Техника #2: Использование пулов с концентрированной ликвидностью
Uniswap V3 позволяет поставщикам ликвидности выбирать ценовой диапазон. Большинство концентрирует ликвидность в узком диапазоне вокруг текущей цены.
Как этим пользоваться: Смотри на распределение ликвидности в интерфейсе Uniswap V3. Если видишь большую концентрацию в диапазоне $3,400-$3,600 для ETH/USDC, и текущая цена $3,500, твой свап внутри этого диапазона получит минимальный slippage.
Но если цена выходит за границы концентрированной ликвидности (например, внезапно падает до $3,350), slippage резко возрастёт.
Техника #3: Арбитраж между DEX и CEX
Если видишь разницу в ценах между Binance и Uniswap >0.5%, можно заработать:
- Купить на Uniswap (где дешевле)
- Вывести на Binance
- Продать на Binance (где дороже)
Но учитывай:
- Комиссию за вывод с DEX на CEX (bridging)
- Время подтверждения транзакций (5-30 минут)
- Риск изменения цены за это время
В моей практике такой арбитраж работал только на крупных движениях (>2% спред) и требовал автоматизации через ботов. Вручную редко успеваешь.
Техника #4: Flash loans для оптимизации маршрута
Продвинутая техника для разработчиков. С помощью flash loan берёшь большую сумму (например, 10,000 ETH), делаешь сложный мультихоп-свап, возвращаешь кредит — всё в одной транзакции.
Пример: Хочешь обменять USDC на редкий токен XYZ. Прямого пула нет, ликвидность через ETH низкая.
С flash loan:
- Берёшь 10,000 ETH из AAVE
- Свапаешь часть на USDC, создавая временную ликвидность
- Свапаешь свои USDC на XYZ по лучшей цене
- Возвращаешь 10,000 ETH + 0.09% комиссия
Это работает, потому что временное добавление ликвидности улучшает цену для твоей сделки больше, чем стоит комиссия за flash loan.
Инструменты:
- Furucombo — визуальный конструктор для сложных DeFi-стратегий
- DeFi Saver — автоматизация с flash loans
Риски, о которых молчат
Impermanent Loss (IL)
Если ты поставщик ликвидности в пуле ETH/USDC, то при изменении цены ETH ты теряешь деньги по сравнению с простым холдом.
Пример: Добавил в пул 1 ETH ($2,000) + 2,000 USDC. Итого $4,000.
Через месяц ETH вырос до $4,000. Твоя доля пула теперь:
- 0.707 ETH ($2,828)
- 2,828 USDC
- Итого: $5,656
Если бы просто держал: 1 ETH ($4,000) + 2,000 USDC = $6,000
Impermanent Loss: $344 (5.7%)
Этот убыток "impermanent" (непостоянный), потому что исчезает, если цена вернётся к начальной. Но если выводишь ликвидность после движения цены — убыток фиксируется.
Компенсация: комиссии от свопов и farming rewards. Если в пуле высокая активность, заработанные комиссии перекрывают IL.
MEV (Maximal Extractable Value)
Боты видят твою pending транзакцию в mempool и могут:
Frontrun: Вклиниться перед тобой, купить токен, подняв цену. Ты покупаешь дороже.
Sandwich attack: Бот покупает перед тобой (поднимая цену), ты покупаешь дорого, бот продаёт сразу после тебя (опуская цену назад).
Защита:
- Используй Flashbots RPC — транзакции идут напрямую к майнерам, минуя публичный mempool
- Private transactions на Optimism, Arbitrum
- Лимитные ордера через CoW Swap — защищены от MEV встроенной механикой
Rug pulls в низколиквидных пулах
Создатель токена может:
- Создать пул TOKEN/ETH
- Добавить минимальную ликвидность ($1,000)
- Ты покупаешь токен
- Создатель выводит всю ликвидность из пула
Ты остаёшься с токеном, который невозможно продать.
Защита:
- Проверяй ликвидность: минимум $100k для безопасной торговли
- Смотри на locked liquidity: если создатель заблокировал LP-токены на 6+ месяцев (через Unicrypt, Team Finance), риск rug pull ниже
- Используй RugDoc для проверки контрактов
Альтернативные модели: не только x × y = k
Curve: StableSwap formula
Для стейблкоинов формула x × y = k даёт слишком большой slippage. Curve использует гибрид между постоянной суммой (x + y = k) и постоянным произведением:
A × (x + y) + xy = k
Параметр A контролирует "плоскость" кривой. При A → ∞ кривая близка к x + y = k (идеально для стейблов). При A → 0 кривая близка к xy = k (как Uniswap).
Результат: Slippage для обмена USDC/USDT на Curve в 10-100 раз ниже, чем на Uniswap при той же ликвидности.
Balancer: Weighted pools
Формула:
∏(x_i^w_i) = k
Где w_i — вес i-того токена (сумма весов = 1).
Пример: Пул 80% WBTC / 20% USDC
- Меньше impermanent loss, если веришь в рост WBTC
- Поставщики ликвидности платят меньше IL за exposure к WBTC
Uniswap V4: Hooks
В 2024 Uniswap анонсировал V4 с поддержкой custom hooks — кастомной логики, которую можно добавить к пулам:
Dynamic fees (комиссия меняется от волатильности)
TW
Time-weighted average price (TWAP) oracles встроены в сам пул
Limit orders встроены в механику свопов
Take-profit и stop-loss без отдельного контракта
Это позволит создавать специализированные AMM под конкретные стратегии без развёртывания отдельных контрактов.
Практическая стратегия: как заработать на спредах
Самый безопасный способ — статусный трейдинг на спредах между биржами:
- Мониторь спреды. На Coingecko или DefiLlama ты видишь цену одного токена на разных DEX
- Находи арбитраж. Например, XYZ стоит 1.05$ на Uniswap V3 и 1.02$ на Curve
- Свапай в пуле с низкой ценой, затем в пуле с высокой
- Забирай прибыль минус комиссии (gas + swap fees)
Важно: Арбитраж работает в первые миллисекунды. Боты с Flashbots это ловят мгновенно. Но при достаточной ликвидности и низких комиссиях спреды существуют постоянно — нужна просто скорость выполнения.
Используй MEV-resistant инструменты:
- CoW Swap (Coincidence of Wants) — ордера матчатся между собой, убирая MEV
- 1inch Fusion Mode — батчевые аукционы вместо классических свопов
- Balancer Batch Auctions — справедливое ценообразование
Итог
DeFi торговля — это не просто свап токенов. Это экосистема, где понимание формул пулов, рисков и защит означает разницу между прибылью и потерей.
Ключ к успеху:
- Начни с крупных пулов (Curve для стейблов, Uniswap V3 для волатильных пар)
- Не трогай flashbots и сложные стратегии, пока не поймёшь базу
- Проверяй ликвидность и locked LP перед покупкой неизвестного токена
- Используй private RPCs для защиты от MEV
Подписывайся на канал https://t.me/serg_defi — разбираю такие темы каждую неделю.