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

Подготовка

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

Скрипт

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

Запуск

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

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

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

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

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

Дальше