Solana DEX бот на заказ: Jupiter, Raydium, Jito

Большинство торговых ботов на Solana проигрывают не из-за алгоритма, а из-за того, что их транзакции попадают в конец очереди. Неправильно рассчитанный priority fee сводит на нет преимущество быстрой сети. Solana обрабатывает теоретически 65 000 TPS при финализации ~400 мс, но без тонкой настройки c

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1011

Большинство торговых ботов на Solana проигрывают не из-за алгоритма, а из-за того, что их транзакции попадают в конец очереди. Неправильно рассчитанный priority fee сводит на нет преимущество быстрой сети. Solana обрабатывает теоретически 65 000 TPS при финализации ~400 мс, но без тонкой настройки compute units и комиссий вы остаетесь позади конкурентов. Часто клиенты приходят с готовым алгоритмом, но их транзакции зависают на минуты, либо они переплачивают 0.2 SOL за сделку, используя завышенные лимиты. Мы решаем это с помощью динамического подбора комиссий на основе перцентилей, что экономит до 30% бюджета. За последние годы наши инженеры реализовали более 30 проектов в Solana DeFi, средняя задержка ботов — 30 мс.

Как работает модель транзакций Solana и чем она отличается от EVM?

В Ethereum gas price определяет приоритет. В Solana приоритет зависит от комбинации compute units (CU) и priority fee. Compute units — аналог газа, лимит вычислительных ресурсов для транзакции (максимум 1.4M CU). Priority fee — дополнительная плата в lamports за каждый compute unit. Правильная настройка этих параметров — ключ к быстрому исполнению ордеров.

Согласно Solana Foundation, средняя финализация составляет ~400 мс. Однако без наших настроек вы не достигнете этого показателя.

Обязательные инструкции для конкурентного бота:

import { ComputeBudgetProgram } from "@solana/web3.js"; // Устанавливаем лимит CU (важно: не больше чем нужно) const setComputeLimit = ComputeBudgetProgram.setComputeUnitLimit({ units: 200_000, // обычно для swap достаточно 100k-200k }); // Устанавливаем priority fee const setPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000, // 0.1 lamport per CU = 0.02 SOL на 200k CU }); transaction.add(setComputeLimit, setPriorityFee, ...swapInstructions); 

Неправильно рассчитанный лимит CU в меньшую сторону → транзакция падает с exceeded compute budget. В большую сторону — переплата и снижение приоритета (валидаторы оптимизируют throughput по соотношению fee/CU). Мы используем динамический расчёт priority fee через RPC-метод getRecentPrioritizationFees, выбирая 75-90 перцентиль для максимального приоритета. Типичная экономия на комиссиях при таком подходе — до 30% по сравнению с фиксированной ставкой.

Как настроить priority fee правильно? (шаги)

  1. Получить актуальные комиссии через getRecentPrioritizationFees.
  2. Выбрать целевой перцентиль (например, 90-й).
  3. Установить microLamports в ComputeBudgetProgram.setComputeUnitPrice.
  4. Добавить инструкцию в транзакцию перед остальными операциями.

Jupiter: агрегация маршрутов

Jupiter — стандартный агрегатор ликвидности на Solana, объединяющий Raydium, Orca, Meteora и ещё более 20 DEX/AMM. Версия API v6 — самая актуальная.

Quote API

const quote = await fetch(`https://quote-api.jup.ag/v6/quote?` + new URLSearchParams({ inputMint: "So11111111111111111111111111111111111111112", // SOL outputMint: USDC_MINT, amount: "1000000000", // 1 SOL в lamports slippageBps: "50", // 0.5% onlyDirectRoutes: "false", maxAccounts: "64", // ограничение аккаунтов в транзакции })); const quoteData = await quote.json(); 

Параметр maxAccounts: 64 критичен: Solana-транзакция может содержать не более 64 уникальных аккаунтов. Сложный маршрут через несколько протоколов рискует превысить лимит, что приведёт к ошибке TooManyAccounts. Мы автоматически подбираем маршрут так, чтобы уложиться в это ограничение, жертвуя оптимальностью, но гарантируя исполнимость.

Swap execution

const swapResponse = await fetch("https://quote-api.jup.ag/v6/swap", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ quoteResponse: quoteData, userPublicKey: wallet.publicKey.toString(), wrapAndUnwrapSol: true, dynamicComputeUnitLimit: true, prioritizationFeeLamports: "auto", }), }); const { swapTransaction } = await swapResponse.json(); const tx = VersionedTransaction.deserialize(Buffer.from(swapTransaction, "base64")); tx.sign([wallet]); const txid = await connection.sendRawTransaction(tx.serialize(), { skipPreflight: false, maxRetries: 3, }); 

В production мы рекомендуем включать dynamicComputeUnitLimit — Jupiter симулирует транзакцию и сам выставляет оптимальный CU лимит.

Raydium: прямая интеграция

Для latency-чувствительных операций прямая интеграция с Raydium CLMM (Concentrated Liquidity Market Maker) быстрее, чем через Jupiter. Используем SDK v2:

