Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Баннер версии. Все примеры TypeScript ориентированы на @raydium-io/raydium-sdk-v2@0.2.64-alpha; они были последний раз выполнены для 0.2.42-alpha (2026-04), а их сигнатуры вызовов перепроверены для исходного кода 0.2.64-alpha 09.09.2026 на Solana mainnet-beta. Скелет Rust CPI ориентирован на raydium-cp-swap в ветке chore/upgrade-anchor, Anchor 1.0.2 — master всё ещё использует 0.32.1. Идентификаторы программ получены из констант в reference/program-addresses.

Предварительные требования

Каждый пример на этой странице соответствует файлу в raydium-sdk-V2-demo/src/cpmm; ссылка на GitHub находится рядом с каждым разделом. Инициализация следует шаблону config.ts.template из репозитория примеров (источник):
Экземпляр Raydium — это фасад SDK, который используется во всех примерах ниже. Raydium.load асинхронен, потому что по умолчанию загружает список токенов; передайте disableLoadToken: true, чтобы пропустить эту загрузку. Проверка доступности функций уже пропущена, если вы не передадите disableFeatureCheck: false. Конфигурации комиссий загружаются лениво при первом использовании через raydium.api.getCpmmConfigs().

Создание пула CPMM

Источник: src/cpmm/createCpmmPool.ts
Несколько вещей, которые SDK делает автоматически:
  • Сортирует монеты в порядок token0/token1 перед выведением PDA.
  • Платит единовременную create_pool_fee на poolFeeAccount.
  • Создаёт связанные токен-счета вызывающей стороны, если они отсутствуют.
  • Выбирает правильную программу токенов (SPL Token или Token-2022) для каждой стороны.
После подтверждения вы можете получить состояние живого пула с помощью:

Своп (base-input)

Источник: src/cpmm/swap.ts
Примечание: SDK всегда повторно загружает состояние пула из RPC внутри getPoolInfoFromRpc. Не используйте котировку из api-v3.raydium.io для транзакции, которую вы собираетесь подписать — котировка, устаревшая на один блок, может привести к ExceededSlippage при приземлении.

Своп (base-output)

Источник: src/cpmm/swapBaseOut.ts

Депозит ликвидности

Источник: src/cpmm/deposit.ts
SDK выводит парную сумму из текущих резервов пула, увеличивает каждую сторону на проскальзывание для аргументов инструкции maximum_* и создаёт ATA при необходимости. raydium.cpmm.computePairAmount({ ... }) возвращает те же числа, если вам нужны они для предпросмотра UI.

Вывод ликвидности

Источник: src/cpmm/withdraw.ts

Сбор комиссий протокола/фонда/создателя

Источник: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts Сбор протокола и фонда остаётся защищённым авторитетом. Комиссии создателя имеют два пути: подписанный создателем CollectCreatorFee и аддитивный CollectCreatorFeePermissionless, который может вызвать любой плательщик, но который может передавать только на канонические ATA создателя. 0.2.64-alpha поставляется с построителями уровня модуля для обоих путей создателя:
Обе инструкции создателя изменили свои списки счетов при обновлении программы 19.09.2026. Каждая теперь принимает PDA creator_fee_share в ["creator_fee_share", creator, ammConfig], и версия без разрешения также принимает amm_config — обе добавлены в конец, после system_program, а не вставлены в середину, поэтому счета, которые уже были там, сохраняют свои позиции. Построитель, привязанный к версии SDK, которая предшествует обновлению, выдаёт более короткий список, и транзакция отклоняется из-за нехватки счетов. Убедитесь, что установленная вами версия содержит новые счета перед использованием этих помощников для обновленной программы, и обновите IDL, если вы генерируете клиентов из него.Передача PDA обязательна даже если она никогда не была создана — выведите её и передайте; программа возвращается к AmmConfig.creator_fee_share_rate когда счет пуст.
Две инструкции создателя имеют разные дискриминаторы и макеты счетов — версия без разрешения заменяет подписывающего создателя отдельным payer и неподписывающим creator. Используйте соответствующий построитель вместо ручного обмена счетами на другом.В SDK нет построителя для комиссий протокола или фонда (makeCollectProtocolFeeInstruction и makeCollectFundFeeInstruction не существуют ни под каким именем) — это пути администратора, как и CreateCreatorFeeShare / CloseCreatorFeeShare, которые также не имеют построителя. Построители инструкций низкого уровня, которые существуют, — это collectCpFeeInstruction, makeCollectCreatorFeeInstruction и collectCreatorFeePermissionlessInInstruction.
Вне цепи вы можете читать накопленные комиссии непосредственно из PoolState:

Скелет Rust CPI

Если вы хотите вызвать CPMM из собственной программы Anchor — например, хранилище, которое свопит от имени своих вкладчиков — контекст CPI выглядит так. Порядок счетов следует products/cpmm/instructions.
Если ваш CPI подписывает как PDA (например, вы управляете хранилищем от имени вкладчиков), замените CpiContext::new на CpiContext::new_with_signer и передайте ваши seeds.

Распространённые ошибки

Краткий контрольный список перед открытием тикета поддержки:
  • Отсортированные монеты. Если ваш выведённый PDA poolState не совпадает с пулом на цепи, вы, вероятно, забыли отсортировать монеты.
  • Устаревшая котировка API. Никогда не передавайте значение резерва из api-v3.raydium.io в CurveCalculator.swap. Загружайте из RPC.
  • Неправильная программа токенов. Хранилище монеты Token-2022 принадлежит программе Token-2022, а не SPL Token. Всегда используйте поля token_0_program / token_1_program пула.
  • Проскальзывание недостаточно для монет с комиссией за передачу. Если любая сторона пула — монета Token-2022 с комиссией за передачу, ваш minimum_amount_out должен быть выражен в том, что пользователь фактически получает, а не в том, что отправляет хранилище.
  • NotApproved при свопе. Проверьте PoolState.status — администратор может приостановить свопы на этом пуле. См. products/cpmm/instructions для маски статуса.

Что дальше

Источники: