Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Новые программы Raydium (CPMM, CLMM, Farm v6, LaunchLab) написаны на Anchor — фреймворке на Rust, который расширяет базовую модель программ Solana, добавляя валидацию счётов, обработку ошибок и IDL (описание интерфейса). AMM v4 и более старые версии ферм были созданы до появления Anchor. Понимание обоих подходов помогает читать код, генерировать клиентов из IDL и отлаживать неожиданные ошибки.
Модель развёртывания программ
Каждая программа на Solana живёт по адресуPubkey. Байт-код программы хранится в исполняемом счёте, владельцем которого является BPF Upgradable Loader (BPFLoaderUpgradeab1e11111111111111111111111).
Развёртывание программы состоит из трёх счётов:
- Счёт программы: небольшой счёт метаданных по адресу программы. Владелец: BPF Upgradable Loader.
- Счёт ProgramData: содержит реальный байт-код. Выводится как
[program_id, "programdata"]. - Буферный счёт (временный): содержит новый байт-код во время обновления. Удаляется после обновления.
security/admin-and-multisig.
Проверка развёрнутой программы
Чтобы убедиться, что код в сети соответствует одобренному при аудите исходному коду:Anchor: фреймворк на основе Solana
Базовые программы Solana — это функции на Rust с такой сигнатурой:- Автоматически генерирует детерминированный 8-байтовый discriminator для каждой инструкции и типа счёта.
- Валидирует ограничения счётов (owner, seeds, writable, signer, mint-matches, token-program-matches) перед выполнением вашего кода.
- Генерирует IDL — файл описания интерфейса, который клиенты используют для вызова программы.
- Поставляется с клиентской библиотекой на Rust, TypeScript и Python.
8-байтовый discriminator
Каждый счёт Anchor и каждая инструкция Anchor начинаются с 8-байтового discriminator — первыми 8 байтами SHA-256 фиксированной строки:getProgramAccounts, которые перечисляют все счёты определённого типа.
Ошибки
Программы Anchor определяют ошибки через#[error_code]:
reference/error-codes.
IDL
Файл IDL (Interface Description Language) Anchor — это JSON-описание программы: её инструкций, счётов, типов, ошибок и событий. Это эквивалент ABI для Ethereum. Raydium публикует IDL для всех программ Anchor. Можно получить живой код из сети:src/raydium/*/idl/*.json.
Структура IDL
Генерация клиента из IDL
CLIanchor Anchor генерирует типы TypeScript и Rust:
Когда IDL — ваш помощник
Если вы хотите построить кастомную интеграцию, которая не использует SDK Raydium:- Получите IDL (живой код из сети или из исходного кода SDK).
- Найдите нужную инструкцию (например,
swap_base_input). - Конструируйте данные инструкции: 8-байтовый discriminator + закодированные аргументы.
- Передайте счёты в порядке, указанном в IDL.
sdk-api/anchor-idl.
Программы до Anchor: AMM v4 и Farm v3/v5
Эти программы были созданы до появления Anchor. Они используют:- Ручную диспетчеризацию инструкций:
u8-тег вinstruction_dataс операторомmatch. - Ручную валидацию счётов:
if accounts[0].owner != &expected_program { ... }. - Borsh-сериализованные аргументы инструкций: нет discriminator, просто
instruction_data[1..]. - Layout через
#[repr(C, packed)]: бинарный layout структуры C.
Механика обновления программ
Толькоupgrade_authority счёта ProgramData может обновить программу. Шаги:
- Скомпилировать новый байт-код.
- Записать его в буферный счёт (
solana program write-buffer). - Отправить инструкцию обновления:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - Среда выполнения атомарно заменяет байт-код программы содержимым буфера.
security/admin-and-multisig.
Сделать программу неизменяемой
Authority обновления может быть установлена наNone, и программа станет навсегда неизменяемой. Raydium не сделала это ни для какого продукта — команда оставляет возможность применить исправления безопасности. Компромисс: пользователи должны доверять процессу мультиподписи + таймлока.
Программы и рента
Развёртывание программы требует ламортов, свободных от ренты:- Программа объёмом 50 КБ: ~0.35 SOL ренты.
- Программа объёмом 200 КБ: ~1.4 SOL ренты.
solana program close) возвращает ламорты. Программы Raydium остаются активными и не запланированы на закрытие.
Отладка программ Anchor
Вывод логов
Макросmsg! Anchor записывает в лог транзакции. Имитируйте транзакцию, чтобы увидеть логи:
- Вызов программы (
Program CPMMoo8... invoke [1]). - Вызовы
msg!из кода программы. - Потребление вычислительных единиц (
consumed 137842 of 400000 compute units). - Успех или ошибку программы.
Коды ошибок
Если программа Anchor выбросит исключение, лог показывает:SlippageExceeded). Сопоставьте с массивом errors в IDL.
Полную таблицу ошибок Raydium см. в reference/error-codes.
Несоответствие layout счётов
Если вы передали неправильный счёт в неправильный слот, макросы валидации счётов Anchor возвращают ошибки вроде:ErrorCode Anchor); ошибки ≥6000 — пользовательские коды программы.
Ссылки
solana-fundamentals/account-model— как программы владеют счётами.solana-fundamentals/pdas-and-cpis— PDA как их объявляет Anchor.sdk-api/anchor-idl— получение и использование IDL Raydium.reference/program-addresses— адреса программ.reference/error-codes— справочник кодов ошибок.security/admin-and-multisig— управление правами обновления.
- Anchor book.
- Solana program deployment.
- IDL Raydium (опубликованы в SDK
src/raydium/*/idl/*.json).


