> ## 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.

# TypeScript SDK

> @raydium-io/raydium-sdk-v2 — установка, четыре модульных фасада, построение транзакций и типичные ошибки каждого нового разработчика.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/sdk-api/typescript-sdk)
</Info>

<Info>
  **Баннер версии.** На этой странице документируется `@raydium-io/raydium-sdk-v2@0.2.42-alpha`, версия, проверенная для всех примеров кода на сайте (2026-04). SDK находится на стадии pre-1.0, и поверхность типов менялась между релизами — закрепляйте версию.
</Info>

## Установка

```bash theme={null}
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`:

```ts theme={null}
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` предоставляет четыре модульных фасада — по одному на каждую поверхность продукта:

```ts theme={null}
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` как вспомогательные утилиты.)

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

Каждая мутирующая функция возвращает построитель вместо немедленного выполнения:

```ts theme={null}
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`](/ru/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`:

```ts theme={null}
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`](/ru/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](https://github.com/raydium-io/raydium-sdk-V2/issues) для сообщений об ошибках и запросов функций. Команда Raydium активно отслеживает.
* **Discord** — канал `#dev-support` на [discord.gg/raydium](https://discord.gg/raydium) для синхронной помощи.
* **Telegram** — чат разработчиков, связанный с [raydium.io](https://raydium.io) (избегайте непроверенных групп Telegram).

Для проблем безопасности **не** публикуйте в открытых каналах — см. [`security/disclosure`](/ru/security/disclosure).

## Указатели

* [`sdk-api/rest-api`](/ru/sdk-api/rest-api) — HTTP-дополнение к SDK.
* [`sdk-api/trade-api`](/ru/sdk-api/trade-api) — построенные сервером транзакции свопа.
* [`sdk-api/anchor-idl`](/ru/sdk-api/anchor-idl) — перегенерация клиентов непосредственно из IDL программ.
* [`sdk-api/python-integration`](/ru/sdk-api/python-integration) — эквивалент на Python через `solana-py`.
* [`integration-guides/priority-fee-tuning`](/ru/integration-guides/priority-fee-tuning) — размер `computeBudgetConfig`.

Источники:

* [Исходный код Raydium SDK v2](https://github.com/raydium-io/raydium-sdk-V2)
* Примечания релиза Raydium SDK.
