Интеграция бота с SushiSwap SDK
SushiSwap развёрнут на 30+ чейнах, и это главная причина, почему торговые боты используют именно SushiSwap SDK вместо прямых вызовов контрактов. Вручную поддерживать актуальные адреса роутеров для Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain и ещё двадцати сетей — отдельная работа, которая SDK берёт на себя.
Но SDK имеет свои особенности, которые неочевидны без опыта работы с ним.
Что важно знать перед интеграцией
Версии и архитектура SDK
SushiSwap SDK v3 (@sushiswap/sdk) и более новый @sushiswap/router — это разные пакеты с разными API. @sushiswap/router — текущий стандарт, который поддерживает SushiSwap v3 (concentrated liquidity), v2 и маршрутизацию через несколько протоколов одновременно.
Старый @sushiswap/sdk работает только с v2-пулами и устарел для большинства задач. Видели боты, которые годами работали на старом SDK, не подозревая, что теряют 20-30% маршрутов из-за отсутствия v3-пулов в расчёте.
Получение котировки и slippage
import { Router } from '@sushiswap/router'
import { ChainId } from '@sushiswap/chain'
const trade = await Router.getBestRoute({
chainId: ChainId.ARBITRUM,
fromToken: WETH,
toToken: USDC,
amount: parseUnits('1', 18),
gasPrice: await provider.getGasPrice(),
})
getBestRoute возвращает оптимальный маршрут с учётом газа. Важный нюанс: газовая стоимость включается в расчёт только если передан актуальный gasPrice. Бот, который передаёт нулевой или устаревший gasPrice, получает маршрут, оптимальный по выходному количеству токенов, но не по net profit.
Для торгового бота правильная формула: netProfit = outputAmount - inputAmount - gasCost. gasPrice должен браться из mempool, а не кэшироваться.
Мультичейн конфигурация
SDK автоматически резолвит адреса контрактов по chainId. Но для кастомных конфигураций (собственная нода, кастомный RPC) нужно передавать providers map явно:
import { providers } from 'ethers'
const providerMap = {
[ChainId.ETHEREUM]: new providers.JsonRpcProvider(ETH_RPC),
[ChainId.ARBITRUM]: new providers.JsonRpcProvider(ARB_RPC),
[ChainId.POLYGON]: new providers.JsonRpcProvider(POLY_RPC),
}
Использование публичных RPC (Infura, Alchemy free tier) приводит к rate limiting при интенсивном мониторинге. Для production-бота — собственная нода или платный tier с гарантированным throughput.
Исполнение свапа через роутер
SushiSwap v3 роутер на Arbitrum — 0x...RouteProcessor3. SDK генерирует calldata для processRoute() автоматически:
const { routeProcessorAddr, routeCode } = trade
const tx = await routeProcessor.processRoute(
fromToken.address,
amountIn,
toToken.address,
minAmountOut, // amountOut * (1 - slippage)
recipient,
routeCode,
)
minAmountOut — защита от slippage. Для арбитражного бота slippage tolerance должен быть минимальным (0.1-0.3%), иначе транзакция может исполниться в убыток при движении рынка между симуляцией и включением в блок.
Мониторинг пулов через The Graph
SushiSwap имеет субграфы для каждого чейна. Для бота, который мониторит liquidity events или отслеживает изменения цен в пулах, запросы через The Graph эффективнее, чем прямые on-chain вызовы:
query PoolReserves {
pairs(where: { id_in: ["0x..."] }) {
reserve0
reserve1
token0Price
volumeUSD
}
}
Для realtime мониторинга — WebSocket подписка на события Sync (v2) или Swap (v3) через ethers.js напрямую, так как The Graph имеет задержку несколько секунд.
Ориентиры по срокам
Интеграция торгового бота с SushiSwap SDK — 3-5 дней для одного чейна. Мультичейн система с маршрутизацией через несколько версий протокола и мониторингом пулов — до недели. Включая тесты на testnet и документацию по конфигурации.







