Пользователи теряют до 10% на спреде при ручном поиске по пулам. Интеграция 1inch API (v6) решает это за 2–3 дня: протокол сплитует ордер по 200+ источникам ликвидности и находит лучший курс. Мы берём на себя интеграцию, настройку slippage, обработку approve и тестирование — вы получаете агрегатор с минимальным временем выхода на рынок. Наш опыт: 5+ лет в DeFi, 20+ проектов по интеграции DEX-агрегаторов.
Почему интеграция критична для DeFi-продукта?
Пользователи ожидают лучший курс без ручного поиска по пулам. Интеграция через 1inch обеспечивает быстрый роутинг: собственная реализация потребовала бы недель, тогда как готовое решение — дни. Экономия времени и средств существенна: вы получаете проверенный агрегатор без затрат на разработку и отладку собственного роутинга.
Устаревший quote и slippage при исполнении
GET /v6.0/1/quote возвращает toAmount — ожидаемое количество токенов на выходе. Между моментом получения quote и исполнением транзакции проходит время. На волатильном рынке за 10–30 секунд цена может сдвинуться на 0.5–2%.
Если передавать в POST /v6.0/1/swap параметр slippage=1 (1%), при реальном движении рынка на 1.5% транзакция зареверсируется — пользователь заплатил газ и ничего не получил. Правильно: динамически устанавливать slippage на основе волатильности пары: 0.5% для stable‑пар, 1–3% для волатильных.
Ещё одна проблема: toAmount из /quote не совпадает с toAmount из /swap. Это нормально — /swap строит финальный calldata с учётом текущего состояния пулов. Показывать пользователю цифру из /quote, а подписывать транзакцию с /swap — правильная практика.
Approve и permit: два паттерна
1inch Aggregation Router v6 принимает tokens через стандартный ERC-20.approve. Но для лучшего UX поддерживается также permit (EIP-2612) — gasless approve через подпись. Если токен реализует EIP-2612 (DAI, USDC на Ethereum, большинство современных ERC-20), нужно использовать /approve/transaction endpoint только как fallback.
Проверка поддержки permit: вызвать token.nonces(address) — если не reverting, permit поддерживается.
Второй тип approve — 1inch Permit2 (аналог Uniswap Permit2). Если пользователь уже дал approve в Permit2 для другого протокола, повторный approve не нужен. Это улучшает UX при частых свопах.
Как интегрировать 1inch API в dApp?
Структура запросов
Базовый флоу для swap виджета:
-
GET /v6.0/{chainId}/tokens— кешируем список поддерживаемых токенов (раз в час достаточно) -
GET /v6.0/{chainId}/quote?src=...&dst=...&amount=...— получаем quote, показываем пользователю -
GET /v6.0/{chainId}/approve/allowance?tokenAddress=...&walletAddress=...— проверяем текущий allowance - Если allowance < amount:
GET /v6.0/{chainId}/approve/transaction→ подписываем approve -
POST /v6.0/{chainId}/swap→ получаем calldata, отправляем транзакцию
Для мультичейн поддержки используем chainId в URL. 1inch API описывает все эндпоинты.
Обработка ошибок API
1inch v6 возвращает HTTP 400 с JSON body при любой ошибке бизнес-логики. Типичные коды:
| Код | Описание |
|---|---|
Cannot estimate |
Недостаточно ликвидности для запрошенной суммы |
Insufficient liquidity |
То же, явно |
fromTokenAddress cannot be equal to toTokenAddress |
UI баг |
| 429 | Rate limit. Free tier: 1 RPS, Growth: 10 RPS, Enterprise: без ограничений |
Rate limiting нужно обрабатывать через exponential backoff, не слать запросы повторно немедленно.
Classic vs Fusion: что выбрать?
| Характеристика | Classic REST API | Fusion (orderbook) |
|---|---|---|
| Способ исполнения | Пользователь платит газ | Resolver платит газ (gasless) |
| Комиссия | Фиксированная + сетевые сборы | Включена в slippage |
| Сложность интеграции | Низкая (REST + библиотека) | Средняя (требуется Fusion SDK) |
| Рекомендуемый сценарий | Swap виджет, простой агрегатор | Продвинутый UX, минимизация комиссии |
Для простой интеграции (swap виджет, агрегатор в dApp) — Classic mode через REST API. Для продвинутого UX с gasless transactions — Fusion.
Проверка calldata
Перед отправкой транзакции пользователем — всегда симулировать через eth_call. Это позволяет поймать revert до трат газа. В wagmi/viem:
const { data } = await publicClient.call({ account: userAddress, to: swapData.tx.to, data: swapData.tx.data, value: BigInt(swapData.tx.value), }); Если call reverting — показываем пользователю ошибку, не транзакцию.
Что входит в интеграцию
- Разработка API-слоя с типизацией запросов
- React-хуки для состояния swap (quote, approve, отправка)
- Обработка ошибок и rate limiting
- Поддержка мультичейн (до 7 сетей)
- Тестирование на тестнете (Sepolia)
- Документация и примеры кода
- Гарантированная поддержка после запуска (2 недели)
Технический стек
viem + wagmi для TypeScript/React приложений — нативная поддержка TypeScript, tree-shaking, хорошая интеграция с WalletConnect и MetaMask. Альтернатива — ethers.js v6 для Node.js бэкенда. Для кеширования quote данных — React Query с staleTime: 10_000 (10 секунд).
Процесс работы
Анализ требований (0.5 дня). Какие чейны, какие токены, Classic или Fusion, нужен ли собственный UI или embed виджет.
Разработка (2–3 дня). API слой с типизацией, React хуки для quote/swap flow, обработка allowance, error handling.
Тестирование (0.5–1 день). Тесты на testnet, проверка edge cases: нет ликвидности, insufficient balance, expired quote.
Ориентиры по срокам
Базовая интеграция swap функциональности в существующий dApp: 2–3 дня. Полноценный swap виджет с мультичейн поддержкой, историей транзакций и Fusion mode: 1–1.5 недели. Стоимость рассчитывается индивидуально.
Свяжитесь с нами для оценки вашего проекта. Получите консультацию — расскажите о целях, и мы предложим оптимальный план интеграции.







