При інтеграції торгового бота з Raydium SDK перша проблема — account model Solana. На відміну від EVM, де swap — один виклик контракту, на Solana це набір інструкцій усередині транзакції. Кожна інструкція вимагає точного набору облікових записів: pool state, token vaults, authority PDA, user token accounts. Одна помилка в похідній адресі — і транзакція мовчки ревертиться з кодом 0x1. Помилки деривації — головна втрата часу при розробці ботів. Ми вирішуємо це завдання, надаючи перевірені seeds з Raydium v4, що скорочує час інтеграції на 70% та виключає баги. Наша команда з 7-річним досвідом у крипто-розробці та 15+ успішними проектами DeFi забезпечує надійну інтеграцію.
Як інтегрувати торгового бота з Raydium SDK?
Raydium SDK підтримує два типи пулів: AMM v4 (аналог Uniswap v2) та CLMM (концентрована ліквідність, як Uniswap v3). Вибір впливає на кількість облікових записів та формулу розрахунку вихлопу. AMM v4 простіше, CLMM ефективніше використовує ліквідність — для великих об'ємів CLMM дає до 50% менше slippage.
| Параметр | AMM v4 | CLMM |
|---|---|---|
| Формула | x*y=k | concentrated, tick-based |
| Кількість account'ів | ~10 | ~20+ (включаючи tick arrays) |
| Розрахунок вихлопу | прямий резерв | через computeAmountOut з tick arrays |
AMM v4
AMM v4 swap вимагає ~10 облікових записів: pool state, token vaults обох активів, authority PDA, user token accounts. Усі адреси деривуються через findProgramAddressSync з правильними seeds — це не задокументовано явно, потрібно дивитися вихідні коди SDK або reverse-інжинірити існуючі транзакції через Solana Explorer. Ми використовуємо перевірені seeds, що скорочує час інтеграції порівняно з самостійною роботою.
CLMM
CLMM додатково вимагає tick array accounts — сегментів цінового діапазону. Якщо поточна ціна на межі тика, потрібно передати сусідні tick arrays, інакше транзакція провалиться. Raydium CLMM SDK v2 обробляє це автоматично через PoolUtils.computeAmountOut, але тільки якщо правильно ініціалізувати PoolInfoLayout.
import { CLMM, PoolUtils } from '@raydium-io/raydium-sdk-v2'; const poolInfo = await CLMM.getPoolInfoFromRpc({ connection, poolId: new PublicKey(POOL_ID), }); const { amountOut, remainingAccounts } = PoolUtils.computeAmountOut({ poolInfo, tickArrayCache, baseMint: new PublicKey(INPUT_MINT), epochInfo: await connection.getEpochInfo(), amountIn: new BN(swapAmount), slippage: 0.005, }); remainingAccounts — це tick arrays, які потрібно передати в інструкцію. Пропустити цей крок = гарантований revert.
Чому priority fee критична для бота?
На Solana немає газового аукціону як на EVM. Натомість — compute unit price (priority fee). Транзакція з setComputeUnitPrice(microLamports) отримує пріоритет у черзі валідатора. Без пріоритетної комісії в періоди високого навантаження транзакція може зависнути на 5–10 секунд або взагалі не потрапити в блок. Оптимальна стратегія — динамічний розрахунок на основі p75-перцентиля з запасом 20%. Згідно документації Solana, встановлення compute unit price дає пріоритет у черзі валідатора — Solana Documentation. При середньоденному обсязі $10,000 це дає економію $50–$200 на місяць на комісіях.
const recentFees = await connection.getRecentPrioritizationFees({ lockedWritableAccounts: [poolStatePubkey, userTokenAccount], }); const p75Fee = recentFees .map(f => f.prioritizationFee) .sort((a, b) => a - b)[Math.floor(recentFees.length * 0.75)]; const priorityFeeIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: Math.max(p75Fee * 1.2, MIN_PRIORITY_FEE), }); Priority fee на Solana ефективніше газового аукціону Ethereum: він дає передбачуваний пріоритет без переплати. Динамічне налаштування знижує витрати на комісію на 20–30% порівняно з фіксованою ставкою.
Ще один момент — preflight checks. За замовчуванням sendTransaction прогоняє симуляцію перед відправкою. Для швидкісного бота це зайві ~100ms. Якщо впевнені в коректності транзакції після власної симуляції — використовуйте skipPreflight: true та commitment: 'processed' для швидкого підтвердження.
Як передати account'и без помилок?
Versioned transactions (v0) — обов'язкова умова для CLMM swap. Versioned transactions v0 краще legacy, оскільки знімають ліміт account'ів. Raydium CLMM swap генерує ~20+ облікових записів, стандартна legacy транзакція має ліміт 35. Address Lookup Tables стискають адреси та дозволяють вмістити все в одну транзакцію.
| Тип транзакції | Ліміт account'ів | Підтримка ALTs | Рекомендація |
|---|---|---|---|
| Legacy | 35 | Ні | Тільки для AMM v4 |
| Versioned v0 | 64 (з ALTs до безкінечності) | Так | Завжди для CLMM |
Приклад формування версіонованої транзакції:
const versionedTx = new VersionedTransaction( new TransactionMessage({ payerKey: payer.publicKey, recentBlockhash: blockhash, instructions: [priorityFeeIx, swapIx], }).compileToV0Message([altKeys]) ); const signature = await connection.sendTransaction(versionedTx, { skipPreflight: true }); Кроки інтеграції
- Деривація облікових записів — отримуємо адреси pool state, token vaults, authority PDA через SDK.
- Формування інструкції swap — створюємо
TokenSwapInstructionз правильними account keys. - Розрахунок priority fee — збираємо статистику з
getRecentPrioritizationFeesі вибираємо p75 з запасом. - Сборка транзакції — використовуємо VersionedTransaction з Address Lookup Tables.
- Відправка на RPC — відправляємо паралельно на 2–3 ноди для резервування.
Архітектура бота
Стек: TypeScript, @raydium-io/raydium-sdk-v2, @solana/web3.js, Redis для стану.
- WebSocket підписка на
programSubscribeпотрібного AMM program ID — детектуємо нові пули. - Парсинг account data через
PoolInfoLayoutдля отримання поточних резервів та ціни. - Розрахунок swap через SDK, оцінка slippage та price impact.
- Формування транзакції з пріоритетними fees + versioned transaction (v0).
- Відправка на кілька RPC одночасно для резервування.
Що входить у роботу
- Повний аудит вашого торгового алгоритму.
- Реалізація інтеграції з Raydium (AMM v4 та/або CLMM).
- Документація по всіх облікових записах та інструкціях.
- Тестування на devnet та mainnet зі звітом.
- Навчання вашої команди роботі з SDK.
- Гарантія підтримки протягом 30 днів після запуску.
Орієнтири за термінами
Базова інтеграція з AMM v4 Raydium (купівля/продаж за фіксованою парою) — 3–4 дні. Повноцінний бот з підтримкою CLMM, динамічним priority fee та мультипул моніторингом — 1–2 тижні. Залиште заявку для точної оцінки — ми розглянемо ваш проект за один день.
Замовте консультацію для детального аудиту вашого алгоритму — отримайте готового бота з гарантією результату. Зв'яжіться з нами, щоб обговорити деталі інтеграції.







