Большинство торговых ботов на 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 правильно? (шаги)
- Получить актуальные комиссии через
getRecentPrioritizationFees. - Выбрать целевой перцентиль (например, 90-й).
- Установить
microLamportsвComputeBudgetProgram.setComputeUnitPrice. - Добавить инструкцию в транзакцию перед остальными операциями.
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 до миллисекунд?
Для конкурентного бота задержка измеряется не секундами, а миллисекундами. Вот три ключевых метода:
- 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);
-
Geyser plugin / Yellowstone. Для real-time мониторинга on-chain данных используем Geyser gRPC (Yellowstone). Латентность 5-20 мс против 200-500 мс при стандартном RPC polling.
-
Географическое размещение. Серверы валидаторов 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 — переплата без прироста приоритета.
- Отсутствие обработки ошибок — блокировка средств при падении ноды.
- Хранение приватных ключей на сервере — риски компрометации.
Закажите разработку бота под вашу стратегию — получите консультацию и предварительную оценку.







