Перейти к основному содержанию
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Что делает этот скрипт. Загружает CPMM pool с RPC, рассчитывает swap с проскальзыванием 0.5%, собирает транзакцию, подписывает её вашим keypair и отправляет. От начала до конца — около 30 строк.

Подготовка

Убедитесь, что вы прочитали Quick start prerequisites и установили RPC_URL, KEYPAIR и необходимые зависимости.

Скрипт

Сохраните как swap.mjs:

Запуск

Выберите любой CPMM pool, для которого у вас есть ликвидность. Пример с каноническим SOL/USDC CPMM pool:
Ожидаемый вывод:

Что произошло

  1. Raydium.load инициализировал SDK — загрузил глобальный конфиг и установил контекст вашего кошелька.
  2. getPoolInfoFromRpc получил актуальное состояние pool прямо с RPC (не из API кеша). Для свопов с высокой стоимостью вы всегда хотите свежее состояние.
  3. CurveCalculator.swap рассчитал выход по constant-product за вычетом комиссии pool. Эта же математика запускается на-цепи, поэтому вы можете сравнивать расчеты off- и on-chain.
  4. raydium.cpmm.swap собрал транзакцию в формате V0 (с поддержкой lookup-таблиц адресов) и добавил явную конфигурацию compute-бюджета. Комиссия compute-бюджета помогает транзакции попасть в загруженные периоды.
  5. execute({ sendAndConfirm: true }) подписал, отправил и дождался подтверждения.

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

  • Pool not found — Неправильный POOL_ID или вы используете неправильный кластер (ID pool’а mainnet’а для devnet RPC и т.д.).
  • Insufficient funds for transaction — В вашем кошельке недостаточно SOL для input swap + комиссии + аренды ATA.
  • Slippage tolerance exceeded — Цена в pool изменилась между расчетом и выполнением. Повторите попытку или увеличьте параметр slippage, или используйте computeAmountOut SDK, который всегда заново загружает резервы.
  • Token account not initialized — ATA выходного токена не существовал и инструкция неявного создания упала по какой-то причине; проверьте баланс SOL в кошельке и попробуйте снова.

Дальше