Интеграция с 0x Protocol
0x — это не DEX в привычном смысле. Это агрегационный слой с собственным off-chain orderbook (RFQ система) и on-chain settlement через Exchange Proxy контракт. Для разработчика интеграция 0x означает работу с двумя разными API: Swap API для простых обменов с агрегированной ликвидностью и Orderbook API для лимитных ордеров через 0x Mesh.
Большинству проектов нужен только Swap API — рассмотрим его детально.
Как работает 0x Swap API
Вместо прямого вызова DEX-роутера клиент делает HTTP-запрос к 0x API, получает quote с to, data, value, allowanceTarget и передаёт эти данные в транзакцию. За кулисами 0x агрегирует ликвидность с Uniswap V2/V3, Curve, Balancer, Kyber, нативного RFQ orderbook (профессиональные маркет-мейкеры) и выбирает лучший путь с учётом gas costs.
const params = new URLSearchParams({
chainId: '1',
sellToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
buyToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
sellAmount: '1000000000', // 1000 USDC (6 decimals)
taker: walletAddress
})
const response = await fetch(`https://api.0x.org/swap/permit2/quote?${params}`, {
headers: { '0x-api-key': apiKey, '0x-version': 'v2' }
})
const quote = await response.json()
Обратите внимание на permit2/quote — 0x v2 API по умолчанию использует Permit2 для approvals. Это означает, что allowanceTarget будет адресом Permit2 контракта, а не Exchange Proxy напрямую. Старый эндпоинт /swap/v1/quote использует прямой approve — он deprecated, но всё ещё работает для обратной совместимости.
Permit2 flow в 0x v2
0x v2 API возвращает permit2.eip712 объект с данными для подписи. Пользователь подписывает EIP-712 сообщение, подпись добавляется в transaction.data через encoding. Это убирает отдельную approve транзакцию — своп выполняется за одну транзакцию.
const signature = await walletClient.signTypedData({
domain: quote.permit2.eip712.domain,
types: quote.permit2.eip712.types,
primaryType: quote.permit2.eip712.primaryType,
message: quote.permit2.eip712.message
})
// Добавляем подпись в calldata
const signatureLength = (signature.length - 2) / 2
const encodedSignature = ethers.utils.solidityPack(
['bytes', 'uint256', 'bytes'],
[quote.transaction.data, signatureLength, signature]
)
Без этого шага транзакция вернёт revert с SignatureInvalid от Permit2 контракта.
Источники ликвидности и RFQ
0x RFQ (Request for Quote) — ключевое преимущество для крупных свопов. Профессиональные маркет-мейкеры подключены к 0x и дают приватные котировки через API. Для свопа на $100K через Uniswap price impact может составить 0.3–1%. RFQ маркет-мейкер может дать лучшую цену без price impact — он принимает весь объём по заранее согласованной цене.
RFQ включается автоматически при указании taker в запросе. Без taker 0x вернёт только on-chain ликвидность (AMM paths), без RFQ котировок.
Обработка ошибок и edge cases
Insufficient liquidity: 0x вернёт ошибку если нет доступного маршрута. Для экзотических токенов с малой ликвидностью нужен fallback на прямой Uniswap вызов.
Price validation перед исполнением: цена между получением quote и отправкой транзакции может измениться. 0x quote содержит minBuyAmount — minimum guaranteed output. Проверяйте, что minBuyAmount соответствует ожиданиям пользователя перед подписью.
Expiry: quote действителен ограниченное время (обычно 30–60 секунд). Если пользователь медлит с подписью — нужно запросить новый quote. Поле expiresAt в ответе даёт timestamp истечения.
Сравнение с прямой интеграцией Uniswap SDK
| Аспект | 0x Swap API | Uniswap SDK прямо |
|---|---|---|
| Количество источников | 10+ (multi-DEX + RFQ) | Только Uniswap пулы |
| Сложность интеграции | Низкая (HTTP API) | Средняя (SDK + RPC) |
| Зависимость от API | Да (0x API ключ) | Нет |
| Крупные свопы | Лучше (RFQ) | Хуже (только AMM) |
| Кастомизация маршрута | Ограничена | Полная |
| Latency | +HTTP round-trip | Зависит от RPC |
Для продуктового DeFi-приложения с широкой аудиторией 0x даёт лучшее UX для крупных свопов. Для арбитражного бота с кастомными маршрутами — прямой SDK.
Процесс интеграции
API ключ и лимиты. Бесплатный tier — 1 млн запросов/месяц. Для production нагрузки нужен платный план. Rate limits: 5 запросов/секунду на free tier.
Тестирование. 0x поддерживает Sepolia testnet с тем же API. Тестовые токены через faucet, реальное поведение routing на testnet ликвидности.
Мониторинг. Логируем price, sources (какие DEX использовались), estimatedGas из каждого quote для анализа качества маршрутизации.
Интеграция занимает 2–3 дня с учётом корректной обработки Permit2 flow и тестирования edge cases.







