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

# Hướng dẫn lệnh LaunchLab

> Initialize, Buy, Sell, Graduate, CollectFees, SetParams — hình dáng đối số, danh sách tài khoản và điều kiện trước/sau cho mỗi lệnh LaunchLab.

<Info>
  **Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.**

  [Xem bản tiếng Anh →](/products/launchlab/instructions)
</Info>

<Info>
  LaunchLab cung cấp một bộ lệnh chặt chẽ: sáu lệnh công khai cộng với một số lệnh quản trị. SDK bao bọc tất cả chúng; trang này tài liệu hóa bề mặt thô cho các bộ tổng hợp, công cụ giám sát và các chương trình cần CPI.
</Info>

## Danh sách lệnh

| Nhóm                    | Lệnh                                                       | Có thể gọi bởi                                                                                                                                                              |
| ----------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cấu hình toàn cục       | `CreateConfig` / `UpdateConfig`                            | Admin                                                                                                                                                                       |
| Chu kỳ khởi chạy        | `Initialize` / `InitializeV2`                              | Bất kỳ ai (người tạo) — khởi chạy SPL Token; V2 ghi lại `amm_creator_fee_on` cho việc tốt nghiệp CPMM tiếp theo                                                             |
| Chu kỳ khởi chạy        | `InitializeWithToken2022`                                  | Bất kỳ ai (người tạo) — khởi chạy Token-2022, tùy chọn `TransferFeeConfig`                                                                                                  |
| Giao dịch               | `BuyExactIn` / `BuyExactOut`                               | Bất kỳ ai — mua chính xác-đầu vào / chính xác-đầu ra trên đường cong liên kết                                                                                               |
| Giao dịch               | `SellExactIn` / `SellExactOut`                             | Bất kỳ ai — bán chính xác-đầu vào / chính xác-đầu ra trên đường cong liên kết                                                                                               |
| Tốt nghiệp              | `MigrateToAmm`                                             | Ví di chuyển (được đặt trên `GlobalConfig`) — tốt nghiệp sang AMM v4. Được sử dụng khi `amm_creator_fee_on = BothToken` để có thể thu phí người tạo ở cả hai phía.          |
| Tốt nghiệp              | `MigrateToCpswap`                                          | Ví di chuyển — tốt nghiệp sang CPMM. Được sử dụng khi `amm_creator_fee_on = QuoteToken` và bắt buộc cho khởi chạy Token-2022. Bao bọc `InitializeWithPermission` trên CPMM. |
| Phí                     | `CollectFee`                                               | Admin — quét phí giao thức từ một khởi chạy                                                                                                                                 |
| Phí                     | `CollectMigrateFee`                                        | Admin — quét phí di chuyển tích lũy                                                                                                                                         |
| Phí                     | `ClaimCreatorFee`                                          | Người tạo — yêu cầu phí người tạo tích lũy trong giai đoạn đường cong                                                                                                       |
| Thực thi                | `CreateVestingAccount`                                     | Người tạo — phân bổ mã thông báo bị khóa cho một người thụ hưởng, được mở khóa sau khi tốt nghiệp                                                                           |
| Thực thi                | `CreatePlatformVestingAccount`                             | Admin nền tảng — phân bổ mã thông báo bị khóa cho những người thụ hưởng phía nền tảng                                                                                       |
| Thực thi                | `ClaimVestedToken`                                         | Người thụ hưởng — yêu cầu mã thông báo được mở khóa sau vách đá                                                                                                             |
| Cấu hình nền tảng       | `CreatePlatformConfig` / `UpdatePlatformConfig`            | Admin nền tảng                                                                                                                                                              |
| Cấu hình nền tảng       | `UpdatePlatformCurveParam` / `RemovePlatformCurveParam`    | Admin nền tảng — quản lý danh sách các hình dáng đường cong được phép trên nền tảng                                                                                         |
| Phí nền tảng            | `ClaimPlatformFee` / `ClaimPlatformFeeFromVault`           | Admin nền tảng                                                                                                                                                              |
| Quyền truy cập nền tảng | `CreatePlatformGlobalAccess` / `ClosePlatformGlobalAccess` | Admin — kiểm soát những nền tảng nào có thể sử dụng `GlobalConfig` nhất định                                                                                                |

Việc chia tách "ExactIn/ExactOut" phản ánh `SwapBaseInput` / `SwapBaseOutput` của CPMM — trên chuỗi chúng là các bộ phân biệt lệnh riêng biệt với làm tròn hơi khác nhau.

**Lựa chọn đường dẫn tốt nghiệp.** `migrate_type` được ghi lại trên `PoolState` tại thời điểm `Initialize{V2,WithToken2022}` và xác định lệnh tốt nghiệp nào có thể chạy. Khởi chạy Token-2022 luôn di chuyển sang CPMM. Khởi chạy SPL Token di chuyển sang AMM v4 hoặc CPMM tùy thuộc vào cài đặt `amm_creator_fee_on`:

* `BothToken` → `MigrateToAmm` → nhóm AMM v4 (phí người tạo có thể được thu từ cả hai phía; AMM v4 không có trường phí người tạo gốc, vì vậy phí người tạo được lấy thông qua cơ chế khóa LP NFT thay thế).
* `QuoteToken` → `MigrateToCpswap` → nhóm CPMM với `creator_fee_on = OnlyQuoteToken` (người tạo tiếp tục kiếm phí từ nhóm CPMM thông qua LaunchLab Fee Key NFT — xem [`products/launchlab/creator-fees`](/vi/products/launchlab/creator-fees)).

<Tip>
  **Ghi chú về tên enum `AmmCreatorFeeOn`.** Mã nguồn Rust gọi enum này là `AmmCreatorFeeOn` với các biến thể `QuoteToken` và `BothToken`. Tên gọi này gây hiểu nhầm: trong thực tế hoạt động hiện tại, biến thể không chỉ kiểm soát phía nào phí người tạo được thu từ trên nhóm CPMM sau khi tốt nghiệp — nó cũng chọn **chương trình mục tiêu** tốt nghiệp (AMM v4 so với CPMM) và kết hợp với `migrate_type` trên `PoolState` của khởi chạy. Hãy coi trường này là "mục tiêu di chuyển + phía phí người tạo sau khi tốt nghiệp" được ghép lại với nhau. Tên enum trên chuỗi chưa được tái cấu trúc, nhưng suy luận về nó như `MigrationTarget` khớp với thực tế chặt chẽ hơn.
</Tip>

## `Initialize`

Tạo một khởi chạy mới.

**Đối số**

```
launch_params: {
    curve_type:                 u8,
    base_supply_max:            u64,
    base_supply_graduation:     u64,
    k:                          u128,              // hoặc initial_virtual_quote_reserve cho curve_type=1
    open_time:                  u64,
    quote_mint:                 Pubkey,
    base_token_metadata: {                         // tên/ký hiệu/uri inline; chương trình CPI sang 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
}
```

**Tài khoản** (tóm tắt)

| #  | Tên                | W | S | Ghi chú                                        |
| -- | ------------------ | - | - | ---------------------------------------------- |
| 1  | `creator`          | W | S | Trả tiền thuê + tạo mint cơ bản.               |
| 2  | `launch_config`    |   |   | Liên kết cấu hình giao thức.                   |
| 3  | `launch_state`     | W |   | Tài khoản mới.                                 |
| 4  | `launch_authority` |   |   | PDA.                                           |
| 5  | `base_mint`        | W | S | Keypair mới (hoặc PDA) — lệnh này khởi tạo nó. |
| 6  | `base_vault`       | W |   | ATA của `launch_authority` trên `base_mint`.   |
| 7  | `quote_mint`       |   |   |                                                |
| 8  | `quote_vault`      | W |   | ATA của `launch_authority` trên `quote_mint`.  |
| 9  | `metadata`         | W |   | PDA siêu dữ liệu Metaplex.                     |
| 10 | `metaplex_program` |   |   |                                                |
| 11 | `token_program`    |   |   | Chỉ SPL Token.                                 |
| 12 | `system_program`   |   |   |                                                |
| 13 | `rent`             |   |   |                                                |

**Điều kiện trước**

* `quote_mint ∈ launch_config.allowed_quote_mints`.
* `base_supply_graduation ≤ base_supply_max`.
* Các tham số phí vượt qua kiểm tra `launch_config.max_*_fee_rate`.
* `open_time ≥ now − slop` (SDK thực thi `≥ now`; chương trình chấp nhận backdating nhẹ).
* `curve_type` được công nhận.

**Điều kiện sau**

* `base_mint` có `supply = base_supply_max`, tất cả trong `base_vault`.
* `base_mint.mint_authority = launch_authority`, `freeze_authority = None`.
* `LaunchState` khởi tạo với `status = Active`, `base_sold = 0`, `quote_reserve_real = 0`.
* `quote_reserve_target` được tính toán từ các tham số đường cong + `base_supply_graduation` + `buy_numerator` (xấp xỉ).

