> ## 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>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/products/launchlab/instructions)
</Info>

<Info>
  LaunchLab 公開了一套精簡的指令集：六個用戶面向的呼叫加上少數管理員原語。SDK 包裝了所有這些；本頁面為聚合器、監測工具和需要 CPI 的程式文檔化了原始接口。
</Info>

## 指令清單

| 分組     | 指令                                                         | 可由以下調用                                                                                                         |
| ------ | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| 全域設定   | `CreateConfig` / `UpdateConfig`                            | 管理員                                                                                                            |
| 啟動生命週期 | `Initialize` / `InitializeV2`                              | 任何人（創建者）— SPL Token 啟動；V2 記錄 `amm_creator_fee_on` 以供最終 CPMM 畢業使用                                               |
| 啟動生命週期 | `InitializeWithToken2022`                                  | 任何人（創建者）— Token-2022 啟動，可選的 `TransferFeeConfig`                                                                |
| 交易     | `BuyExactIn` / `BuyExactOut`                               | 任何人 — 結合曲線上的精確輸入／精確輸出買入                                                                                        |
| 交易     | `SellExactIn` / `SellExactOut`                             | 任何人 — 結合曲線上的精確輸入／精確輸出賣出                                                                                        |
| 畢業     | `MigrateToAmm`                                             | 遷移錢包（在 `GlobalConfig` 上設定）— 畢業到 AMM v4。在 `amm_creator_fee_on = BothToken` 時使用，以便創建者費用可以在任一側收取。                 |
| 畢業     | `MigrateToCpswap`                                          | 遷移錢包 — 畢業到 CPMM。在 `amm_creator_fee_on = QuoteToken` 時使用，Token-2022 啟動需要。包裝 CPMM 上的 `InitializeWithPermission`。 |
| 費用     | `CollectFee`                                               | 管理員 — 掃除啟動中的協議費用                                                                                               |
| 費用     | `CollectMigrateFee`                                        | 管理員 — 掃除應計的遷移費用                                                                                                |
| 費用     | `ClaimCreatorFee`                                          | 創建者 — 在曲線階段索取應計的創建者費用                                                                                          |
| 解鎖     | `CreateVestingAccount`                                     | 創建者 — 為受益人分配鎖定代幣，於畢業後解鎖                                                                                        |
| 解鎖     | `CreatePlatformVestingAccount`                             | 平台管理員 — 為平台側受益人分配鎖定代幣                                                                                          |
| 解鎖     | `ClaimVestedToken`                                         | 受益人 — 懸崖期後索取已解鎖的代幣                                                                                             |
| 平台設定   | `CreatePlatformConfig` / `UpdatePlatformConfig`            | 平台管理員                                                                                                          |
| 平台設定   | `UpdatePlatformCurveParam` / `RemovePlatformCurveParam`    | 平台管理員 — 管理每個平台的允許曲線形狀列表                                                                                        |
| 平台費用   | `ClaimPlatformFee` / `ClaimPlatformFeeFromVault`           | 平台管理員                                                                                                          |
| 平台存取   | `CreatePlatformGlobalAccess` / `ClosePlatformGlobalAccess` | 管理員 — 限制哪些平台可以使用給定的 `GlobalConfig`                                                                             |

「ExactIn/ExactOut」分割類似 CPMM 的 `SwapBaseInput` / `SwapBaseOutput` — 鏈上它們是單獨的指令判別式，具有略微不同的四捨五入。

**畢業路徑選擇。** `migrate_type` 在 `Initialize{V2,WithToken2022}` 時記錄在 `PoolState` 上，決定了兩個畢業指令中的哪一個可以執行。Token-2022 啟動始終遷移到 CPMM。SPL Token 啟動根據 `amm_creator_fee_on` 設定遷移到 AMM v4 或 CPMM：

* `BothToken` → `MigrateToAmm` → AMM v4 池（創建者費用可以從任一側收取；AMM v4 沒有原生創建者費用欄位，所以創建者費用改由 LP 鎖定 NFT 機制取得）。
* `QuoteToken` → `MigrateToCpswap` → 具有 `creator_fee_on = OnlyQuoteToken` 的 CPMM 池（創建者繼續通過 LaunchLab Fee Key NFT 從 CPMM 池賺取費用 — 見 [`products/launchlab/creator-fees`](/zh-Hant/products/launchlab/creator-fees)）。

<Tip>
  **關於 `AmmCreatorFeeOn` 枚舉名稱的注意。** Rust 原始碼將此枚舉稱為 `AmmCreatorFeeOn`，變體為 `QuoteToken` 和 `BothToken`。名稱具有誤導性：在目前的運營實踐中，變體不僅控制創建者費用在畢業後 CPMM 池上的哪一側收取 — 它還選擇了畢業**目標程式**（AMM v4 對比 CPMM），並與啟動 `PoolState` 上的 `migrate_type` 配對。將欄位視為「遷移目標 + 畢業後創建者費用側」合併為一個。鏈上枚舉名稱尚未重構，但將其推理為 `MigrationTarget` 更接近現實。
</Tip>

## `Initialize`

建立新的啟動。

**參數**

```
launch_params: {
    curve_type:                 u8,
    base_supply_max:            u64,
    base_supply_graduation:     u64,
    k:                          u128,              // 或初始虛擬報價儲備，curve_type=1 時
    open_time:                  u64,
    quote_mint:                 Pubkey,
    base_token_metadata: {                         // 內聯名稱/符號/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 | 支付租金 + 基礎鑄幣廠建立。                           |
| 2  | `launch_config`    |   |   | 協議配置繫結。                                   |
| 3  | `launch_state`     | W |   | 新帳戶。                                      |
| 4  | `launch_authority` |   |   | PDA。                                      |
| 5  | `base_mint`        | W | S | 新的 Keypair（或 PDA）— 此指令初始化它。               |
| 6  | `base_vault`       | W |   | `launch_authority` 在 `base_mint` 上的 ATA。  |
| 7  | `quote_mint`       |   |   |                                           |
| 8  | `quote_vault`      | W |   | `launch_authority` 在 `quote_mint` 上的 ATA。 |
| 9  | `metadata`         | W |   | Metaplex 元資料 PDA。                         |
| 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`。
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` ix。程式不會在 `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`

啟動一旦曲線達到 `total_quote_fund_raising` 就畢業成可交易的 AMM 池。兩個指令對應於兩個畢業目標 — AMM v4 和 CPMM — 並且**對於任何給定的啟動，其中只有一個有效**，由 `pool_state.migrate_type` 決定（在 `Initialize` 時設定）。

**誰簽署**

* `MigrateToAmm` — 記錄在繫結 `GlobalConfig` 上的 `migrate_to_amm_wallet`。
* `MigrateToCpswap` — 記錄在繫結 `GlobalConfig` 上的 `migrate_to_cpswap_wallet`。

這些錢包通常由 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`（仍在籌資中）復原。
2. 驗證 `pool_state.migrate_type` 符合指令（AMM 為 `0`，CPMM 為 `1`）。否則以 `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. 根據繫結的 `PlatformConfig.{platform_scale, creator_scale, burn_scale}`（僅限 CPMM）分割結果 LP — 一部分鑄幣給 `platform_nft_wallet`，一部分給由 LP-Lock 程式包裝的創建者 NFT，一部分通過 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 |   | `protocol_fee_owner` 在 `quote_mint` 上的 ATA。 |
| 7 | `quote_mint`              |   |   |                                             |
| 8 | `token_program`           |   |   | SPL Token（報價鑄幣廠始終是 SPL Token）。              |

**效果** — 從 `quote_vault` 轉帳 `pool_state.quote_protocol_fee` 到 `recipient_token_account`，然後將計數器置零。可在首次買入後的任何時間調用。

## `CollectMigrateFee`

管理員對畢業時應計的遷移費用的掃除。帳戶形狀與 `CollectFee` 相同，但使用 `migrate_fee_owner` 作為簽署者（而非 `protocol_fee_owner`）和 `pool_state.migrate_fee` 作為抽乾的計數器。

## `ClaimCreatorFee`

每個創建者對創建者擁有的**每個使用相同報價鑄幣廠的啟動**上應計創建者費用的掃除。抽乾每個創建者的費用金庫，而非每個池的費用金庫。

**參數** — 無。

**帳戶**

| # | 名稱                         | 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`；`creator` 在 `quote_mint` 上的 ATA。 |
| 5 | `quote_mint`               |   |   |                                                   |
| 6 | `token_program`            |   |   |                                                   |
| 7 | `system_program`           |   |   | 若需要用於 ATA 建立。                                     |
| 8 | `associated_token_program` |   |   |                                                   |

**效果** — 轉帳 `creator_fee_vault` 的全部餘額到 `recipient_token_account`。如果金庫為空，以大於零檢查復原。

## `ClaimPlatformFee`

每個平台的掃除，直接抽乾啟動的報價金庫。在平台想為一個特定啟動索取其份額而不通過聚合平台金庫時使用。

**參數** — 無。

**帳戶**

| #  | 名稱                         | 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`；`platform_fee_wallet` 的 ATA。 |
| 7  | `quote_mint`               |   |   |                                               |
| 8  | `token_program`            |   |   |                                               |
| 9  | `system_program`           |   |   |                                               |
| 10 | `associated_token_program` |   |   |                                               |

**效果** — 從 `quote_vault` 轉帳 `pool_state.platform_fee` 到 `recipient_token_account`，將計數器置零。

## `ClaimPlatformFeeFromVault`

每個平台的聚合掃除。抽乾平台的每個報價鑄幣廠費用金庫，該金庫從每個通過平台路由的啟動累積費用。

**參數** — 無。

**帳戶**

| # | 名稱                         | 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`；`platform_fee_wallet` 的 ATA。 |
| 6 | `quote_mint`               |   |   |                                               |
| 7 | `token_program`            |   |   |                                               |
| 8 | `system_program`           |   |   |                                               |
| 9 | `associated_token_program` |   |   |                                               |

**效果** — 轉帳 `platform_fee_vault` 的全部餘額到 `recipient_token_account`。如果金庫為空則復原。

## 解鎖和平台設定指令

這些記錄在專門的頁面上，因為每個都有其自己的狀態模型：

* [`CreateVestingAccount`、`CreatePlatformVestingAccount`、`ClaimVestedToken`](/zh-Hant/products/launchlab/vesting)
* [`CreatePlatformConfig`、`UpdatePlatformConfig`、`UpdatePlatformCurveParam`、`RemovePlatformCurveParam`、`CreatePlatformGlobalAccess`、`ClosePlatformGlobalAccess`](/zh-Hant/products/launchlab/platform-config)
* [`CreateConfig`、`UpdateConfig`](/zh-Hant/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`              |

## 接下來去哪裡

* [`products/launchlab/code-demos`](/zh-Hant/products/launchlab/code-demos) — 每個指令的 TypeScript 範例。
* [`products/launchlab/accounts`](/zh-Hant/products/launchlab/accounts) — 完整狀態形狀。
* [`reference/error-codes`](/zh-Hant/reference/error-codes) — LaunchLab 錯誤列舉。

來源：

* [Raydium SDK v2 `LaunchLab` 模組](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium LaunchLab 程式原始碼
