Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Баннер версии. На этой странице документируется @raydium-io/raydium-sdk-v2@0.2.42-alpha, версия, проверенная для всех примеров кода на сайте (2026-04). SDK находится на стадии pre-1.0, и поверхность типов менялась между релизами — закрепляйте версию.

Установка

npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# или
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
SDK написан на TypeScript и поставляется с файлами .d.ts рядом с JS-артефактом. Минимальный набор инструментов: Node 18+, TypeScript 5.0+, moduleResolution: "bundler" или "node16".

Инициализация

Точка входа — Raydium.load:
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // пропустить проверку функций SDK при запуске
  blockhashCommitment: "confirmed",
});
Raydium.load асинхронна, потому что при запуске она загружает небольшой payload /config с api-v3.raydium.io (со списком текущих аккаунтов AmmConfig, уровней комиссий и т. д.). Установите disableFeatureCheck: true в оффлайн-окружениях; вам придётся вручную передавать эти значения некоторым построителям.

Четыре модульных фасада

После загрузки объект raydium предоставляет четыре модульных фасада — по одному на каждую поверхность продукта:
raydium.cpmm       // Пулы CPMM: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // Пулы CLMM: createPool, openPositionFromBase, increasePositionFromBase,
                   //             decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // Пулы AMM v4: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Маршрутизация между пулами: quotes, route-execution (beta в 0.2.41)
raydium.token      // Помощники: получить список токенов, метаданные, создание ATA
(Всего пять фасадов — «четыре» — это способ, которым Raydium группирует их публично, рассматривая trade и token как вспомогательные утилиты.)

Построители транзакций

Каждая мутирующая функция возвращает построитель вместо немедленного выполнения:
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
Возвращаемые поля:
  • execute — удобная функция, которая подписывает и отправляет. Эквивалент builder.execute.
  • builder — экземпляр TxBuilder со всеми накопленными инструкциями и подписантами. Вызовите .build() чтобы получить VersionedTransaction[]; полезно, когда нужно внедрить собственные инструкции или подписать внешними подписантами.
  • transaction / innerTransactions — сырые массивы инструкций. Используйте при построении составных транзакций мультипрограмм.
  • extInfo — дополнительная информация, специфичная для продукта. Например, createPool возвращает extInfo.poolId; createLaunchpad возвращает PDA нового стейта запуска.
txVersion управляет форматом транзакции legacy или V0. V0 (таблицы поиска адресов) — это рекомендуемый формат по умолчанию — он позволяет большим обменам уместиться в одной транзакции.

Зачем асинхронные построители?

Почти каждый построитель внутри загружает состояние на цепи: информацию о пуле (для котировок), владение программой токена (для маршрутизации Token-2022 vs SPL), освобождение от требования ренты на аккаунте (для создания ATA) и т. д. SDK кэширует агрессивно, но первый вызов для нового пула включает RPC-циклы обращения. Сохраняйте долгоживущий экземпляр raydium чтобы избежать повторной загрузки.

Дополнения модуля CLMM (последний релиз)

Фасад CLMM получил поверхности для новых функций динамической комиссии, односторонней комиссии и лимитных ордеров:
  • raydium.clmm.createCustomizablePool — расширение createPool, которое принимает collectFeeOn, enableDynamicFee и dynamicFeeConfigId. Используйте это для любого нового пула, который нуждается в новых параметрах; классический createPool продолжает работать для пулов с комиссией по умолчанию.
  • raydium.clmm.openLimitOrder — открыть односторонний лимитный ордер на пуле, который их поддерживает. Принимает poolInfo, poolKeys, limitOrderConfig (из /main/clmm-limit-order-config), inputMint, inputAmount и целевой tick.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — отрегулировать незаполненную часть существующего ордера. Уменьшение возвращает ошибку на полностью заполненном ордере с InvalidOrderPhase.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — собрать заполненный выход в ATA владельца. Её могут вызвать либо владелец ордера, либо хранитель limit_order_admin пула.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — закрыть полностью урегулированные ордера чтобы восстановить ренту.
  • raydium.api.getClmmDynamicConfigs() / getClmmLimitOrderConfigs() — помощники REST, которые обращаются к новым эндпоинтам /main/clmm-dynamic-config и /main/clmm-limit-order-config.