**Lỗi phổ biến** — `InvalidQuoteMint`, `FeeRateTooHigh`, `InvalidCurveParams`, `MathOverflow`.

## `Buy` (biến chính tắc: `BuyExactIn`)

Người dùng cung cấp `quote_in` cố định; đường cong tính toán `base_out`.

**Đối số**

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

**Tài khoản**

| #  | Tên                        | 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`           |   |   |

**Điều kiện trước**

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

**Hiệu ứng**

1. Chia `quote_in` thành `quote_in_after_fee` và các phần phí.
2. Giải quyết Newton đường cong cho `base_out` dựa trên quote sau phí.
3. `require(base_out ≥ minimum_base_out)` nếu không quay lại `ExceededSlippage`.
4. Di chuyển `quote_in` người dùng → kho. Di chuyển `base_out` kho → người dùng.
5. Cập nhật `base_sold += base_out`, `quote_reserve_real += quote_in_after_fee × (lp_share / total_share)`.
6. Cập nhật bộ đếm phí (`protocol_fees_quote`, `creator_fees_quote`).
7. `state_data.num_buys += 1`.
8. Nếu `quote_reserve_real ≥ quote_reserve_target` sau bản cập nhật, SDK thường chuỗi lệnh `Graduate` trong cùng một giao dịch. Chương trình không tự động tốt nghiệp bên trong `Buy` — cần một `Graduate` tiếp theo.

## `BuyExactOut`

Người dùng chỉ định `base_out` chính xác; chương trình tính toán `quote_in`.

**Đối số**

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

Cùng các tài khoản như `BuyExactIn`. Sử dụng tích phân bậc hai dạng đóng (hoặc nghịch đảo CPMM, cho curve\_type 1) thay vì lặp lại Newton.

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

Gương chiếu của `Buy`. Người dùng trả `base_in` lại cho đường cong và nhận `quote_out`. Phí được khấu trừ từ `quote_out`, vì vậy người dùng nhận được ít hơn các khoản tiền tích lũy thô.

**Điều kiện trước** —

* `user_base_ata.balance ≥ base_in`.
* Bán không thể đẩy `base_sold` xuống dưới 0 (dư thừa với điều trên vì kế toán nhất quán).
* Khởi chạy là `Active`.

**Hiệu ứng** — đối xứng với `Buy`. `base_sold` giảm, `quote_reserve_real` giảm. Phí vẫn tích lũy.

## `MigrateToAmm` / `MigrateToCpswap`

Tốt nghiệp một khởi chạy thành một nhóm AMM giao dịch được khi đường cong đạt `total_quote_fund_raising`. Hai lệnh tương ứng với hai mục tiêu tốt nghiệp — AMM v4 và CPMM — và **chỉ một trong hai có hiệu lực cho bất kỳ khởi chạy nào**, được xác định bởi `pool_state.migrate_type` (được đặt tại thời điểm `Initialize`).

**Ai ký**

* `MigrateToAmm` — `migrate_to_amm_wallet` được ghi lại trên `GlobalConfig` liên kết.
* `MigrateToCpswap` — `migrate_to_cpswap_wallet` được ghi lại trên `GlobalConfig` liên kết.

Những ví này thường được giữ bởi crank tốt nghiệp do Raydium vận hành; trong thực tế tốt nghiệp hạ cánh vài giây sau khi ngưỡng được vượt qua, bất kể ai kích hoạt lần mua cuối cùng.

**Đối số**

`MigrateToAmm` có ba (chủ yếu là các tham số thị trường OpenBook mà chương trình chuyển tiếp sang AMM v4):

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

`MigrateToCpswap` không có.

**Hiệu ứng (chung cho cả hai)**

