Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Что такое IDL
Программы Anchor на Solana публикуют файл IDL (Interface Definition Language), описывающий их инструкции, макеты аккаунтов, перечисление ошибок и схемы структур. IDL — это источник истины для генерации кода клиента: TS SDK, Rust CPI крейт и клиенты третьих сторон генерируются из него (или написаны вручную против него). Raydium публикует IDL для CPMM, CLMM и LaunchLab. AMM v4, Stable AMM и Farm (v3 / v5 / v6) предшествуют Anchor или иным образом не распространяются через Anchor — их структуры аккаунтов поддерживаются вручную в SDK.Где их найти
IDL находятся в отдельном репозитории:
Файлы IDL версионируются в истории git репозитория; закрепитесь на конкретном коммите, если вам нужна воспроизводимость до байта.
Некоторые IDL также можно получить непосредственно из mainnet:
Все три наследуемых аккаунта IDL доступны для записи органом IDL
2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt, который отделён от органа обновления BPF программ — поэтому IDL можно обновить без переразвёртывания, и он также может отставать от переразвёртывания. Рассматривайте IDL в цепи как удобство, а не как доказательство формы развёрнутого байт-кода.
Регенерация TypeScript клиента
Codegen Anchor создаёт типизированный клиент из IDL:raydium.cpmm.swap(...), который оборачивает методы Anchor плюс всю бухгалтерию (создание ATA, корректировка комиссии за передачу, бюджет вычислений, маршрутизация программы Token-2022). Регенерируйте только когда вам нужен слой ниже SDK.
Регенерация Rust клиента (CPI крейт)
Raydium публикует Anchor крейты для программ, которые имеют IDL:raydium_cp_swap и raydium_clmm. Нет крейта под названием raydium_amm_v3 ни при каком написании. Обратите внимание, что ветки отличаются: raydium-cp-swap на master всё ещё закреплён на anchor-lang 0.32.1, поэтому интеграция Anchor-1.0 нуждается в chore/upgrade-anchor; CLMM на 0.32.1 в любом случае, поэтому эти два не могут использовать один крейт.
Функция cpi предоставляет структуры аккаунтов cpi::accounts::<Ix> и вызывающие функции cpi::<ix>() — готовые к использованию обёртки CPI. См. sdk-api/rust-cpi для примеров использования.
Если вы предпочитаете генерировать свежие привязки:
Регенерация Python клиента
Нет официального Raydium Python SDK. Генераторы третьих сторон включают:anchorpy— Python порт TypeScript клиента Anchor. Генерирует типизированные построители методов из IDL.solders— низкоуровневые примитивы Solana (транзакции, пары ключей, публичные ключи) в привязках Rust; используется подanchorpy.
sdk-api/python-integration для более полного пошагового руководства.
Политика изменения IDL
Raydium следует этим правилам для стабильности IDL:- Дискриминаторы инструкций никогда не меняются. Добавление новых инструкций расширяет перечисление в конце; существующие дискриминаторы остаются стабильными.
- Размеры аккаунтов стабильны; новые поля выходят из зарезервированного заполнения. Каждая структура состояния Raydium несёт конечную область заполнения, размер которой определён при создании, и новое поле вырезается из этого заполнения, а не добавляется — поэтому длина аккаунта в байтах и смещения всех существующих ранее полей остаются фиксированными. Следствие состоит в том, что байты, которые вы ранее читали как заполнение, могут стать значимыми, и поле может быть отправлено обратно в заполнение (как
PlatformConfig.curve_paramsв выпуске 2026-08-31). Перечитайте определение структуры после обновления; не предполагайте, что заполнение остаётся нулевым. - Коды ошибок перечисления только добавляются. Существующий код ошибки всегда означает одно и то же.
- Критические изменения поставляются в новых программах. Когда требуется переделка, команда развёртывает новый ID программы (например, CPMM как свежую программу вместо обновления AMM v4). Старые пулы продолжают работать на старой программе; новые пулы переходят на новую.
Что делать при изменении IDL
- Обновите SDK.
npm update @raydium-io/raydium-sdk-v2. - Регенерируйте код вашего клиента, если вы используете Anchor codegen напрямую.
- Сравните макет аккаунта. Конечные поля нового макета — это единственное, что ваш код не видел; подтвердите, нужны ли они вам.
- Не предполагайте, что старые дискриминаторы инструкций недействительны. По правилу 1 они всё ещё работают.
- Повторно запустите интеграционные тесты на devnet перед развёртыванием на mainnet.
Устранение неполадок IDL
Ошибки “Invalid discriminator”
Обычно означает, что клиент, построенный против версии N IDL, пытается вызвать инструкцию, которая существовала только в версии программы до развёртывания. Повторно получите IDL из живой программы:Ошибки декодирования аккаунта
Еслиprogram.account.<Name>.fetch(pubkey) выбрасывает ошибку с “Invalid account discriminator”, аккаунт был создан предыдущей версией программы и Anchor отклоняет его 8-байтовый дискриминатор. Решение — использовать парсер сырого макета из SDK (PoolInfoLayout.decode(accountData)), который не применяет дискриминаторы Anchor.
Отсутствующие инструкции в сгенерированном клиенте
Codegen TS Anchor генерирует методы только для инструкций, чья запись IDL имеетname, который парсится как действительный идентификатор. Инструкции Raydium все это удовлетворяют, но если вы видите несоответствие, проверьте, является ли файл IDL из текущего выпуска SDK.
Указатели
sdk-api/rust-cpi— использование Rust CPI крейтов.sdk-api/python-integration— Python черезanchorpy.sdk-api/typescript-sdk— более высокоуровневый TS клиент.

