Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Что такое 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 ни при каком написании. Обратите внимание на ветку. Оба репозитория master по-прежнему закреплены на anchor-lang 0.32.1, поэтому интеграция Anchor 1.0 требует chore/upgrade-anchor на каждом. С обоими крейтами на этой ветке они используют =1.0.2 и могут жить в одном крейте. Смешивание крейта master с крейтом ветки обновления не собирается.
Функция cpi предоставляет структуры аккаунтов cpi::accounts::<Ix> и вызывающие функции cpi::<ix>() — готовые к использованию обёртки CPI. См. sdk-api/rust-cpi для примеров использования.
Если вы предпочитаете генерировать свежие привязки:
Регенерация Python клиента
Нет официального Python SDK Raydium. Генераторы третьих сторон включают:anchorpy— Python-порт TypeScript-клиента Anchor. Генерирует типизированные построители методов из IDL.solders— низкоуровневые примитивы Solana (транзакции, пары ключей, pubkey) в привязках Rust; используется подanchorpy.
sdk-api/python-integration для более полного пошагового руководства.
Политика изменения IDL
Raydium следует этим правилам для стабильности IDL:- Дискриминаторы инструкций никогда не меняются. Добавление новых инструкций расширяет перечисление в конце; существующие дискриминаторы остаются стабильными.
- Размеры аккаунтов стабильны; новые поля выходят из зарезервированного заполнения. Каждая структура состояния Raydium содержит конечную область заполнения, размер которой определён при создании, и новое поле вырезается из этого заполнения, а не добавляется — поэтому длина аккаунта в байтах и смещения всех существующих ранее полей остаются фиксированными. Следствие состоит в том, что байты, которые вы ранее читали как заполнение, могут стать значимыми, и поле может быть отправлено обратно в заполнение (как
PlatformConfig.curve_paramsв выпуске от 2026-08-31). Перечитайте определение структуры после обновления; не предполагайте, что заполнение остаётся нулевым. - Коды перечисления ошибок только добавляются. Существующий код ошибки всегда означает одно и то же.
- Критические изменения поставляются в новых программах. Когда требуется переделка, команда развёртывает новый program 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 клиент.