1. Xác minh `pool_state.status == Migrate` (tức là `quote_reserve_target` đã được đạt). Nếu không quay lại với `PoolMigrated` (trạng thái đã là `Migrated`) hoặc `PoolFunding` (vẫn đang tài trợ).
2. Xác minh `pool_state.migrate_type` khớp với lệnh (`0` cho AMM, `1` cho CPMM). Nếu không quay lại với `MigrateTypeNotMatch`.
3. Tính toán dự trữ sau khi tốt nghiệp:
   * `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 vào chương trình mục tiêu (`AMM v4 Initialize2` hoặc `CPMM InitializeWithPermission`) với những dự trữ đó để tạo nhóm sau khi tốt nghiệp.
5. Chia LP kết quả theo `PlatformConfig.{platform_scale, creator_scale, burn_scale}` liên kết (chỉ CPMM) — một phần được đúc thành `platform_nft_wallet`, một phần thành NFT người tạo được bao bọc bởi chương trình LP-Lock, một phần được đốt qua Burn & Earn. Đối với tốt nghiệp AMM v4, quy định LP được quản lý bởi các tham số khởi tạo của AMM v4.
6. Thu hồi `base_mint.mint_authority` (đặt thành `None`).
7. Lật `pool_state.status = Migrated`, đặt `vesting_schedule.start_time = block_time + cliff_period`.

**Điều kiện sau** — `BuyExactIn`, `BuyExactOut`, `SellExactIn`, `SellExactOut` sẽ từ chối từ điểm này trở đi với `PoolMigrated`. Nhóm AMM kết quả là chính tắc và giao dịch giống như bất kỳ nhóm AMM v4 / CPMM nào khác.

**Lỗi phổ biến** — `PoolFunding`, `PoolMigrated`, `MigrateTypeNotMatch`, `InvalidCpSwapConfig`, `MathOverflow`.

## `CollectFee`

Quét quản trị viên phí giao dịch tích lũy của giao thức trên một khởi chạy duy nhất.

**Đối số** — không có.

**Tài khoản**

| # | Tên                       | W | S | Ghi chú                                         |
| - | ------------------------- | - | - | ----------------------------------------------- |
| 1 | `protocol_fee_owner`      |   | S | Phải bằng `global_config.protocol_fee_owner`.   |
| 2 | `authority`               |   |   | PDA `[b"vault_auth_seed"]`; ký chuyển kho.      |
| 3 | `pool_state`              | W |   | Biến đổi để zeroing `quote_protocol_fee`.       |
| 4 | `global_config`           |   |   | Nguồn sự thật cho người ký.                     |
| 5 | `quote_vault`             | W |   | Được thoát bởi `quote_protocol_fee`.            |
| 6 | `recipient_token_account` | W |   | ATA của `protocol_fee_owner` trên `quote_mint`. |
| 7 | `quote_mint`              |   |   |                                                 |
| 8 | `token_program`           |   |   | SPL Token (quote mint luôn là SPL Token).       |

**Hiệu ứng** — chuyển `pool_state.quote_protocol_fee` từ `quote_vault` sang `recipient_token_account`, sau đó zeroing bộ đếm. Có thể gọi bất kỳ lúc nào sau lần mua đầu tiên.

## `CollectMigrateFee`

Quét quản trị viên phí di chuyển tích lũy tại thời điểm tốt nghiệp. Hình dạng tài khoản tương tự như `CollectFee` với `migrate_fee_owner` làm người ký (thay vì `protocol_fee_owner`) và `pool_state.migrate_fee` làm bộ đếm được thoát.

## `ClaimCreatorFee`

Quét mỗi người tạo của phí người tạo tích lũy trên **mọi khởi chạy mà người tạo sở hữu** sử dụng cùng một quote mint. Thoát kho phí trên mỗi người tạo, không phải kho phí trên mỗi nhóm.

**Đối số** — không có.

**Tài khoản**

| # | Tên                        | W | S | Ghi chú                                                       |
| - | -------------------------- | - | - | ------------------------------------------------------------- |
| 1 | `creator`                  | W | S | Người tạo nhóm.                                               |
| 2 | `fee_vault_authority`      |   |   | PDA `[b"creator_fee_vault_auth_seed"]`.                       |
| 3 | `creator_fee_vault`        | W |   | PDA tại seed `[creator, quote_mint]`; kho người tạo tổng hợp. |
| 4 | `recipient_token_account`  | W |   | `init_if_needed`; ATA của `creator` trên `quote_mint`.        |
| 5 | `quote_mint`               |   |   |                                                               |
| 6 | `token_program`            |   |   |                                                               |
| 7 | `system_program`           |   |   | Để tạo ATA nếu cần.                                           |
| 8 | `associated_token_program` |   |   |                                                               |

**Hiệu ứng** — chuyển toàn bộ số dư của `creator_fee_vault` sang `recipient_token_account`. Hoàn lại với kiểm tra require-greater-than-zero nếu kho trống.

## `ClaimPlatformFee`

Quét trên mỗi nền tảng thoát kho quote của khởi chạy trực tiếp. Sử dụng khi một nền tảng muốn yêu cầu phần của nó cho một khởi chạy cụ thể mà không cần truy cập kho nền tảng tổng hợp.

**Đối số** — không có.

**Tài khoản**

| #  | Tên                        | W | S | Ghi chú                                          |
| -- | -------------------------- | - | - | ------------------------------------------------ |
| 1  | `platform_fee_wallet`      | W | S | Phải bằng `platform_config.platform_fee_wallet`. |
| 2  | `authority`                |   |   | PDA `[b"vault_auth_seed"]`.                      |
| 3  | `pool_state`               | W |   | Thoát bởi `pool_state.platform_fee`.             |
| 4  | `platform_config`          |   |   | Nguồn sự thật cho người ký.                      |
| 5  | `quote_vault`              | W |   | Thoát.                                           |
| 6  | `recipient_token_account`  | W |   | `init_if_needed`; ATA của `platform_fee_wallet`. |
| 7  | `quote_mint`               |   |   |                                                  |
| 8  | `token_program`            |   |   |                                                  |
| 9  | `system_program`           |   |   |                                                  |
| 10 | `associated_token_program` |   |   |                                                  |

**Hiệu ứng** — chuyển `pool_state.platform_fee` từ `quote_vault` sang `recipient_token_account`, zeroing bộ đếm.

## `ClaimPlatformFeeFromVault`

Quét tổng hợp trên mỗi nền tảng. Thoát kho phí trên mỗi quote-mint của nền tảng tích lũy phí từ mọi khởi chạy định tuyến qua nền tảng.

**Đối số** — không có.

**Tài khoản**

| # | Tên                        | W | S | Ghi chú                                          |
| - | -------------------------- | - | - | ------------------------------------------------ |
| 1 | `platform_fee_wallet`      | W | S | Phải bằng `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 tại seed `[platform_config, quote_mint]`.    |
| 5 | `recipient_token_account`  | W |   | `init_if_needed`; ATA của `platform_fee_wallet`. |
| 6 | `quote_mint`               |   |   |                                                  |
| 7 | `token_program`            |   |   |                                                  |
| 8 | `system_program`           |   |   |                                                  |
| 9 | `associated_token_program` |   |   |                                                  |

