Интеграция с UniswapX

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с UniswapX
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1062
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с UniswapX

UniswapX — принципиально другая архитектура исполнения свапов по сравнению с Uniswap V2/V3. Вместо прямого взаимодействия с AMM пулами — intent-based система: пользователь подписывает намерение сделать свап, filler (профессиональный маркет-мейкер или арбитражный бот) исполняет его оптимальным способом. Это меняет не только UX, но и всю техническую схему интеграции.

Как работает intent-based исполнение

Order flow

Традиционный Uniswap V3 свап: пользователь → транзакция → Router → Pool → исполнение. Каждый шаг on-chain, gas платит пользователь, MEV извлекается sandwich ботами.

UniswapX order flow:

  1. Пользователь подписывает SignedOrder (off-chain, без gas)
  2. Order публикуется в UniswapX order stream (open dutch auction)
  3. Fillers конкурируют за исполнение ордера
  4. Winning filler исполняет транзакцию on-chain (gas платит filler)
  5. Filler получает разницу между auction price и реальной ценой исполнения

Для конечного пользователя: no gas fees (или значительно сниженные), MEV protection (sandwich impossible — нет открытого ордера в mempool), лучшая цена через filler конкуренцию.

Dutch Auction механика

UniswapX использует Dutch Auction для price discovery. Начальная цена ордера выставляется выгодно для fillers (большой спред), со временем сдвигается в сторону пользователя. Filler, который принимает ордер первым при приемлемой для него цене — wins.

Параметры ордера определяют auction curve:

  • inputAmount — что пользователь отдаёт
  • outputs[].startAmount — минимальный вывод в начале аукциона (выгодно fillers)
  • outputs[].endAmount — минимальный вывод в конце аукциона (выгодно пользователю)
  • deadline — когда ордер истекает

Оптимальная auction curve зависит от волатильности актива и ожидаемого времени исполнения. Для highly liquid пар (ETH/USDC) — агрессивная кривая с быстрым convergence. Для illiquid пар — более мягкая.

Интеграция через UniswapX SDK

Создание и подпись ордера

import { DutchOrderBuilder, NonceManager, PERMIT2_ADDRESS } from "@uniswap/uniswapx-sdk";
import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider(RPC_URL);
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);

// Получаем nonce через NonceManager
const nonceManager = new NonceManager(provider, chainId, PERMIT2_ADDRESS);
const nonce = await nonceManager.useNonce(wallet.address);

const builder = new DutchOrderBuilder(chainId, REACTOR_ADDRESS, PERMIT2_ADDRESS);
const order = builder
  .deadline(Math.floor(Date.now() / 1000) + 300) // 5 минут
  .decayStartTime(Math.floor(Date.now() / 1000))
  .decayEndTime(Math.floor(Date.now() / 1000) + 180) // auction 3 минуты
  .nonce(nonce)
  .input({
    token: WETH_ADDRESS,
    startAmount: ethers.parseEther("1"),
    endAmount: ethers.parseEther("1"), // input не меняется
  })
  .output({
    token: USDC_ADDRESS,
    startAmount: ethers.parseUnits("3150", 6), // выгодно filler
    endAmount: ethers.parseUnits("3180", 6),   // целевая цена пользователя
    recipient: wallet.address,
  })
  .build();

// Подписываем через Permit2
const { domain, types, values } = order.permitData();
const signature = await wallet.signTypedData(domain, types, values);
const signedOrder = { order: order.serialize(), sig: signature };

Permit2: зачем нужен

UniswapX использует Permit2 (EIP-712 подпись для разрешений) вместо стандартного ERC-20 approve. Это даёт batch approvals, time-limited permissions и подпись без on-chain транзакции. Пользователь один раз делает approve(PERMIT2_ADDRESS, MAX_UINT256) для каждого токена, далее — только off-chain подписи.

Для интеграции в dApp: проверить наличие Permit2 approval при первом взаимодействии, запросить approve если нет. Один раз на токен — не каждый свап.

Отправка ордера в API

// Отправка в UniswapX order stream
const response = await fetch("https://api.uniswap.org/v2/orders", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(signedOrder),
});
const { hash } = await response.json();

// Мониторинг статуса
const statusResponse = await fetch(`https://api.uniswap.org/v2/orders?orderHash=${hash}`);
const { orderStatus } = await statusResponse.json();
// orderStatus: "open" | "filled" | "cancelled" | "expired"

Отслеживание исполнения

UniswapX API polling — простой подход. Для real-time обновлений: подписаться на events Fill(orderHash, filler, swapper, nonce) от Reactor контракта через WebSocket или The Graph.

Интеграция на стороне filler

Если задача — стать filler (исполнителем ордеров) для получения дохода:

Filler архитектура: Сервис мониторит open orders через UniswapX API, оценивает прибыльность каждого ордера (текущая цена vs auction price), исполняет через execute() или executeBatch() на Reactor контракте.

Источники ликвидности для filler:

  • Собственный inventory (pre-funded токены)
  • Flash swap через Uniswap V3 (атомарно: получить из пула → отправить пользователю → вернуть в пул)
  • Routing через Jupiter/1inch для поиска лучшей цены исполнения

Реактивный контракт filler:

contract UniswapXFiller is IReactorCallback {
    function reactorCallback(
        ResolvedOrder[] calldata resolvedOrders,
        bytes calldata callbackData
    ) external override {
        // Токены уже перечислены от swapper на этот контракт
        // Выполняем routing через Uniswap V3 или другой источник
        // Возвращаем требуемые output tokens на Reactor
    }
}

Поддерживаемые сети

Сеть Reactor адрес Статус
Ethereum mainnet ExclusiveDutchOrderReactor Production
Polygon ExclusiveDutchOrderReactor Production
Arbitrum ExclusiveDutchOrderReactor Production
Optimism ExclusiveDutchOrderReactor Production
Base ExclusiveDutchOrderReactor Production

Для кросс-чейн свапов — UniswapX с cross-chain routing (экспериментально, на базе Across Protocol).

Процесс разработки

Аналитика (1-2 дня). Определение задачи: integrator (добавить UniswapX в существующий dApp) или filler (зарабатывать на исполнении ордеров).

Разработка (3-5 дней).

  • Для integrator: SDK интеграция, Permit2 flow, UI компоненты, order tracking.
  • Для filler: filler контракт, order monitoring сервис, routing логика, profit calculation.

Тестирование. UniswapX предоставляет testnet deployment (Sepolia). Тестируем полный flow: подпись → отправка → мониторинг → исполнение.

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

Базовая интеграция UniswapX в существующий dApp (создание ордеров, Permit2, tracking) — 3-5 дней. Filler бот с routing логикой и flash swap — 1-2 недели. Стоимость рассчитывается индивидуально.