Разработка автоматического менеджера LP-позиций (Uniswap v3)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка автоматического менеджера LP-позиций (Uniswap v3)
Сложная
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Разработка автоматического менеджера LP-позиций (Uniswap v3)

Uniswap v3 сделал провайдеров ликвидности значительно эффективнее по капиталу — и значительно более требовательными к активному управлению. Позиция в диапазоне $1800-$2200 за ETH приносит комиссии только пока цена ETH внутри этого диапазона. Как только цена уходит за границу — позиция перестаёт зарабатывать и превращается в держание одного из двух токенов. Без автоматического ребалансировщика большинство LP-позиций в v3 работают неэффективно.

Механика концентрированной ликвидности

Как считается fee в v3

В Uniswap v3 ликвидность добавляется в конкретный диапазон тиков. Tick — дискретная единица цены, каждый тик = изменение цены на ~0.01%. Диапазон [tickLower, tickUpper] определяет, при каких ценах позиция активна.

Накопленные комиссии хранятся через глобальные переменные feeGrowthGlobal0X128 и feeGrowthGlobal1X128. Для конкретной позиции — разница между текущими значениями и снапшотом в момент создания позиции, скорректированная на тики вне диапазона. Это O(1) расчёт — нет итерации по всем позициям.

Сбор комиссий: NonfungiblePositionManager.collect() переводит накопленные fee0 и fee1 на адрес владельца. Вызов collect без закрытия позиции — нормальная операция, обычно выгодна при накопленных комиссиях > gas cost.

Impermanent loss в v3

В v2 impermanent loss функция от соотношения цен. В v3 — функция от соотношения цен и от выбранного диапазона. Узкий диапазон даёт больше комиссий при нахождении в диапазоне, но экспоненциально растущий IL при выходе из него. Широкий диапазон — меньше комиссий, меньше IL.

Оптимальная ширина диапазона зависит от волатильности конкретной пары. Для пары USDC/USDT на тике 1 — диапазон в несколько тиков. Для ETH/USDC с дневной волатильностью 3-5% — нужен диапазон ±20-30% от текущей цены чтобы не ребалансировать слишком часто.

Архитектура автоматического менеджера

Стратегия ребалансировки

Есть несколько подходов:

Fixed-width rebalance — самое простое. При выходе цены из диапазона создать новую позицию вокруг текущей цены с той же шириной. Проблема: частый ребаланс при боковом движении вблизи границы — каждый ребаланс стоит газ и платит slippage при свопе для выравнивания соотношения.

Bollinger Bands — динамическая ширина диапазона на основе 20-дневного стандартного отклонения цены. При высокой волатильности — широкий диапазон, при низкой — узкий. Реализуется off-chain: keeper-бот рассчитывает оптимальный диапазон по историческим данным и вызывает ребаланс только когда текущий диапазон значительно хуже оптимального.

Asymmetric ranges — если есть view на направление рынка, можно делать несимметричный диапазон. Bullish — больше диапазона вверх. Но это уже активная торговая стратегия, не просто менеджмент ликвидности.

On-chain компоненты

Смарт-контракт менеджера реализует:

interface ILPManager {
    // Создание позиции
    function mint(
        address token0, address token1, uint24 fee,
        int24 tickLower, int24 tickUpper,
        uint256 amount0Desired, uint256 amount1Desired
    ) external returns (uint256 tokenId);
    
    // Сбор комиссий
    function collectFees(uint256 tokenId) external returns (uint256 amount0, uint256 amount1);
    
    // Ребалансировка
    function rebalance(
        uint256 tokenId,
        int24 newTickLower, int24 newTickUpper,
        uint256 swapAmountIn, bytes calldata swapData
    ) external;
}

swapData в rebalance() — calldata для свопа через Uniswap v3 Router или 1inch для выравнивания соотношения токенов перед созданием новой позиции. Конкретный маршрут рассчитывается off-chain и передаётся в транзакцию.

ERC-721 ownership: NFT позиции Uniswap v3 могут находиться либо у пользователя напрямую, либо у контракта менеджера. Если у менеджера — нужна система учёта «кто владеет чем». Если у пользователя — нужен approve на менеджер для управления. Второй подход проще аудируется.

Off-chain keeper

TypeScript-бот мониторит позиции каждые N блоков:

  1. Получить текущую цену через slot0() пула
  2. Для каждой managed позиции — проверить находится ли цена в диапазоне
  3. Если вне диапазона — рассчитать новый оптимальный диапазон
  4. Рассчитать необходимый своп для выравнивания соотношения токенов
  5. Оценить cost/benefit: gas + IL на своп vs ожидаемые комиссии в новом диапазоне
  6. Если profitable — вызвать rebalance()

Важно: сравнивать expectedAnnualizedFees - rebalanceCost > holdCost. Нет смысла ребалансировать позицию на $1000 если газ $50 и своп теряет ещё $30.

Сбор и реинвестирование комиссий

Автоматическое reinvesting — auto-compound: collect fees, добавить их обратно в позицию. Это увеличивает ликвидность и будущие комиссии. Но каждый compound — транзакция с газом. Оптимально compound при накопленных комиссиях > gas_cost * 10.

Протоколы типа Arrakis Finance и Gamma автоматизируют это поведение и берут % от комиссий как fee. При разработке собственного менеджера — нужно решить: брать management fee (% TVL ежегодно) или performance fee (% от комиссий)?

Ориентиры по срокам

Смарт-контракт менеджера с базовой стратегией ребалансировки — 1-2 недели. Keeper-бот + мониторинг + UI для управления позициями — добавляет 1-2 недели. Продвинутая стратегия с Bollinger Bands и symulation — от 4 недель.

Стоимость рассчитывается после обсуждения стратегии и требований.