Небольшая реорганизация также переместила utils/ в libraries/. Код, который импортировал из @raydium-io/raydium-sdk-v2/utils/... должен переключиться на @raydium-io/raydium-sdk-v2/libraries/.... Пакетный барель верхнего уровня не изменился, поэтому большинство пользователей никогда не видят переименование. Сквозные пошаговые инструкции TypeScript находятся в products/clmm/code-demos.

Типичные ошибки

1. Несоответствие кластера

Конфигурация запуска SDK специфична для кластера. Смешивание cluster: "mainnet" с Connection devnet вызывает молчаливую неправильную маршрутизацию: SDK котирует против mainnet AmmConfig, но отправляет на devnet. Всегда передавайте оба параметра.

2. Забывчивое предварительное создание ATA

При первом взаимодействии с минтом Associated Token Account пользователя может не существовать. SDK автоматически добавляет инструкцию AssociatedTokenAccount::create в начало, когда обнаруживает отсутствующий ATA, что стоит небольшое количество ренты. Если ваш кошелек низко на SOL, это молча не удастся. Проверьте и пополните перед повторной попыткой.

3. Устаревший poolInfo

poolInfo — это кэшированный снимок. Если состояние пула изменилось с момента его загрузки (например, крупный обмен переместил цену), minAmountOut свопа может быть вычислен на основе старого состояния и упасть ниже суммы на цепи, вызвав отката. Переза́грузите poolInfo непосредственно перед построением высокоценных транзакций или используйте computeAmountOut SDK, который переприсваивает резервы.

4. Приоритетные комиссии

SDK по умолчанию не добавляет цены за вычислительные единицы. В периоды высокого объёма (запуски новых пулов, события с мем-монетами) это означает, что ваша транзакция конкурирует с множеством других и может не разместиться. Предоставьте явный computeBudgetConfig:
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // лимит CU
    microLamports: 50_000,   // приоритетная комиссия за CU
  },
});
См. integration-guides/priority-fee-tuning для руководства по размеру.

5. Допуск slippage должен соответствовать типу пула

CPMM и AMM v4 используют математику CPMM (низкое воздействие при обычных обменах). CLMM — кусочная (воздействие прыгает при пересечении тиков). Если вы скопируете допуск slippage 0.5% из примера CPMM в свон CLMM, который пересекает несколько тиков, транзакция вероятно откатится. computeAmountOut SDK возвращает priceImpact; установите допуск выше него.

6. BN vs number

Все поля сумм в SDK — это экземпляры BN из bn.js — никогда не JavaScript number. Преобразование значений сумм через .toNumber() молчаливо усекает на 2^53; для любого значения выше ~9 квадрильонов (не редкость для минтов с 9 десятичными знаками), это даёт неправильный результат. Держите всё в BN до финального рендеринга UI.

Политика версионирования

  • @raydium-io/raydium-sdk-v2 — единственный SDK, который поддерживает Raydium. Все документы, демонстрации и руководства интеграции ориентированы на него.
  • Более старый пакет v1 (@raydium-io/raydium-sdk) существует на npm по историческим причинам. Поддержка закончилась после выпуска CPMM и LaunchLab (v1 никогда не получил поддержку ни одного из них), и релизов v1 не было с 2024 года. Рассматривайте v1 как снятый с поддержки: не используйте его для нового кода и мигрируйте оставшиеся интеграции v1 на v2.
  • SDK v2 находится на стадии pre-1.0. Разрывные изменения между минорными релизами 0.x возможны; закрепляйте версию, которую вы проверили, и проверяйте примечания релиза GitHub при обновлении.

Обновление

При обновлении между минорными версиями SDK:
  1. Переподтвердите тип возврата каждого мутирующего вызова — изменения формы (например, extInfo) часто приземляются.
  2. Перегенерируйте сигнатуры загрузки poolInfo — поле может быть переименовано.
  3. Переподтвердите обработку slippage; SDK колебался между автоматическими и необязательными поведениями привязки в разных релизах.
  4. Если вы используете raydium.trade (маршрутизация), переподтвердите форму маршрута — это самая нестабильная часть поверхности.

Получение помощи

Для вопросов об SDK и API:
  • GitHub issues — подавайте на github.com/raydium-io/raydium-sdk-V2/issues для сообщений об ошибках и запросов функций. Команда Raydium активно отслеживает.
  • Discord — канал #dev-support на discord.gg/raydium для синхронной помощи.
  • Telegram — чат разработчиков, связанный с raydium.io (избегайте непроверенных групп Telegram).
Для проблем безопасности не публикуйте в открытых каналах — см. security/disclosure.

Указатели

Источники: