Розробка системи автоматичної ребалансировки LP Uniswap v3
Ми розробляємо системи автоматичної ребалансировки LP-позицій Uniswap v3 (Uniswap), які вирішують ключову проблему concentrated liquidity: при виході ціни за заданий діапазон позиція перестає заробляти fee. Без активного управління ваш ETH/USDC пул з діапазоном $1800–$2200 при ціні ETH $2500 перетворюється на чистий USDC bag з нульовим доходом. Наша система відстежує позиції в реальному часі, атомарно перебалансовує через keeper та реінвестує fee. На L2 такі операції обходяться значно дешевше (економія до 90% на газі), що робить автоматизацію економічно виправданою. Команда має 5 років досвіду в DeFi та реалізувала понад 20 проектів з автоматизації LP. Замовте розробку системи для вашого пула та отримайте консультацію інженера з 10-річним досвідом в DeFi.
Чому ребалансировка критична для дохідності?
Concentrated liquidity — подвійна природа: вузький діапазон дає в 10–50 разів більше fee, ніж v2, але при виході ціни за межі LP втрачає весь дохід. На великому русі, наприклад ETH $1800→$2500, позиція з діапазоном $1800–$2200 стає 100% в USDC і не приносить комісій, поки ціна не повернеться. Система ребалансировки автоматично зміщує діапазон услід за ціною, фіксуючи прибуток та відновлюючи збір fee. Ми гарантуємо прозорість коду та безпеку коштів.
Які операції виконуються при ребалансировці?
Кожна LP-позиція в v3 — це ERC-721 токен, керований NonfungiblePositionManager (адреса 0xC36442b4a4522E871399CD717aBDD847Ab11FE88 на mainnet). Основні операції:
-
mint()— відкриття позиції в заданому діапазоні[tickLower, tickUpper] -
increaseLiquidity()— додавання ліквідності в існуючу позицію -
decreaseLiquidity()— часткове або повне вилучення ліквідності -
collect()— збір накопичених fee токенів
Для автоматичної ребалансировки контракт-менеджер повинен володіти NFT-позиціями (або мати approval) — це дозволяє йому викликати всі операції атомарно.
Ціна в v3 зберігається в sqrtPriceX96 — квадратний корінь ціни в Q64.96 fixed-point форматі. Для розрахунку поточного тику: tick = floor(log(price) / log(1.0001)). Кожен тик відповідає кроку ціни в 0.01%. Діапазон позиції задається в тиках і має бути кратним tickSpacing пула: для пула 0.05% fee — tickSpacing 10, для 0.3% — 60, для 1% — 200. Позиція з шириною 200 тиків навколо поточної ціни покриває приблизно ±1% руху.
Як вибрати стратегію ребалансировки?
Вибір стратегії залежить від волатильності пари та цілей за дохідністю. Passive rebalance — чекаємо виходу за діапазон, потім перебалансовуємо. Цей метод простий і мінімізує on-chain транзакції, але LP втрачає дохід під час out-of-range, і фіксується impermanent loss. Active rebalance перебалансовує при наближенні до краю, зберігаючи позицію in-range і безперервний збір fee, але потребує частих транзакцій. Asymmetric ranges використовують несиметричний діапазон з урахуванням тренду: це зменшує кількість ребалансировок, але потребує off-chain даних (EMA) і складніший в реалізації. Fee reinvestment (compound) автоматично реінвестує зібрані fee, даючи ефект складного відсотка. На L2 часті ребалансировки стають економічно осмисленими завдяки низькому газу.
| Стратегія | Частота ребалансировок | Складність | Дохідність порівняно з пасивною |
|---|---|---|---|
| Passive | Низька | Низька | Базова |
| Active | Висока | Середня | +20-50% |
| Asymmetric | Середня | Висока | +30-70% |
Архітектура контракту
AutoLPManager ├── positionsByUser: mapping(address => uint256[]) ├── strategyByToken: mapping(uint256 => RebalanceStrategy) ├── rebalance(uint256 tokenId, RangeParams calldata newRange) ├── collect(uint256 tokenId) └── compound(uint256 tokenId) Ключова проблема — свап перед відкриттям позиції. Після закриття у нас може бути 100% одного активу, а для нової позиції потрібне точне співвідношення token0/token1. Свап змінює співвідношення, що може зсунути тик — ітераційний розрахунок off-chain, потім on-chain виконання. Альтернатива: використовувати готові vault-рішення як основу. Arrakis Finance v2 та Gamma Strategies — open source vault контракти з саме такою логікою. Форкнути та кастомізувати під потрібну стратегію швидше, ніж писати з нуля.
Як працює моніторинг та keeper?
Off-chain сервіс (Node.js + viem) моніторить:
- Поточний тик пула:
slot0()→sqrtPriceX96→ конвертація в тик - Тики позиції:
positions(tokenId)→tickLower,tickUpper - Накопичені fee: симуляція
collect()черезeth_call
При спрацюванні умови ребалансировки — виклик через Chainlink Automation або власний keeper EOA з достатнім gas buffer.
| Операція | Gas на mainnet |
|---|---|
| collect() fee | ~90k |
| decreaseLiquidity() 100% | ~120k |
| Swap token0 → token1 (v3) | ~150k |
| mint() нова позиція | ~180k |
| Разом повний rebalance | ~540k |
На L2 (Arbitrum, Base) ті самі операції коштують копійки, що робить часті ребалансировки економічно осмисленими.
Як впровадити автоматичну ребалансировку: покрокова інструкція
- Аналіз пулів. Виберіть пул та визначте волатильність пари, частоту ребалансировки.
- Вибір стратегії. На основі бектестингу (через The Graph або Dune) виберіть passive, active або asymmetric.
- Розгортання контракту. Деплой AutoLPManager під вашу стратегію. Використовуйте Foundry для fork-тестів.
- Налаштування моніторингу. Запустіть off-chain сервіс з keeper-інтеграцією (Chainlink Automation).
- Тестування. Симуляція на історичних даних, перевірка APY.
- Деплой на mainnet/L2. У випадку L2 — газ становить частки цента за транзакцію.
Процес розробки
- Аналітика стратегії (2–3 дні). Backtesting на історичних даних Uniswap v3 через The Graph або Dune Analytics.
- Контракти (1–2 тижні). AutoLPManager + keeper-інтерфейси. Foundry fork-тести на mainnet з симуляцією цінових рухів.
- Off-chain компоненти (4–5 днів). Моніторинг позицій, розрахунок оптимального співвідношення для свапа, Chainlink Automation setup.
- Тестування (3–5 днів). Порівняння APY при різних параметрах на історичних даних.
Що входить в роботу
- Аудит поточних позицій та вибір стратегії
- Розробка смарт-контрактів (Solidity/Foundry)
- Off-chain моніторинг та інтеграція keeper (Chainlink Automation)
- Юніт-тести та fork-тести на mainnet
- Документація контрактів та архітектури
- Період підтримки після деплою (1 місяць)
Орієнтири за термінами
Базова система з однією стратегією на один пул — 1–2 тижні. Multi-pool, multi-strategy vault з governance — від 3–4 тижнів. Вартість розраховується індивідуально після вибору цільових пулів та стратегій. Зв'яжіться з нами, щоб обговорити ваш проект. Отримайте консультацію інженера з 10-річним досвідом в DeFi.







