Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Анатомия транзакции
Транзакция Solana состоит из трёх основных компонентов:- Message: упорядоченный список инструкций, аккаунты, на которые они ссылаются, и свежий блокхеш.
- Signatures: по одной для каждого подписанта, подтверждающие авторизацию транзакции.
- Recent blockhash: доказывает, что транзакция свежая; транзакции с устаревшими блокхешами (старше 150 слотов) отклоняются.
Инструкции
Инструкция задаёт:program_id— программу для вызова.accounts— аккаунты (и их флаги записываемости/подписанта), которые может задействовать программа.data— непрозрачные байты, которые программа интерпретирует.
ComputeBudget::SetComputeUnitLimit— увеличение лимита CU по умолчанию.ComputeBudget::SetComputeUnitPrice— установка приоритетной комиссии.- Опционально
CreateAssociatedTokenAccount— создание выходного ATA, если у пользователя его нет. Raydium::SwapBaseInput— выполнение своппа.- Опционально
CloseAccount— закрытие обёрнутого SOL ATA.
raydium.trade.swap().
Аккаунты в транзакциях
Каждый аккаунт, задействованный любой инструкцией в транзакции, должен быть указан в ключах аккаунтов транзакции. Каждый аккаунт помечается:- Подписант / не подписант: должен ли владелец аккаунта подписать транзакцию?
- Записываемый / только для чтения: может ли транзакция изменять аккаунт?
solana-fundamentals/account-model). Своппы CLMM с несколькими пересечениями tick array могут иметь 20+.
Лимит размера транзакции
Solana ограничивает транзакции 1232 байтами включая подписи, message и заголовки. Это наиболее распространённое препятствие для сложных транзакций — CLMM Raydium с много-хоп маршрутизацией регулярно упирается в этот лимит. Разбор типичного своппа Raydium размером ~1000 байт:| Компонент | Размер |
|---|---|
| Подпись | 64 Б |
| Количество подписей | 1 Б |
| Заголовок message | 3 Б |
| Блокхеш | 32 Б |
| Ключи аккаунтов (13 × 32 Б) | 416 Б |
| Инструкции (4 × ~100-150 Б) | 400–600 Б |
| Всего | ~900–1100 Б |
Таблицы поиска адресов (ALTs)
ALT позволяют транзакции ссылаться на аккаунты через однобайтовый индекс в опубликованную таблицу вместо полного 32-байтового публичного ключа. Это резко сжимает транзакцию:- Транзакция со ссылками на 20 аккаунтов напрямую: ~640 Б публичных ключей.
- Та же транзакция с использованием ALT: ~20 Б индексов + ссылки на ALT.
Бюджет вычислений
Каждая транзакция имеет бюджет compute unit (CU). Его превышение прерывает исполнение и терпит неудачу.- По умолчанию: 200 000 CU за транзакцию.
- Максимум: 1 400 000 CU за транзакцию (повышено через
ComputeBudget::SetComputeUnitLimit). - Лимит на блок: 48M CU на блок (уровень протокола).
integration-guides/priority-fee-tuning для полной таблицы):
| Инструкция | CU |
|---|---|
| Своп CPMM | ~140 000 |
| Своп CLMM (без пересечений tick) | ~170 000 |
| Своп CLMM (4 пересечения tick) | ~320 000 |
| Стейкинг Farm v6 | ~130 000 |
| Создание пула CPMM | ~250 000 |
ComputeBudget; иначе вы получите 200k по умолчанию, что слишком мало для большинства инструкций Raydium.
Приоритетные комиссии
Помимо базовой комиссии транзакции (5000 lamports за подпись), валидаторы всё чаще приоритизируют транзакции, платящие приоритетные комиссии: подсказку за CU в микролампортах.integration-guides/priority-fee-tuning о том, как размер это динамически.
Лимиты количества инструкций и аккаунтов
Помимо общего лимита в 1232 байта:- Макс аккаунтов за транзакцию: 128.
- Макс аккаунтов за инструкцию (CPI): 64.
- Макс инструкций за транзакцию: жёсткого лимита нет, ограничен только лимитом размера.
- Макс глубина CPI: 4 (программа может вызвать другую, которая может вызвать другую, 4 уровня глубины).
Категории комиссий в своппе Raydium
Пользовательская транзакция своппа платит комиссии в двух категориях:Сетевые комиссии Solana
Выплачиваются валидаторам в SOL.- Базовая комиссия подписи: 5000 lamports за подпись. Почти всегда 1 подпись = 0.000005 SOL.
- Приоритетная комиссия: CU-price × CU-limit в микролампортах. Варьируется с перегрузкой; см.
integration-guides/priority-fee-tuning.
Комиссии протокола Raydium
Вычитаются из суммы своппа.- Комиссия своппа: процент от входа (CPMM 0.25% типично, CLMM 0.01%–1% на уровень). Делится между LP и протоколом. См.
ray/protocol-fees.
Пример: $1000 USDC → SOL через CPMM 0.25% уровень
| Категория комиссии | Сумма | Идёт |
|---|---|---|
| Базовая комиссия подписи | 0.000005 SOL (~$0.0007) | Валидатор |
| Приоритетная комиссия (10k µL × 300k CU) | 0.003 SOL (~$0.45) | Валидатор |
| Комиссия своппа CPMM (0.25%) | $2.50 | LP + протокол |
| Всего стоимость пользователя | ~$2.95 |
Versioned транзакции
Solana имеет два формата транзакций:- Legacy: оригинальный формат, нет поддержки ALT.
- v0 (Versioned): поддерживает ALT, расширяемый для будущих версий.
Свежесть блокхеша
Транзакция должна включать блокхеш из последних ~150 слотов (~60 секунд). За пределами этого окна валидаторы её отклоняют. Для retry циклов получайте свежий блокхеш при каждом retry:integration-guides/priority-fee-tuning для полного retry-с-возрастающими-комиссиями паттерна.
Параллельное исполнение
Solana исполняет не конфликтующие транзакции параллельно на многоядерных валидаторах. Две транзакции конфликтуют, если обе записывают один и тот же аккаунт. Последствия для Raydium:- Два своппа на одном пуле не могут исполняться параллельно — оба записывают состояние пула.
- Своп на Пуле A и своп на Пуле B исполняются параллельно, если списки аккаунтов не перекрываются.
- Только-для-чтения транзакция никогда не блокирует писателя на том же аккаунте (только-для-чтения конкурирует с собой, но не с записями).
Уровни подтверждения транзакции
При отправке транзакции вы выбираете уровень подтверждения:| Уровень | Ожидание | Финальность |
|---|---|---|
processed | ~400 мс | Не финализирована; может откатиться |
confirmed | ~1 с | Большинство голосовало |
finalized | ~13 с | Большинство укоренилось |
confirmed стандарт. Для операций с большой ценностью (создание пула, пополнение вознаграждения), finalized безопаснее.
Симуляция
Solana поддерживает симуляцию транзакции перед отправкой:getBestSwapInfo для проверки, что выбранный маршрут действительно работает. Симуляция не бесплатна — она потребляет RPC ёмкость — но она ловит ошибки перед оплатой.
Указатели
solana-fundamentals/account-model— аккаунты в транзакциях.solana-fundamentals/pdas-and-cpis— как программы вызывают друг друга.integration-guides/priority-fee-tuning— размер лимитов CU и приоритетных комиссий.ray/protocol-fees— структура комиссий протокола Raydium.

