Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Требования

Каждый пример на этой странице соответствует файлу в raydium-sdk-V2-demo/src/cpmm; ссылка на GitHub находится рядом с каждым разделом. Инициализация следует config.ts.template из репозитория демонстрации (источник):
Экземпляр Raydium — это фасад SDK’а. Каждый пример ниже использует его. Он ленивым образом загружает списки токенов и конфигурации комиссий из api-v3.raydium.io; вы можете инициализировать его собственными данными в автономных окружениях.

Создание пула 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 преобразует lpAmount в needed_token_0 и needed_token_1, используя текущие резервы пула, увеличивает каждое значение на 1 + slippage для аргументов инструкции maximum_* и при необходимости создаёт ATA.

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

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

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

Источник: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts Эти инструкции ограничены администратором или создателем и обычно вызываются подписантом, которого контролирует мультиподпись Raydium или создатель пула. SDK предоставляет их как простые построители:
Автономно вы можете прочитать накопленные комиссии непосредственно из PoolState:

Скелет Rust CPI

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

Частые ошибки

Краткий контрольный список перед открытием тикета поддержки:
  • Отсортированные миты. Если ваш полученный poolState PDA не совпадает с пулом на цепи, вы, вероятно, забыли отсортировать миты.
  • Устаревшая котировка 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 для битовой маски статуса.

Что дальше

Источники: