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

# Инструкции LaunchLab

> Initialize, Buy, Sell, Graduate, CollectFees, SetParams — форма аргументов, списки счетов и условия для каждой инструкции LaunchLab.

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

  [Открыть английскую версию →](/products/launchlab/instructions)
</Info>

<Info>
  LaunchLab предоставляет компактный набор инструкций: шесть пользовательских вызовов плюс несколько административных примитивов. SDK обертывает их все; на этой странице документирован raw-уровень для агрегаторов, инструментов мониторинга и программ, которым нужен CPI.
</Info>

## Реестр инструкций

| Группа                  | Инструкция                                                 | Вызывается                                                                                                                                                                            |
| ----------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Глобальная конфигурация | `CreateConfig` / `UpdateConfig`                            | Администратор                                                                                                                                                                         |
| Жизненный цикл запуска  | `Initialize` / `InitializeV2`                              | Любой (создатель) — запуски SPL Token; V2 записывает `amm_creator_fee_on` для последующей CPMM-выпускной                                                                              |
| Жизненный цикл запуска  | `InitializeWithToken2022`                                  | Любой (создатель) — запуск Token-2022, опциональный `TransferFeeConfig`                                                                                                               |
| Торговля                | `BuyExactIn` / `BuyExactOut`                               | Любой — покупка с точным вводом / точным выводом на кривой связывания                                                                                                                 |
| Торговля                | `SellExactIn` / `SellExactOut`                             | Любой — продажа с точным вводом / точным выводом на кривой связывания                                                                                                                 |
| Выпуск                  | `MigrateToAmm`                                             | Migration wallet (установлен на `GlobalConfig`) — переход к AMM v4. Используется, когда `amm_creator_fee_on = BothToken`, чтобы комиссия создателя могла быть собрана с обеих сторон. |
| Выпуск                  | `MigrateToCpswap`                                          | Migration wallet — переход к CPMM. Используется, когда `amm_creator_fee_on = QuoteToken` и требуется для запусков Token-2022. Обертывает `InitializeWithPermission` на CPMM.          |
| Комиссии                | `CollectFee`                                               | Администратор — сбор комиссий протокола с запуска                                                                                                                                     |
| Комиссии                | `CollectMigrateFee`                                        | Администратор — сбор накопленных миграционных комиссий                                                                                                                                |
| Комиссии                | `ClaimCreatorFee`                                          | Создатель — требование накопленных комиссий создателя во время фазы кривой                                                                                                            |
| Vesting                 | `CreateVestingAccount`                                     | Создатель — выделение заблокированных токенов бенефициару, разблокировка после выпуска                                                                                                |
| Vesting                 | `CreatePlatformVestingAccount`                             | Администратор платформы — выделение заблокированных токенов бенефициарам платформы                                                                                                    |
| Vesting                 | `ClaimVestedToken`                                         | Бенефициар — требование разблокированных токенов после скалы                                                                                                                          |
| Конфигурация платформы  | `CreatePlatformConfig` / `UpdatePlatformConfig`            | Администратор платформы                                                                                                                                                               |
| Конфигурация платформы  | `UpdatePlatformCurveParam` / `RemovePlatformCurveParam`    | Администратор платформы — управление списком разрешенных форм кривой на платформу                                                                                                     |
| Комиссии платформы      | `ClaimPlatformFee` / `ClaimPlatformFeeFromVault`           | Администратор платформы                                                                                                                                                               |
| Доступ платформы        | `CreatePlatformGlobalAccess` / `ClosePlatformGlobalAccess` | Администратор — управление доступом к `GlobalConfig` для платформ                                                                                                                     |

Разделение "ExactIn/ExactOut" отражает `SwapBaseInput` / `SwapBaseOutput` CPMM — в цепи это отдельные дискриминаторы инструкций с немного отличающимся округлением.

**Выбор пути выпуска.** `migrate_type` записывается на `PoolState` во время `Initialize{V2,WithToken2022}` и определяет, какие из двух инструкций выпуска могут работать. Запуски Token-2022 всегда мигрируют на CPMM. Запуски SPL Token мигрируют либо на AMM v4, либо на CPMM в зависимости от `amm_creator_fee_on`:

* `BothToken` → `MigrateToAmm` → пул AMM v4 (комиссия создателя может быть собрана с обеих сторон; AMM v4 не имеет встроенного поля комиссии создателя, поэтому комиссии берутся через механизм блокировки LP-NFT).
* `QuoteToken` → `MigrateToCpswap` → пул CPMM с `creator_fee_on = OnlyQuoteToken` (создатель продолжает зарабатывать комиссии от пула CPMM через NFT-ключ LaunchLab Fee — см. [`/ru/products/launchlab/creator-fees`](/ru/products/launchlab/creator-fees)).

<Tip>
  **Примечание о названии enum `AmmCreatorFeeOn`.** Исходный код Rust называет этот enum `AmmCreatorFeeOn` с вариантами `QuoteToken` и `BothToken`. Название вводит в заблуждение: в текущей операционной практике вариант определяет не только то, с какой стороны собирается комиссия создателя в пуле CPMM после выпуска — он также выбирает целевую **программу выпуска** (AMM v4 или CPMM) и связывается с `migrate_type` на `PoolState` запуска. Рассматривайте поле как "целевая миграция + сторона комиссии после выпуска" в одном. Имя enum в цепи не было переработано, но рассуждение о нем как о `MigrationTarget` соответствует реальности более точно.
</Tip>

## `Initialize`

Создать новый запуск.

**Аргументы**

```
launch_params: {
    curve_type:                 u8,
    base_supply_max:            u64,
    base_supply_graduation:     u64,
    k:                          u128,              // или initial_virtual_quote_reserve для curve_type=1
    open_time:                  u64,
    quote_mint:                 Pubkey,
    base_token_metadata: {                         // встроенные name/symbol/uri; программа делает CPI на Metaplex
        name:   String,
        symbol: String,
        uri:    String,
    },
    fees: {
        buy_numerator:   u64,
        buy_denominator: u64,
        sell_numerator:  u64,
        sell_denominator: u64,
        lp_share:        u64,
        creator_share:   u64,
        protocol_share:  u64,
        total_share:     u64,
    },
    post_graduation_lp_policy:  u8,                // 0 = Burn, 1 = Lock, 2 = ToCreator
}
```

**Счета** (сокращено)

| #  | Имя                | W | S | Примечания                                                   |
| -- | ------------------ | - | - | ------------------------------------------------------------ |
| 1  | `creator`          | W | S | Платит за аренду + создание базового mint.                   |
| 2  | `launch_config`    |   |   | Связывание конфигурации протокола.                           |
| 3  | `launch_state`     | W |   | Новый счет.                                                  |
| 4  | `launch_authority` |   |   | PDA.                                                         |
| 5  | `base_mint`        | W | S | Свежая Keypair (или PDA) — эта инструкция инициализирует ее. |
| 6  | `base_vault`       | W |   | ATA `launch_authority` на `base_mint`.                       |
| 7  | `quote_mint`       |   |   |                                                              |
| 8  | `quote_vault`      | W |   | ATA `launch_authority` на `quote_mint`.                      |
| 9  | `metadata`         | W |   | PDA метаданных Metaplex.                                     |
| 10 | `metaplex_program` |   |   |                                                              |
| 11 | `token_program`    |   |   | Только SPL Token.                                            |
| 12 | `system_program`   |   |   |                                                              |
| 13 | `rent`             |   |   |                                                              |

**Предусловия**

* `quote_mint ∈ launch_config.allowed_quote_mints`.
* `base_supply_graduation ≤ base_supply_max`.
* Параметры комиссии проходят проверки `launch_config.max_*_fee_rate`.
* `open_time ≥ now − slop` (SDK требует `≥ now`; программа допускает небольшое оглядывание назад).
* `curve_type` распознается.

**Постусловия**

* `base_mint` имеет `supply = base_supply_max`, все в `base_vault`.
* `base_mint.mint_authority = launch_authority`, `freeze_authority = None`.
* `LaunchState` инициализирован с `status = Active`, `base_sold = 0`, `quote_reserve_real = 0`.
* `quote_reserve_target` вычислен из параметров кривой + `base_supply_graduation` + `buy_numerator` (примерно).

**Типичные ошибки** — `InvalidQuoteMint`, `FeeRateTooHigh`, `InvalidCurveParams`, `MathOverflow`.

## `Buy` (канонический вариант: `BuyExactIn`)

Пользователь предоставляет фиксированный `quote_in`; кривая вычисляет `base_out`.

**Аргументы**

```
quote_in:          u64
minimum_base_out:  u64
```

**Счета**

| #  | Имя                        | W | S |
| -- | -------------------------- | - | - |
| 1  | `user`                     | W | S |
| 2  | `launch_state`             | W |   |
| 3  | `launch_authority`         |   |   |
| 4  | `base_vault`               | W |   |
| 5  | `quote_vault`              | W |   |
| 6  | `user_base_ata`            | W |   |
| 7  | `user_quote_ata`           | W |   |
| 8  | `base_mint`                |   |   |
| 9  | `quote_mint`               |   |   |
| 10 | `token_program`            |   |   |
| 11 | `associated_token_program` |   |   |
| 12 | `system_program`           |   |   |

**Предусловия**

* `launch_state.status == Active`.
* `now ≥ open_time`.
* `user_quote_ata.balance ≥ quote_in`.
* `quote_in > 0`.

**Эффект**

1. Разделить `quote_in` на `quote_in_after_fee` и части комиссий.
2. Newton-решить кривую для `base_out` по постоплатному quote.
3. `require(base_out ≥ minimum_base_out)` иначе отвернуть `ExceededSlippage`.
4. Переместить `quote_in` пользователь → хранилище. Переместить `base_out` хранилище → пользователь.
5. Обновить `base_sold += base_out`, `quote_reserve_real += quote_in_after_fee × (lp_share / total_share)`.
6. Обновить счетчики комиссий (`protocol_fees_quote`, `creator_fees_quote`).
7. `state_data.num_buys += 1`.
8. Если `quote_reserve_real ≥ quote_reserve_target` после обновления, SDK обычно цепляет инструкцию `Graduate` в одной транзакции. Программа не выпускает автоматически внутри `Buy` — требуется последующий `Graduate`.

## `BuyExactOut`

Пользователь указывает точный `base_out`; программа вычисляет `quote_in`.

**Аргументы**

```
base_out:      u64
maximum_quote_in: u64
```

Те же счета, что и `BuyExactIn`. Использует замкнутую форму квадратичного интеграла (или CPMM-обратное, для curve\_type 1) вместо итерации Newton.

## `Sell` / `SellExactIn` / `SellExactOut`

Зеркало `Buy`. Пользователь возвращает `base_in` на кривую и получает `quote_out`. Комиссия вычитается из `quote_out`, поэтому пользователь получает меньше, чем сырые интегрированные доходы.

**Предусловия** —

* `user_base_ata.balance ≥ base_in`.
* Продажа не может снизить `base_sold` ниже 0 (избыточно с вышесказанным, учитывая постоянство бухгалтерии).
* Запуск — `Active`.

**Эффект** — симметричен `Buy`. `base_sold` уменьшается, `quote_reserve_real` уменьшается. Комиссии все еще начисляются.

## `MigrateToAmm` / `MigrateToCpswap`

Выпустить запуск в торгуемый AMM-пул, как только кривая достигнет `total_quote_fund_raising`. Две инструкции соответствуют двум целям выпуска — AMM v4 и CPMM — и **только одна из них действительна для любого заданного запуска**, определенная `pool_state.migrate_type` (установлено во время `Initialize`).

**Кто подписывает**

* `MigrateToAmm` — `migrate_to_amm_wallet` записанная на связывании `GlobalConfig`.
* `MigrateToCpswap` — `migrate_to_cpswap_wallet` записанная на связывании `GlobalConfig`.

Эти кошельки обычно хранятся операционным crank выпуска Raydium; на практике выпуск происходит через несколько секунд после пересечения порога, независимо от того, кто инициировал финальную покупку.

**Аргументы**

`MigrateToAmm` принимает три (в основном параметры рынка OpenBook, которые программа пересылает на AMM v4):

```
base_lot_size:               u64
quote_lot_size:              u64
market_vault_signer_nonce:   u8
```

`MigrateToCpswap` не принимает никаких.

**Эффект (общий для обоих)**

1. Проверить `pool_state.status == Migrate` (т.е., `quote_reserve_target` был достигнут). Иначе отвернуть с `PoolMigrated` (статус уже был `Migrated`) или `PoolFunding` (все еще в funding).
2. Проверить `pool_state.migrate_type` совпадает с инструкцией (`0` для AMM, `1` для CPMM). Иначе отвернуть с `MigrateTypeNotMatch`.
3. Вычислить послевыпускные резервы:
   * `base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount`
   * `quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee`
4. CPI в целевую программу (`AMM v4 Initialize2` или `CPMM InitializeWithPermission`) с этими резервами для создания послевыпускного пула.
5. Разделить результирующий LP в соответствии с связыванием `PlatformConfig.{platform_scale, creator_scale, burn_scale}` (только CPMM) — одна часть отчеканена на `platform_nft_wallet`, одна на creator NFT, обернутая программой LP-Lock, одна сожжена через Burn & Earn. Для выпуска AMM v4 расположение LP управляется собственными параметрами инициализации AMM v4.
6. Отозвать `base_mint.mint_authority` (установить на `None`).
7. Перевернуть `pool_state.status = Migrated`, установить `vesting_schedule.start_time = block_time + cliff_period`.

**Постусловия** — `BuyExactIn`, `BuyExactOut`, `SellExactIn`, `SellExactOut` будут отвергать с этого момента с `PoolMigrated`. Результирующий AMM-пул канонический и торгуется как любой другой AMM v4 / CPMM-пул.

**Типичные ошибки** — `PoolFunding`, `PoolMigrated`, `MigrateTypeNotMatch`, `InvalidCpSwapConfig`, `MathOverflow`.

## `CollectFee`

Административный сбор накопленных комиссий протокола за торговлю на одном запуске.

**Аргументы** — отсутствуют.

**Счета**

| # | Имя                       | W | S | Примечания                                                  |
| - | ------------------------- | - | - | ----------------------------------------------------------- |
| 1 | `protocol_fee_owner`      |   | S | Должен равняться `global_config.protocol_fee_owner`.        |
| 2 | `authority`               |   |   | PDA `[b"vault_auth_seed"]`; подписывает передачу хранилища. |
| 3 | `pool_state`              | W |   | Изменено для обнуления `quote_protocol_fee`.                |
| 4 | `global_config`           |   |   | Источник истины для подписывающего.                         |
| 5 | `quote_vault`             | W |   | Дренировано на `quote_protocol_fee`.                        |
| 6 | `recipient_token_account` | W |   | ATA `protocol_fee_owner` на `quote_mint`.                   |
| 7 | `quote_mint`              |   |   |                                                             |
| 8 | `token_program`           |   |   | SPL Token (quote mint всегда SPL Token).                    |

**Эффект** — переместить `pool_state.quote_protocol_fee` из `quote_vault` в `recipient_token_account`, затем обнулить счетчик. Может быть вызвано в любое время после первой покупки.

## `CollectMigrateFee`

Административный сбор миграционной комиссии, накопленной при выпуске. Та же форма счета, что и `CollectFee` с `migrate_fee_owner` как подписывающий (вместо `protocol_fee_owner`) и `pool_state.migrate_fee` как дренированный счетчик.

## `ClaimCreatorFee`

Сбор создателя накопленных комиссий создателя по **всем запускам, которыми владеет создатель** и использующим один и тот же quote mint. Дренирует хранилище комиссий для каждого создателя, а не для каждого пула.

**Аргументы** — отсутствуют.

**Счета**

| # | Имя                        | W | S | Примечания                                                                  |
| - | -------------------------- | - | - | --------------------------------------------------------------------------- |
| 1 | `creator`                  | W | S | Создатель пула.                                                             |
| 2 | `fee_vault_authority`      |   |   | PDA `[b"creator_fee_vault_auth_seed"]`.                                     |
| 3 | `creator_fee_vault`        | W |   | PDA с семенами `[creator, quote_mint]`; агрегированное хранилище создателя. |
| 4 | `recipient_token_account`  | W |   | `init_if_needed`; ATA `creator` на `quote_mint`.                            |
| 5 | `quote_mint`               |   |   |                                                                             |
| 6 | `token_program`            |   |   |                                                                             |
| 7 | `system_program`           |   |   | Для создания ATA, если требуется.                                           |
| 8 | `associated_token_program` |   |   |                                                                             |

**Эффект** — переместить весь баланс `creator_fee_vault` в `recipient_token_account`. Отвернуть с проверкой require-больше-чем-ноль, если хранилище пусто.

## `ClaimPlatformFee`

Сбор платформы, который дренирует хранилище quote запуска напрямую. Используйте, когда платформа хочет требовать свой срез для одного конкретного запуска без прохождения через агрегированное хранилище платформы.

**Аргументы** — отсутствуют.

**Счета**

| #  | Имя                        | W | S | Примечания                                              |
| -- | -------------------------- | - | - | ------------------------------------------------------- |
| 1  | `platform_fee_wallet`      | W | S | Должен равняться `platform_config.platform_fee_wallet`. |
| 2  | `authority`                |   |   | PDA `[b"vault_auth_seed"]`.                             |
| 3  | `pool_state`               | W |   | Дренировано на `pool_state.platform_fee`.               |
| 4  | `platform_config`          |   |   | Источник истины для подписывающего.                     |
| 5  | `quote_vault`              | W |   | Дренировано.                                            |
| 6  | `recipient_token_account`  | W |   | `init_if_needed`; ATA `platform_fee_wallet`.            |
| 7  | `quote_mint`               |   |   |                                                         |
| 8  | `token_program`            |   |   |                                                         |
| 9  | `system_program`           |   |   |                                                         |
| 10 | `associated_token_program` |   |   |                                                         |

**Эффект** — переместить `pool_state.platform_fee` из `quote_vault` в `recipient_token_account`, обнулить счетчик.

## `ClaimPlatformFeeFromVault`

Агрегированный сбор платформы. Дренирует хранилище комиссий платформы для каждого quote mint, которое накапливает комиссии с каждого запуска, маршрутизированного через платформу.

**Аргументы** — отсутствуют.

**Счета**

| # | Имя                        | W | S | Примечания                                              |
| - | -------------------------- | - | - | ------------------------------------------------------- |
| 1 | `platform_fee_wallet`      | W | S | Должен равняться `platform_config.platform_fee_wallet`. |
| 2 | `fee_vault_authority`      |   |   | PDA `[b"platform_fee_vault_auth_seed"]`.                |
| 3 | `platform_config`          |   |   |                                                         |
| 4 | `platform_fee_vault`       | W |   | PDA с семенами `[platform_config, quote_mint]`.         |
| 5 | `recipient_token_account`  | W |   | `init_if_needed`; ATA `platform_fee_wallet`.            |
| 6 | `quote_mint`               |   |   |                                                         |
| 7 | `token_program`            |   |   |                                                         |
| 8 | `system_program`           |   |   |                                                         |
| 9 | `associated_token_program` |   |   |                                                         |

**Эффект** — переместить полный баланс `platform_fee_vault` в `recipient_token_account`. Отвернуть, если хранилище пусто.

## Инструкции Vesting и platform-config

Они задокументированы на выделенных страницах, потому что каждая имеет свою модель состояния:

* [`CreateVestingAccount`, `CreatePlatformVestingAccount`, `ClaimVestedToken`](/ru/products/launchlab/vesting)
* [`CreatePlatformConfig`, `UpdatePlatformConfig`, `UpdatePlatformCurveParam`, `RemovePlatformCurveParam`, `CreatePlatformGlobalAccess`, `ClosePlatformGlobalAccess`](/ru/products/launchlab/platform-config)
* [`CreateConfig`, `UpdateConfig`](/ru/products/launchlab/global-config)

## Матрица изменения состояния

| Инструкция                              | `status`   | `real_base`  | `real_quote`     | Счетчики комиссий                              | Послепулове состояние                     |
| --------------------------------------- | ---------- | ------------ | ---------------- | ---------------------------------------------- | ----------------------------------------- |
| `Initialize{V2,WithToken2022}`          | Funding    | 0            | 0                | 0                                              | —                                         |
| `BuyExactIn(q_in)`                      | Funding    | +∆           | +∆q\_after\_fee  | `quote_protocol_fee += ∆`, `platform_fee += ∆` | —                                         |
| `SellExactIn(b_in)`                     | Funding    | −∆           | −∆q\_before\_fee | (то же самое)                                  | —                                         |
| Порог достигнут                         | → Migrate  | —            | —                | —                                              | —                                         |
| `MigrateToAmm` / `MigrateToCpswap`      | → Migrated | (заморожено) | (заморожено)     | `migrate_fee` установлено                      | создано, LP разделено по `PlatformConfig` |
| `CollectFee` / `CollectMigrateFee`      | любой      | —            | —                | счетчик обнулен                                | —                                         |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | любой      | —            | —                | дренирует хранилище                            | —                                         |
| `CreateVestingAccount`                  | Funding    | —            | —                | —                                              | бамп `allocated_share_amount`             |
| `ClaimVestedToken`                      | Migrated   | —            | —                | —                                              | дренирует `base_vault`                    |

## Куда дальше

* [`/ru/products/launchlab/code-demos`](/ru/products/launchlab/code-demos) — примеры TypeScript для каждой инструкции.
* [`/ru/products/launchlab/accounts`](/ru/products/launchlab/accounts) — полная форма состояния.
* [`/ru/reference/error-codes`](/ru/reference/error-codes) — LaunchLab error enum.

Источники:

* [Raydium SDK v2 `LaunchLab` module](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium LaunchLab program source
