Интеграция с Paraswap
DEX-агрегаторы решают одну задачу: найти лучший маршрут обмена токенов среди десятков источников ликвидности. Paraswap охватывает Uniswap, Curve, Balancer, Aave, DODO и ещё несколько десятков протоколов на 10+ сетях. Для приложения, которому нужны свопы — это готовая инфраструктура маршрутизации без необходимости реализовывать её самому.
Как устроен Paraswap API
Paraswap предоставляет два эндпоинта: /prices для получения котировки и оптимального маршрута, и /transactions для построения транзакции по маршруту из котировки. Двухшаговый подход обоснован: котировка действительна ограниченное время, транзакция строится в момент исполнения.
// Шаг 1: получить маршрут
const priceRoute = await axios.get(
`https://apiv5.paraswap.io/prices/?srcToken=${srcToken}&destToken=${destToken}&amount=${amount}&network=1`
)
// Шаг 2: построить транзакцию
const txData = await axios.post(
'https://apiv5.paraswap.io/transactions/1',
{
srcToken, destToken, srcAmount, destAmount,
priceRoute: priceRoute.data.priceRoute,
userAddress: wallet.address,
slippage: 100, // 1% в базисных пунктах
}
)
Важный нюанс: Paraswap v5 API работает без API-ключа для базового использования, но при высокой нагрузке добавляет rate limiting. Для production-интеграции с частыми запросами — партнёрский ключ через форму на сайте.
Одобрение токенов: частая ошибка
Approve нужен не для router контракта Paraswap напрямую, а для TokenTransferProxy — отдельного контракта, который управляет переводами. Адрес различается по сетям. Если approve выдан неправильному адресу — каждый swap будет ревертиться с TRANSFER_FROM_FAILED.
Адреса TokenTransferProxy доступны через https://apiv5.paraswap.io/adapters/contracts?network={chainId}. Лучше получать их динамически при инициализации, не хардкодить.
Paraswap SDK как альтернатива прямому API
@paraswap/sdk предоставляет типизированный клиент:
import { ParaSwap } from '@paraswap/sdk'
import { ethers } from 'ethers'
const paraswap = new ParaSwap({ chainId: 1, web3Provider: provider })
const priceRoute = await paraswap.getRate({
srcToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
destToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
amount: '1000000000', // 1000 USDC
side: SwapSide.SELL,
})
SDK абстрагирует управление адресами контрактов и форматирование, но добавляет зависимость. Для простых интеграций достаточно прямых HTTP-запросов.
Обработка slippage и failed транзакций
Paraswap передаёт minDestAmount в транзакцию на основе параметра slippage. Если рынок сдвинулся сильнее — транзакция ревертится с INSUFFICIENT_DEST_AMOUNT. Это нормальное поведение защищает от MEV.
В приложении нужно предусмотреть retry логику: при revert по slippage — заново запросить котировку и пересчитать транзакцию. При gas estimation failure — увеличить газ на 20% и повторить.
Ориентиры по срокам
Базовая интеграция Paraswap (fetch quote + build tx + execute) — 2-3 дня. С полноценной обработкой ошибок, retry логикой и UI для выбора slippage — до 1 недели.
Стоимость рассчитывается индивидуально.







