Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Каждая транзакция Solana устанавливает (явно или неявно) два параметра: лимит вычислительных единиц (максимум CU, которые может потребить tx; по умолчанию 200 000 × количество инструкций с ограничением по транзакции) и комиссию за приоритет в микро-ламортах за CU. Недостаточный размер любого параметра приводит к отказу транзакции — слишком низкий лимит CU вызывает
ProgramFailedToComplete; слишком низкая комиссия за приоритет оставляет транзакцию неподтверждённой до истечения срока.Два параметра
setComputeUnitLimit(units)— ограничивает вычисления; транзакция оплачивает не болееunitsCU.setComputeUnitPrice(microLamports)— ставка комиссии за приоритет в микро-ламортах за CU. Общая комиссия за приоритет =units × microLamports × 1e-6ламортов.
250_000 × 50_000 / 1e6 = 12,500 ламортов ≈ 0,0000125 SOL ≈ $0,003 при SOL = $200. Комиссии за приоритет такого размера — едва заметны для большинства пользовательских свопов, но материальны для ботов, выполняющих 1000 tx/день.
Бенчмарки CU по инструкциям
Бенчмарки из журналов выполнения на mainnet, усреднённые по последним запускам. Цифры приблизительные (±15%); переизмеряйте для ваших конкретных потоков.
Строка «пересечения тиков» для CLMM — это самая большая переменная CU. Если вы не знаете, сколько тиков пересечёт свап, планируйте наихудший случай — 8 пересечений — это жёсткий лимит (программа загружает максимум 8 массивов тиков).
Составные транзакции
Суммируйте отдельные бюджеты и добавьте:- +1 500 CU за каждый фрейм CPI — фиксированные накладные расходы runtime для каждого перекрёстного вызова программы.
- +20 000 CU за создание ATA —
create_associated_token_accountне бесплатна. - +5 000 CU за
setComputeUnitLimit/setComputeUnitPriceкаждая.
units × microLamports, поэтому переоценка на ~25% стоит на 25% больше в приоритетной комиссии).
Оценка комиссии за приоритет
Локальный рынок комиссий Solana означает, что комиссии за приоритет — для каждого записываемого аккаунта. Транзакция, которая записывает на горячий аккаунт (популярное состояние пула), платит больше, чем транзакция, записывающая на холодный аккаунт. Глобальный уровень комиссий — неправильная метрика для свопов Raydium; вам нужны комиссии на конкретных пулах, которые вы трогаете.Стратегия 1: оценитель RPC-провайдера
Каждый крупный RPC-провайдер публикует оценитель комиссий за приоритет, который запрашивает недавние комиссии на конкретных аккаунтах:Min / Low / Medium / High / VeryHigh / UnsafeMax. Отображайте их на перцентили:
Провайдеры: Helius (
getPriorityFeeEstimate), Triton (getRecentPrioritizationFees со списком аккаунтов), QuickNode (аналогично).
Стратегия 2: прямой RPC-запрос
Используйте стандартный RPCgetRecentPrioritizationFees:
Стратегия 3: историческая самонастройка
Для ботов с постоянным потоком отслеживайте собственные скорости приземления и истечения:Обработка отказов из-за исчерпания CU
Симптом: транзакция падает сexceeded maximum number of instructions allowed (200000) или ProgramFailedToComplete.
Диагностика:
- Увеличьте лимит CU. Если ваша транзакция использовала 195k из бюджета 200k, увеличьте до 300k.
- Разделите транзакцию. Если вы достигли лимита 1,4M за транзакцию, разбейте на две транзакции. Фарм
harvest then stake— классический случай для разделения при множественных наградах. - Обрезьте аккаунты. Каждый дополнительный записываемый аккаунт добавляет ~2 000 CU. Удаление неиспользуемых аккаунтов помогает в маргинальных случаях.
- Используйте таблицы поиска. Поиск LUT — ~50 CU за разрешённый адрес, сэкономив 5 000 CU полной ссылки на аккаунт за запись.
Обработка застрявших транзакций
Симптом: транзакция отправлена, никогда не подтверждается, в итоге истекает сBlockhashNotFound.
Диагностика:
getSignatureStatuses([sig])возвращаетnull→ лидер её не видел.- Возвращает
{ confirmationStatus: null }→ лидер видел, но не включил.
- Увеличьте комиссию за приоритет. Переотправьте с 2× текущей комиссией.
- Перестройте со свежим блокхешем. Время жизни блокхеша ~60 секунд; сверх этого транзакция невалидна независимо от комиссий.
- Многорассылка по RPC. Некоторые RPC имеют лучшую связность с лидерами. Отправляйте параллельно 3–5 провайдерам.
- Переключитесь на Jito bundles. См.
integration-guides/routing-and-mev. Бандлы обходят публичные очереди пакетов.
При перегрузке
Когда сеть перегружена (панели мониторинга Jupiter / Jito bundles показывают задолженность, задержка RPC растёт, темпы истечения tx растут), отрегулируйте:
Мониторинг сигналов перегрузки:
- 75-й перцентиль комиссии за приоритет > 500k микро-ламортов: перегрузка.
- 50-й перцентиль чаевых Jito > 0,001 SOL: перегрузка.
- RPC ответ p99 > 2s: проблема RPC или перегрузка.
Бюджетирование комиссий для ботов
Торговый бот, работающий ~1000 tx/день, нуждается в бюджете комиссии за приоритет. Примерная оценка:Ловушки
1. Забытый лимит CU
По умолчанию 200k CU × (инструкции в tx). Свап с одной инструкцией по умолчанию 200k; этого достаточно для CPMM на SPL Token, но не для CLMM с пересечениями тиков или чего-либо Token-2022. Всегда устанавливайте явно.2. Комиссия за приоритет на неправильном аккаунте
Если вы оцениваете комиссию за приоритет для минта токена, но горячий аккаунт — состояние пула, ваша оценка слишком низкая. Состояние пула — правильный записываемый аккаунт для нацеливания в Raydium.3. Комиссии масштабируются с лимитом CU
total_priority_fee = units × microLamports. Повышение units с 200k до 1M при 50k микро-ламортов/CU умножает комиссию за приоритет на 5×. Не переполняйте CU просто на всякий случай; измеряйте.
4. Версия транзакции по умолчанию
Legacy транзакции имеют меньше лимитов аккаунтов; V0 транзакции с таблицами поиска адресов открывают большие маршруты. SDK использует V0 по умолчанию вtxVersion: TxVersion.V0. Не понижайте до legacy, если не нужна совместимость с кошельком.
5. skipPreflight скрывает ошибки CU
skipPreflight: true отправляет транзацию без локальной симуляции. Вы экономите ~100ms, но теряете раннюю обратную связь об исчерпании CU. Используйте только при повторах, а не при первой попытке.
Ссылки
integration-guides/routing-and-mev— стратегии Jito bundle.integration-guides/aggregator— сборка транзакций.integration-guides/cpi-integration— стекирование CU через составные CPI.- Docs Solana compute budget program
- Solana
getRecentPrioritizationFeesRPC - Helius priority fee API
- Бенчмарки: журналы выполнения mainnet (интеграционные тесты Raydium SDK, апрель 2026).