**Hiệu ứng** — chuyển toàn bộ số dư của `platform_fee_vault` sang `recipient_token_account`. Hoàn lại nếu kho trống.

## Hướng dẫn thực thi và cấu hình nền tảng

Các hướng dẫn này được tài liệu hóa trên các trang chuyên dụng vì mỗi hướng dẫn có mô hình trạng thái riêng:

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

## Ma trận thay đổi trạng thái

| Lệnh                                    | `status`   | `real_base` | `real_quote`     | Bộ đếm phí                                     | Kho hàng sau tốt nghiệp            |
| --------------------------------------- | ---------- | ----------- | ---------------- | ---------------------------------------------- | ---------------------------------- |
| `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 | (tương tự)                                     | —                                  |
| Ngưỡng đạt                              | → Migrate  | —           | —                | —                                              | —                                  |
| `MigrateToAmm` / `MigrateToCpswap`      | → Migrated | (đóng băng) | (đóng băng)      | `migrate_fee` được đặt                         | tạo, LP chia theo `PlatformConfig` |
| `CollectFee` / `CollectMigrateFee`      | bất kỳ     | —           | —                | bộ đếm zeroed                                  | —                                  |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | bất kỳ     | —           | —                | kho thoát                                      | —                                  |
| `CreateVestingAccount`                  | Funding    | —           | —                | —                                              | bumps `allocated_share_amount`     |
| `ClaimVestedToken`                      | Migrated   | —           | —                | —                                              | `base_vault` thoát                 |

## Tiếp theo đi đâu

* [`products/launchlab/code-demos`](/vi/products/launchlab/code-demos) — ví dụ TypeScript cho mỗi lệnh.
* [`products/launchlab/accounts`](/vi/products/launchlab/accounts) — hình dáng trạng thái đầy đủ.
* [`reference/error-codes`](/vi/reference/error-codes) — enum lỗi LaunchLab.

Nguồn:

* [Raydium SDK v2 `LaunchLab` module](https://github.com/raydium-io/raydium-sdk-V2)
* Mã nguồn chương trình Raydium LaunchLab