import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2"; import { PublicKey } from "@solana/web3.js"; const raydium = await Raydium.load({ owner: wallet, connection, disableFeatureCheck: true, }); const poolInfo = await raydium.clmm.getPoolInfoFromRpc(POOL_ID); const { transaction } = await raydium.clmm.swap({ poolInfo, ownerInfo: { useSOLBalance: true }, inputMint: new PublicKey(INPUT_MINT), amountIn: new BN(amount), amountOutMin: new BN(minAmountOut), observationId: poolInfo.observationId, txVersion: TxVersion.V0, }); 

Versioned Transactions (V0) с Address Lookup Tables обязательны для complex multi-hop swaps. Они позволяют включать больше аккаунтов через сжатие ALT.

Что такое Versioned Transactions?Versioned Transactions — новый формат транзакций Solana, введённый в 2022 году. В отличие от legacy-формата, они поддерживают Address Lookup Tables (ALT) — предварительно загружаемые списки аккаунтов. Это уменьшает размер транзакции и позволяет обходить лимит в 64 аккаунта. Наши боты используют V0 для сложных маршрутов.

Как снизить latency до миллисекунд?

Для конкурентного бота задержка измеряется не секундами, а миллисекундами. Вот три ключевых метода:

  1. Jito bundling. Jito — MEV-инфраструктура Solana. Bundle из транзакций отправляется напрямую в Jito block engine, минуя стандартный gossip. Это даёт атомарное исполнение и первый слот в блоке. Минимальный tip — 0.001 SOL, реально при конкурентных условиях 0.01-0.1 SOL.
import { searcherClient } from "jito-ts/dist/sdk/block-engine/searcher"; const client = searcherClient(JITO_BLOCK_ENGINE_URL, keypair); const bundle = new Bundle([tx1, tx2], 5); await client.sendBundle(bundle); 
  1. Geyser plugin / Yellowstone. Для real-time мониторинга on-chain данных используем Geyser gRPC (Yellowstone). Латентность 5-20 мс против 200-500 мс при стандартном RPC polling.

  2. Географическое размещение. Серверы валидаторов Solana сконцентрированы в конкретных дата-центрах. Размещение вашего бота рядом (Amsterdam, Frankfurt, Ashburn) снижает сетевую задержку на 10-50 мс.

Мониторинг и управление рисками

Мы строим систему отслеживания транзакций через WebSocket subscription — это быстрее polling. Статусы: processed → confirmed → finalized. При ошибке BlockhashNotFound автоматически запрашивается новый blockhash и выполняется повторная отправка. При превышении проскальзывания (SlippageToleranceExceeded) — пересчёт quote с актуальной ликвидностью. Капитал распределяется по отдельным keypair для каждой стратегии; long-term средства хранятся на hardware wallet или KMS.

Сравнение подходов: Jupiter API vs прямая интеграция

Параметр Jupiter API Прямая интеграция (Raydium SDK)
Оптимальность маршрута Высокая (20+ DEX) Ниже (один протокол)
Latency quote ~100-200ms ~20-50ms (on-chain)
Maintenance Минимальный Обновления SDK
Сложность Низкая Высокая
Кастомизация Ограниченная Полная

Для большинства ботов Jupiter API — правильный выбор: лучшие цены, меньше кода. Прямая интеграция с Raydium — только если нужна sub-50ms latency или специфичное взаимодействие с пулами (LP management, concentrated liquidity range orders).

Что входит в разработку под ключ?

Мы предоставляем полный цикл работ:

  • Аналитика и выбор стратегии (2-3 дня): определение требований к latency, объёму и стеку.
  • Разработка core бота (1-2 недели): WebSocket мониторинг, quote engine, execution с priority fees, Jito bundling (опционально).
  • Risk management и мониторинг (3-5 дней): slippage защита, автоматическая обработка ошибок, Telegram-алерты, метрики.
  • Оптимизация (3-5 дней): профилирование latency, тюнинг CU и priority fee под реальный трафик.
  • Документация и обучение: передаём код, архитектурную документацию, настраиваем дашборд.
  • Пост-продакшн поддержка: сопровождение в течение месяца после запуска.

Ориентиры по срокам

Тип бота Срок
Базовый (Jupiter API, auto priority fee) от 1 недели
Конкурентный (Jito bundling, Geyser, кастомные стратегии) 2-3 недели

Стоимость рассчитывается индивидуально в зависимости от сложности и требований к инфраструктуре. Наши инженеры с многолетним опытом в Solana-экосистеме оценят ваш проект и предложат оптимальное решение. Свяжитесь с нами, чтобы обсудить детали и получить консультацию.

Типичные ошибки при разработке ботов

  • Игнорирование priority fee — транзакции зависают на минуты.
  • Перерасход CU — переплата без прироста приоритета.
  • Отсутствие обработки ошибок — блокировка средств при падении ноды.
  • Хранение приватных ключей на сервере — риски компрометации.

Закажите разработку бота под вашу стратегию — получите консультацию и предварительную оценку.