Розробка системи JIT-ліквідності для Uniswap v3
JIT-ліквідність — це MEV-стратегія, яку Uniswap Labs називає «добросовісним MEV» на відміну від sandwich-атак. Механіка: у тому ж блоці, що і великий своп, провайдер додає концентровану ліквідність навколо поточної ціни, заробляє на комісії з цього свопу і в тому ж блоці виводить ліквідність — три on-chain операції плюс комісія за одну транзакцію. За нашими бектестами, JIT-стратегія приносить у 3–5 разів більше комісій, ніж пасивне надання ліквідності в тому ж діапазоні. На Ethereum mainnet при газі 30 gwei та комісії пулу 0.3% середній дохід від одного JIT-циклу на парі ETH/USDC становить близько $50–200, а газові витрати — $10–30. На L2, наприклад Arbitrum, газ дешевший у 10–20 разів, що робить JIT прибутковим для свопів від $100.
Наша команда спеціалізується на JIT-системах під ключ: від аналізу мемпулу до деплою газ-оптимізованих контрактів. За час роботи ми реалізували понад 20 проектів для клієнтів з різних юрисдикцій.
Як JIT перехоплює комісії?
Концентрована ліквідність та частка комісій. В Uniswap v3 комісія від свопу розподіляється пропорційно ліквідності в активному tick range. Якщо в момент свопу JIT-позиція додала $1M ліквідності у вузький діапазон, а всі інші LP мають $500k у цьому ж range, JIT отримує 66.7% від комісії свопу.
Стратегія вигідна за:
- Своп досить великий (інакше комісія не покриває газ на три операції).
- Tick range досить вузький (більша частка, менша тимчасова втрата при утриманні).
- Позиція утримується один блок (нульовий ризик непостійних втрат).
Мінімальний розмір свопу для беззбитковості залежить від мережі та газу: на Ethereum mainnet при 0.3% комісії та середній ціні газу потрібен своп у кілька тисяч доларів, на L2 (Arbitrum) — кілька сотень.
Чому JIT працює тільки з bundle submission?
JIT вимагає бачити своп у мемпулі до його включення в блок. Private mempool через Flashbots MEV-Share або публічний мемпул через WebSocket — між виявленням транзакції та включенням свого bundle — секунди.
Оптимальна інфраструктура:
- Власна нода з MEV-Geth або reth з mempool websocket.
- Підключення до Flashbots MEV-Share для перегляду hints про pending свопи.
- Bundle submission через
eth_sendBundle— атомарне включення всіх трьох транзакцій в один блок.
Без bundle submission JIT не працює: якщо addLiquidity і своп потраплять у різні блоки, стратегія безглузда і збиткова.
Архітектура JIT-системи
Off-chain компоненти
Mempool scanner: WebSocket підписка до ноди, фільтрація свопів Uniswap v3 за exactInputSingle/exactInput selector. Декодування calldata для визначення пулу, розміру, slippage.
Profitability calculator: для кожного кандидата рахує:
- Очікувану комісію =
swapAmount * feeTier. - Частку комісії =
depositAmount / (poolLiquidity + depositAmount). - Газ-вартість bundle =
(addLiq + removeLiq + collect) * gasPrice. - Net profit = (комісія * частка) - газ.
Якщо net profit > порогу (кілька десятків доларів) — bundle відправляється. Bundle builder: формує три транзакції для Flashbots bundle:
-
tx1:mintпозиції в потрібному tick range. -
tx2: оригінальний своп (backrun). -
tx3:burn+collectпозиції.
Smart contract для JIT-операцій
Контракт обгортає операції з ліквідністю та мінімізує газ:
function executeJIT( address pool, int24 tickLower, int24 tickUpper, uint128 liquidity, bytes calldata swapData ) external onlyOperator { // tx1: add liquidity INonfungiblePositionManager(NPM).mint(MintParams({...})); // tx2: forward swap (в bundle через Flashbots — окрема tx) // tx3: remove liquidity + collect INonfungiblePositionManager(NPM).decreaseLiquidity(...); INonfungiblePositionManager(NPM).collect(...); } Важливо: контракт повинен мати достатній баланс обох токенів пулу для додавання ліквідності. Управління балансами — критичний операційний аспект.
Tick range selection
Вузький range максимізує частку комісії, але підвищує ризик: якщо своп рухає ціну за межі range, JIT-позиція перестає бути активною. Для свопу без суттєвого price impact (< 0.5%) достатньо range ±0.3% від поточної ціни. Для великих свопів з price impact 1–2% range потрібно розширити до ±2%.
| Тип свопу | Price impact | Рекомендований range | Буфер |
|---|---|---|---|
| Малий | <0.5% | ±0.3% | 20 тиків |
| Середній | 0.5–1% | ±1% | 30 тиків |
| Великий | 1–2% | ±2% | 40 тиків |
Ризики та обмеження
Revert ризик bundle. Якщо оригінальний своп ревертиться (наприклад, через slippage захист трейдера), весь bundle ревертиться. Газ на addLiquidity при цьому втрачається. Mitigation: включати тільки свопи з м'яким slippage tolerance (>1%).
Конкуренція з іншими JIT-ботами. На високоліквідних парах (ETH/USDC) десятки ботів конкурують за одні й ті самі свопи. Газова війна через priority fee може знищити прибуток. Більш прибуткова стратегія на mid-cap парах з низькою конкуренцією.
Uniswap v4 та JIT. З приходом хунків, пули можуть ввести beforeAddLiquidity хук з minimum holding time — прямий countermeasure проти JIT. Ряд пулів уже тестує такі механізми.
Процес і терміни
| Етап | Зміст | Термін |
|---|---|---|
| Аналітика | Визначення цільових пулів, мереж, конкурентного середовища | 1 день |
| Розробка off-chain | Mempool scanner, profitability calculator, bundle builder | 4–5 днів |
| Розробка on-chain | JIT executor, access control, газ-оптимізація | 2–3 дні |
| Інфраструктура | Нода (reth/geth), MEV-Share, моніторинг | 2–3 дні |
| Тестування | Simulation на mainnet fork, back-testing | 2–3 дні |
Разом: 1–2 тижні до запуску. Вартість розраховується після уточнення цільових пулів та мереж. Зв'яжіться з нами — отримайте індивідуальний розрахунок.
Що входить до роботи
- Документація: архітектурна схема, опис конфігурації, інструкція з запуску.
- Доступи: репозиторій з кодом, документація з розгортання, API-ключі (якщо потрібно).
- Навчання: демонстрація роботи системи, передача знань вашій команді.
- Підтримка: тиждень пост-релізного моніторингу та виправлення критичних багів.
Досвід наших інженерів — багаторічна робота в блокчейн-розробці та на ринку DeFi. Ми гарантуємо прозорий супровід на всіх етапах. Замовте консультацію — розкажемо, як JIT може збільшити вашу доходність на Uniswap v3.







