Інтеграція з UniswapX

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з UniswapX
Середній
~3-5 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Інтеграція UniswapX

UniswapX — принципово інша архітектура виконання свопів порівняно з Uniswap V2/V3. Замість прямої взаємодії з пулами AMM — система на основі намірів: користувач підписує намір виконати своп, заповнювач (професійний маркет-мейкер або бот арбітражу) виконує його оптимально. Це змінює не тільки UX, але й всю технічну схему інтеграції.

Як працює виконання на основі намірів

Потік ордерів

Традиційний своп Uniswap V3: користувач → транзакція → маршрутизатор → пул → виконання. Кожен крок в блокчейні, користувач платить за газ, MEV видобувають боти sandwich-атак.

Потік ордерів UniswapX:

  1. Користувач підписує SignedOrder (поза блокчейном, без газу)
  2. Ордер публікується в потік ордерів UniswapX (відкритий голландський аукціон)
  3. Заповнювачі конкурують за виконання ордера
  4. Переможець виконує транзакцію в блокчейні (заповнювач платить газ)
  5. Заповнювач отримує різницю між ціною аукціону та реальною ціною виконання

Для кінцевого користувача: без комісій за газ (або значно зменшені), захист від MEV (sandwich неможливий — нема відкритого ордера в mempool), краща ціна через конкуренцію заповнювачів.

Механіка голландського аукціону

UniswapX використовує голландський аукціон для визначення ціни. Початкова ціна ордера встановлюється вигідно для заповнювачів (великий спред), з часом зміщується на користь користувача. Заповнювач, що приймає ордер першим за прийнятною для нього ціною — перемагає.

Параметри ордера визначають криву аукціону:

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

Оптимальна крива аукціону залежить від волатильності активу та очікуваного часу виконання. Для активних пар (ETH/USDC) — агресивна крива з швидкою збіжністю. Для неактивних пар — м'яка крива.

Інтеграція через SDK UniswapX

Створення та підпис ордера

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) // аукціон 3 хвилини
  .nonce(nonce)
  .input({
    token: WETH_ADDRESS,
    startAmount: ethers.parseEther("1"),
    endAmount: ethers.parseEther("1"), // вхід не змінюється
  })
  .output({
    token: USDC_ADDRESS,
    startAmount: ethers.parseUnits("3150", 6), // вигідно для заповнювача
    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. Це дозволяє групові затвердження, часово обмежені дозволи та підпис без транзакції в блокчейні. Користувач затверджує PERMIT2_ADDRESS один раз на токен, потім тільки підписи поза блокчейном.

Для інтеграції dApp: перевірити наявність затвердження Permit2 при першій взаємодії, запросити затвердження, якщо його немає. Один раз на токен — не на кожний своп.

Відправка ордера до API

// Відправляємо в потік ордерів UniswapX
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"

Відстеження виконання

Опитування API UniswapX — простий підхід. Для оновлень у реальному часі: підпишіться на події Fill(orderHash, filler, swapper, nonce) від контракту Reactor через WebSocket або The Graph.

Інтеграція на стороні заповнювача

Якщо мета — стати заповнювачем (виконавцем ордерів) для отримання доходу:

Архітектура заповнювача: Сервіс моніторить відкриті ордери через API UniswapX, оцінює прибутковість кожного ордера (поточна ціна vs ціна аукціону), виконує через execute() або executeBatch() на контракті Reactor.

Джерела ліквідності для заповнювача:

  • Власний запас (попередньо фундовані токени)
  • Flash swap через Uniswap V3 (атомарно: отримати з пула → відправити користувачу → повернути в пул)
  • Маршрутизація через Jupiter/1inch для пошуку кращої ціни виконання

Контракт реактора заповнювача:

contract UniswapXFiller is IReactorCallback {
    function reactorCallback(
        ResolvedOrder[] calldata resolvedOrders,
        bytes calldata callbackData
    ) external override {
        // Токени вже передані від користувача до цього контракту
        // Виконуємо маршрутизацію через Uniswap V3 або інший джерело
        // Повертаємо необхідні вихідні токени до Reactor
    }
}

Підтримувані мережі

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

Для міжланцюгових свопів — UniswapX з міжланцюговою маршрутизацією (експериментально, на основі Across Protocol).

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

Аналітика (1-2 дні). Визначення завдання: інтегратор (додати UniswapX до існуючого dApp) або заповнювач (заробляти на виконанні ордерів).

Розробка (3-5 днів).

  • Для інтегратора: інтеграція SDK, потік Permit2, компоненти UI, відстеження ордерів.
  • Для заповнювача: контракт заповнювача, сервіс моніторингу ордерів, логіка маршрутизації, розрахунок прибутку.

Тестування. UniswapX забезпечує розгортання на testnet (Sepolia). Тестуємо повний потік: підпис → відправка → моніторинг → виконання.

Орієнтири за часом

Базова інтеграція UniswapX у існуючий dApp (створення ордерів, Permit2, відстеження) — 3-5 днів. Бот заповнювача з логікою маршрутизації та flash swap — 1-2 тижні. Вартість розраховується індивідуально.