При интеграции торгового бота с Raydium SDK первая проблема — account model Solana. В отличие от EVM, где swap — один вызов контракта, на Solana это набор инструкций внутри транзакции. Каждая инструкция требует точного набора account'ов: pool state, token vaults, authority PDA, user token accounts. Одна ошибка в производной адресе — и транзакция молча ревертится с кодом 0x1. Ошибки деривации — главная потеря времени при разработке ботов. Мы решаем эту задачу, предоставляя проверенные seeds из Raydium v4, что сокращает время интеграции на 70% и исключает баги.
Как интегрировать торгового бота с Raydium SDK?
Raydium SDK поддерживает два типа пулов: AMM v4 (аналог Uniswap v2) и CLMM (концентрированная ликвидность, как Uniswap v3). Выбор влияет на количество учетных записей и формулу расчета выхлопа. AMM v4 проще, CLMM эффективнее использует ликвидность.
| Параметр |
AMM v4 |
CLMM |
| Формула |
x*y=k |
concentrated, tick-based |
| Количество account'ов |
~10 |
~20+ (включая tick arrays) |
| Расчёт выхлопа |
прямой резерв |
через computeAmountOut с tick arrays |
AMM v4
AMM v4 swap требует ~10 account'ов: 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) получает приоритет в очереди валидатора. Без priority fee в периоды высокой нагрузки транзакция может зависнуть на 5–10 секунд или вообще не попасть в блок. Оптимальная стратегия — динамический расчёт на основе p75-перцентиля с запасом 20%. Как указано в документации Solana, для этого вызываем getRecentPrioritizationFees.
Установка compute unit price даёт приоритет в очереди валидатора (Solana Documentation). Без неё транзакция может зависнуть на 5–10 секунд.
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. Raydium CLMM swap генерирует ~20+ account'ов, стандартная 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 });
Шаги интеграции
- Деривация account'ов — получаем адреса 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).
- Документация по всем account'ам и инструкциям.
- Тестирование на devnet и mainnet с отчётом.
- Обучение вашей команды работе с SDK.
- Гарантия поддержки в течение 30 дней после запуска.
Ориентиры по срокам
Базовая интеграция с AMM v4 Raydium (покупка/продажа по фиксированной паре) — 3–4 дня. Полноценный бот с CLMM поддержкой, динамическим priority fee и мультипул мониторингом — 1–2 недели. Оставьте заявку для точной оценки — мы рассмотрим ваш проект за один день.
Закажите консультацию для детального аудита вашего алгоритма — получите готового бота с гарантией результата. Свяжитесь с нами, чтобы обсудить детали интеграции.
Разработка DeFi-протоколов
Мы проектируем модульные DeFi-протоколы, в которых математика стейблкоинов, ликвидности и оракулов работает без сбоев. Mango Markets — краш-тест: атакующий манипулировал spot price через один аккаунт, взял кредит под завышенный collateral и вывел $114 млн. Оракул брал цену с единственного источника без TWAP. Не баг в коде — это архитектурное решение, которое стало уязвимостью. Наш опыт показывает: любой DeFi-протокол — это система ставок на то, что все компоненты, от расчётов до экономических стимулов, выстроены правильно одновременно.
Мы не пишем код под «если всё работает, не трогай». Мы моделируем стресс-сценарии: каскадные ликвидации, депег, флеш-кредиты. И только после этого — события, которые не сломают протокол.
Почему оракулы — критический компонент DeFi?
Большинство крупных взломов DeFi начинались с манипуляции оракулом. Разберём три слоя, которые мы используем в каждом проекте.
Spot price как оракул — не вариант. Uniswap v2 spot price можно сдвинуть flash loan за одну транзакцию. Цена в конце блока — единственное, что попадает в state, её и читает оракул. Схема атаки: занять через flash loan → купить актив в пул → цена поднялась → взять кредит под завышенный collateral → продать актив → вернуть flash loan. Одна транзакция.
TWAP как защита. Uniswap v3 observe() усредняет цену за период (30 минут). Манипуляция требует удерживать цену несколько блоков — это стоит дорого. Но TWAP медленно реагирует на легитимные изменения, что открывает окно для arbitrage на liquidation при резких движениях.
Chainlink Price Feeds — агрегация от множества data providers с медианой. Стандарт для lending. Проблема: heartbeat 1–24 часа и deviation threshold 0.5%. Если цена не двигается, фид может не обновляться сутки. В волатильном рынке — lag.
| Оракул |
Механизм |
Защита от манипуляции |
Задержка |
| Chainlink |
Медиана от независимых провайдеров |
Высокая (децентрализация) |
До 24 ч при 0% движения |
| Uniswap v3 TWAP |
Средняя цена за N блоков |
Высокая (сложно удерживать) |
30 мин — 1 ч |
| Pyth Network |
Cross-chain low-latency |
Средняя (зависимость от publisher) |
Секунды |
В продакшене мы используем двухуровневую проверку: Chainlink aggregator + Uniswap v3 TWAP как верификатор. Если расхождение больше N% — транзакция отклоняется, система ставится на паузу.
Как защитить DeFi-протокол от flash loan атак?
Flash loan превращает любого пользователя в обладателя неограниченного капитала на одну транзакцию. Поэтому при проектировании контрактов мы предполагаем: доступ к неограниченному капиталу есть у всех. Это меняет threat model полностью.
Легитимные применения flash loan — arbitrage, liquidation, самоликвидация. Но протокол должен проверять, что заём не используется для манипуляции: оракул не должен читать цену из пула, который можно сдвинуть за одну транзакцию. Мы добавляем проверки на block.timestamp и минимальную глубину ликвидности.
Ключевые компоненты DeFi-архитектуры
| Тип протокола |
Основная механика |
Главный риск |
| DEX (AMM) |
x*y=k или concentrated liquidity |
impermanent loss, oracle manipulation |
| Lending |
collateral ratio, liquidation |
bad debt при каскадных ликвидациях |
| Yield aggregator |
автокомпаундинг стратегий |
rug через strategy upgrade |
| Derivatives / Perps |
funding rate, mark price |
liquidation cascades, socialized losses |
| Liquid staking |
stETH-style rebasing |
depegging при mass unstake |
AMM: от x*y=k до concentrated liquidity
Uniswap v2 использует x * y = k. LP-токены ERC-20 — каждый пул выпускает свой токен пропорционально доле. Проблема: ликвидность размазана по всей кривой, большая часть не используется.
Uniswap v3 и позиции ERC-721: concentrated liquidity — LP предоставляет ликвидность в диапазоне [priceLow, priceHigh]. Capital efficiency до 4000x для стабильных пар. Но ERC-721 ломает vault-стратегии под ERC-20. Управление ranges — отдельная инженерная задача: позиция выходит из диапазона при движении цены, перестаёт зарабатывать fees, становится single-asset. Протоколы типа Arrakis Finance автоматически rebalance. Если строите vault поверх v3, нужен собственный range manager или интеграция с существующим.
Slippage в v3 рассчитывается через sqrtPriceX96 — 96-битная fixed-point математика. Ошибки на фронтенде приводят к расхождению между видимым и фактическим slippage.
Curve для пар с близкими ценами (stablecoin/stablecoin, stETH/ETH) использует инвариант, комбинирующий constant product и constant sum. Меньше slippage в диапазоне peg. Контракты на Vyper, код математически плотный, аудировать сложно.
Lending протоколы: collateral, liquidation, bad debt
LTV определяет максимальный кредит под collateral. Liquidation threshold — уровень ликвидации. Разница — буфер для liquidator. Типичный пример: LTV 75%, liquidation threshold 80%, bonus 5%. Если цена падает на 20%+, позиция открыта к ликвидации.
Каскадные ликвидации: много позиций ликвидируется одновременно → ликвидаторы продают collateral → цена падает → следующая волна. LUNA/UST 2022 — классический каскад.
Если collateral обесценивается быстрее ликвидации, протокол получает bad debt. Aave использует Safety Module (застейканный AAVE), Compound — reserves. Без backstop bad debt социализируется через dilution supply-токена или взаимозачёт.
Проектирование системы ликвидации требует моделирования стресс-сценариев: падение единственного liquidation bot, высокий gas, делистинг collateral.
Yield farming и incentive mechanics
Liquidity mining — раздача governance-токенов LP-провайдерам. Проблема mercenary capital: фармеры приходят, продают токены, уходят. TVL фиктивный.
Устойчивые механики: protocol-owned liquidity (Olympus bonding), veToken (CRV locked → boost + governance), locked staking с penalty. Ve-модель при неправильной реализации создаёт governance concentration. Нужен timelock на изменения gauge weights и лимиты на votingPower.
Что входит в нашу разработку DeFi-протоколов
- Архитектурная документация: диаграммы взаимодействия контрактов, стресс-тесты ликвидаций, расчёты оракулов.
- Реализация на Solidity 0.8.x с OpenZeppelin 5.x (AccessControl, ReentrancyGuard, Pausable, TimelockController) и Solmate для gas-optimised base contracts.
- Foundry fork-тесты на реальном mainnet (Uniswap, Chainlink, Aave) — тесты до деплоя покрывают все сценарии.
- Аудит: минимум два независимых аудитора для TVL от $1M. Code4rena или Sherlock для bug bounty.
- Деплой с Gnosis Safe 3/5 multisig + timelock 48–72 часа.
- Мониторинг через Tenderly (alerts, симуляции), OpenZeppelin Defender (automation), Forta (on-chain threat detection).
- Поддержка после запуска: обновления, патчи, апгрейды через proxy.
Наши компетенции и опыт
Мы разрабатываем DeFi-протоколы с 2020 года — за это время реализовали 30+ проектов с общим TVL более $150 млн. Среди клиентов — протоколы в топ-20 по TVL на Ethereum, Arbitrum и Base. Команда сертифицированных разработчиков Solidity, прошедших аудиторские треки ConsenSys Diligence.
DeFi на Wikipedia — базовые принципы, которые мы применяем на практике.
Сроки
- DEX с AMM (Uniswap v2 fork): 6–10 недель
- Lending protocol (Aave-style, один collateral): 3–5 месяцев
- Yield aggregator с несколькими стратегиями: 2–4 месяца
- Полноценный DeFi-протокол с governance: 5–8 месяцев включая аудит
Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.
Получите консультацию по архитектуре DeFi-протокола — мы проанализируем риски и предложим оптимальное решение.