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

# Tài khoản LaunchLab

> PoolState (tài khoản trạng thái gốc cho mỗi lần phát hành), các vault cơ sở và trích dẫn, PDA quyền hạn, và sơ đồ tài khoản cho mỗi lần phát hành. Cấu hình GlobalConfig cấp giao thức và PlatformConfig cấp nền tảng nằm trên các trang riêng của chúng.

<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/accounts)
</Info>

<Info>
  Trang này tài liệu hóa sơ đồ tài khoản **cho mỗi lần phát hành**: `PoolState` (tài khoản trạng thái gốc cho một lần phát hành), hai vault của nó, PDA quyền hạn, và các tham chiếu sau khi phát hành mà nó nhận được khi lần phát hành được giải quyết.

  Để xem cấu hình cấp giao thức áp dụng cho mỗi lần phát hành, hãy xem [`products/launchlab/global-config`](/vi/products/launchlab/global-config). Để xem lớp phủ cho mỗi nền tảng, hãy xem [`products/launchlab/platform-config`](/vi/products/launchlab/platform-config). Để xem tài khoản vesting (`VestingSchedule` trên `PoolState`, `VestingRecord` cho mỗi người hưởng lợi), hãy xem [`products/launchlab/vesting`](/vi/products/launchlab/vesting).
</Info>

## Danh sách tài khoản

| Tài khoản                                                  | Chủ sở hữu                 | Mục đích                                                                                                                                   |
| ---------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| [`GlobalConfig`](/vi/products/launchlab/global-config)     | Chương trình LaunchLab     | Quy tắc cấp giao thức: phí, mức sàn cung cấp, ví di cư. Một cái cho mỗi `(curve_type, index)`.                                             |
| [`PlatformConfig`](/vi/products/launchlab/platform-config) | Chương trình LaunchLab     | Lớp phủ cho mỗi nền tảng: thương hiệu, phí nền tảng, chia NFT tại khi hoàn tất, danh sách cho phép hình dạng đường cong.                   |
| `PoolState`                                                | Chương trình LaunchLab     | Trạng thái gốc cho mỗi lần phát hành: mint, vault, tham số đường cong, bộ đếm đã bán, bộ đếm phí, lịch trình vesting, trạng thái hoàn tất. |
| `authority`                                                | Chương trình LaunchLab     | PDA đơn lẻ tại seed `[b"vault_auth_seed"]` sở hữu các vault trên tất cả các lần phát hành và ký CPI sau khi hoàn tất.                      |
| `base_vault`                                               | SPL Token / Token-2022     | Vault cho mỗi lần phát hành chứa các token cơ sở chưa bán.                                                                                 |
| `quote_vault`                                              | SPL Token                  | Vault cho mỗi lần phát hành chứa các token trích dẫn tích lũy.                                                                             |
| [`VestingRecord`](/vi/products/launchlab/vesting)          | Chương trình LaunchLab     | Bản ghi cliff + mở khóa tuyến tính cho mỗi người hưởng lợi. Tùy chọn.                                                                      |
| `creator_fee_vault`                                        | SPL Token                  | Vault cho mỗi tác giả + cho mỗi mint trích dẫn chứa các phí tác giả tích lũy, được xóa bởi `ClaimCreatorFee`.                              |
| `platform_fee_vault`                                       | SPL Token                  | Vault cho mỗi nền tảng + cho mỗi mint trích dẫn chứa các phí nền tảng tích lũy, được xóa bởi `ClaimPlatformFeeFromVault`.                  |
| (sau hoàn tất) `cpmm_pool_state` *hoặc* `amm_pool_state`   | Chương trình CPMM / AMM v4 | Pool được tạo bởi `MigrateToCpswap` / `MigrateToAmm`.                                                                                      |
| (sau hoàn tất) Fee Key NFT                                 | Chương trình LP-Lock       | Bao bọc phần LP của tác giả tại khi hoàn tất CPMM; cấp cho chủ sở hữu quyền `ClaimCreatorFee` trên pool CPMM.                              |

SDK's `raydium.launchpad.getLaunchById` trả về `PoolState` cộng với một cờ cho biết liệu lần phát hành đã hoàn tất chưa; nếu có, ID pool sau khi di cư được bao gồm.

## `PoolState`

Trạng thái gốc cho mỗi lần phát hành. Tên trường dưới đây trùng khớp với struct Rust trên chuỗi (`states/pool.rs`); một số giá trị được đơn giản hóa để dễ đọc — tham khảo mã nguồn để biết bố cục bộ nhớ chính xác.

```rust theme={null}
// states/pool.rs (abridged)
pub struct PoolState {
    pub epoch:                     u64,        // recent_epoch tracker
    pub auth_bump:                 u8,
    pub status:                    u8,         // PoolStatus enum
    pub base_decimals:             u8,
    pub quote_decimals:            u8,
    pub migrate_type:              u8,         // 0 = AMM v4, 1 = CPMM
    pub supply:                    u64,        // total base tokens (no decimals)
    pub total_base_sell:           u64,        // base supply allocated to the curve
    pub virtual_base:              u64,        // virtual-reserve seed
    pub virtual_quote:             u64,        // virtual-reserve seed
    pub real_base:                 u64,        // base sold so far
    pub real_quote:                u64,        // quote raised so far (excl. fees)
    pub total_quote_fund_raising:  u64,        // graduation threshold in quote

    pub quote_protocol_fee:        u64,        // accrued, pending CollectFee
    pub platform_fee:              u64,        // accrued, pending ClaimPlatformFee
    pub migrate_fee:               u64,        // accrued, pending CollectMigrateFee
    pub vesting_schedule:          VestingSchedule,

    pub global_config:             Pubkey,
    pub platform_config:           Pubkey,
    pub creator:                   Pubkey,
    pub base_mint:                 Pubkey,
    pub quote_mint:                Pubkey,
    pub base_vault:                Pubkey,
    pub quote_vault:               Pubkey,

    pub amm_creator_fee_on:        u8,         // 0 = QuoteToken, 1 = BothToken (CPMM-only)
    pub token_program_flag:        u8,         // bit flags for SPL Token vs Token-2022
    pub padding:                   [u8; 54],
}

#[derive(Default, Debug, Clone)]
pub struct VestingSchedule {
    pub total_locked_amount:    u64,
    pub cliff_period:           u64,
    pub unlock_period:          u64,
    pub start_time:             u64,           // set at graduation
    pub allocated_share_amount: u64,           // running sum across VestingRecords
}
```

Các giá trị `PoolStatus` (từ Anchor IDL):

```
0 = Funding         — accepting buys / sells; below quote_reserve_target
1 = Migrate         — quote_reserve_target reached; awaiting MigrateTo*
2 = Migrated        — MigrateTo* already executed; vesting clock running
```

Các trường hướng đến người tích hợp:

* **`status`** — ba giá trị, đơn điệu (Funding → Migrate → Migrated). Đọc luôn an toàn; ghi bị gated.
* **`real_base`**, **`real_quote`** — trạng thái đường cong hiện tại. Kết hợp với `virtual_base` / `virtual_quote` chúng đủ để tính giá spot mà không cần chạm vào các vault. Xem [`bonding-curve`](/vi/products/launchlab/bonding-curve).
* **`total_base_sell`** vs `real_base` — tỷ lệ "tiến độ hướng tới hoàn tất" cho UI.
* **`migrate_type`** — lựa chọn `MigrateToAmm` hoặc `MigrateToCpswap` là đường dẫn hoàn tất hợp lệ. Các lần phát hành Token-2022 phải sử dụng CPMM.
* **`amm_creator_fee_on`** — chỉ có ý nghĩa khi hoàn tất đến pool CPMM. Chọn `creator_fee_on = OnlyQuoteToken` (`0`) hoặc `BothToken` (`1`) trên pool CPMM sau hoàn tất. *Mặc dù tên gọi này, enum này cũng thực chất điều khiển mục tiêu di cư — `BothToken` được ghép nối với `MigrateToAmm` trong thực hành hoạt động hiện tại; `QuoteToken` với `MigrateToCpswap`.* Xem [`creator-fees`](/vi/products/launchlab/creator-fees).
* **`quote_protocol_fee` / `platform_fee` / `migrate_fee`** — ba bộ đếm phí độc lập. Mỗi cái có hướng dẫn claim của riêng mình; xem [`instructions`](/vi/products/launchlab/instructions).
* **`vesting_schedule`** — hiện tại trên mỗi `PoolState` nhưng không hoạt động khi `total_locked_amount == 0`. Xem [`vesting`](/vi/products/launchlab/vesting) để biết toàn bộ chu kỳ sống.

## PDA quyền hạn

LaunchLab sử dụng **một** PDA quyền hạn duy nhất trên tất cả các lần phát hành, được dẫn xuất mà không có seed cho mỗi lần phát hành:

```ts theme={null}
const LAUNCHLAB_PROGRAM_ID = new PublicKey("<LAUNCHLAB_ID>"); // see reference/program-addresses

const [authority, bump] = PublicKey.findProgramAddressSync(
  [Buffer.from("vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

PDA đơn lẻ đó là:

* Quyền hạn trên `base_vault` và `quote_vault` của mỗi lần phát hành.
* `mint_authority` trên `base_mint` của mỗi lần phát hành (trước hoàn tất).
* Người ký trên CPI sau hoàn tất đến AMM v4 / CPMM (`MigrateTo*`).
* Người ký trên chuyển `ClaimVestedToken` ra khỏi base vault.

`mint_authority` được thu hồi ngay sau `MigrateToAmm` / `MigrateToCpswap` để cố định vĩnh viễn cung cấp.

Hai PDA bổ sung gated các vault phí:

```ts theme={null}
const [creatorFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("creator_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);

const [platformFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("platform_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

Những người này ký chuyển ra khỏi vault phí tương ứng trong `ClaimCreatorFee` và `ClaimPlatformFeeFromVault`.

## Mint cơ sở

Được tạo inline bởi `Initialize` với:

* `mint_authority = authority` (được thu hồi tại hoàn tất).
* `freeze_authority = None`.
* `supply = supply`, được mint hoàn toàn vào `base_vault`.
* `decimals` được lựa chọn bởi tác giả tại `Initialize` (thường là 6).

Vì toàn bộ cung cấp được pre-mint, `base_mint.supply` là hằng số cho cuộc đời của lần phát hành. Curve buys di chuyển token từ `base_vault` đến người mua, nhưng không gọi `mint_to`.

`Initialize` / `InitializeV2` tạo các lần phát hành SPL Token. Hướng dẫn `InitializeWithToken2022` dành riêng cho phép mint cơ sở là mint Token-2022 (với tùy chọn `TransferFeeConfig`); mint trích dẫn vẫn là SPL Token. Các lần phát hành Token-2022 phải hoàn tất đến pool CPMM vì AMM v4 chỉ hỗ trợ vault SPL Token.

## Vault

Cả `base_vault` và `quote_vault` đều là các tài khoản SPL Token tiêu chuẩn được sở hữu bởi PDA `authority` LaunchLab. Các địa chỉ được lưu trữ trên `PoolState` và cũng có thể được dẫn xuất:

```ts theme={null}
const [baseVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), baseMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
const [quoteVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), quoteMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
```

(Xác minh các tiền tố seed chính xác từ struct tài khoản `Initialize` của mã nguồn trước khi dựa vào dẫn xuất trong production.)

## Vault phí

Hai PDA tổng hợp phí trên tất cả các lần phát hành:

* **Vault phí tác giả** — PDA tại seed `[creator, quote_mint]`. Mỗi lần phát hành kiếm được phí tác giả giống nhau trên cùng một mint trích dẫn đổ vào cùng một vault. Tác giả quét nó qua `ClaimCreatorFee`.
* **Vault phí nền tảng** — PDA tại seed `[platform_config, quote_mint]`. Mỗi lần phát hành được định tuyến qua cùng một nền tảng sử dụng cùng một mint trích dẫn đổ vào cùng một vault. `platform_fee_wallet` của nền tảng quét nó qua `ClaimPlatformFeeFromVault`. Cũng có một biến quét cho mỗi lần phát hành (`ClaimPlatformFee`) kéo từ `quote_vault` của lần phát hành trực tiếp mà không đi qua vault tổng hợp.

Mô hình vault tổng hợp là điều cho phép tác giả hoặc nền tảng có khối lượng cao khấu hao chi phí thuê của sự tích lũy phí trên nhiều lần phát hành.

## Quote vault ↔ `real_quote`

`quote_vault.balance` và `PoolState.real_quote` sẽ ở trong trạng thái đồng bộ. Chúng có thể sai lệch tối đa là tổng của ba bộ đếm phí chưa xử lý (`quote_protocol_fee`, `platform_fee`, `migrate_fee`), chúng nằm trong vault nhưng thuộc về các bộ đếm phí và không phải là dự trữ đường cong. Toán học đường cong luôn sử dụng `real_quote`, không bao giờ là số dư vault thô.

Bất biến trước hoàn tất:

```
quote_vault.balance ==
   real_quote
 + quote_protocol_fee
 + platform_fee
 + migrate_fee
```

## Chuyển đổi tài khoản vòng đời

| Sự kiện                                 | Trạng thái                   | `real_base` | `real_quote`            | Pool sau hoàn tất                               |
| --------------------------------------- | ---------------------------- | ----------- | ----------------------- | ----------------------------------------------- |
| `Initialize`                            | Funding                      | 0           | 0                       | —                                               |
| `BuyExactIn` / `BuyExactOut`            | Funding                      | `+base_out` | `+quote_in_after_fee`   | —                                               |
| `SellExactIn` / `SellExactOut`          | Funding                      | `−base_in`  | `−quote_out_before_fee` | —                                               |
| `MigrateToAmm` / `MigrateToCpswap`      | Funding → Migrate → Migrated | (frozen)    | (frozen)                | được tạo, LP chia theo `PlatformConfig`         |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | bất kỳ                       | —           | —                       | xóa vault phí                                   |
| `CreateVestingAccount`                  | Funding                      | —           | —                       | bumps `vesting_schedule.allocated_share_amount` |
| `ClaimVestedToken`                      | Migrated only                | —           | —                       | xóa `base_vault`                                |

## Bước tiếp theo

* [`products/launchlab/bonding-curve`](/vi/products/launchlab/bonding-curve) — toán học đằng sau `real_base` ↔ `real_quote`.
* [`products/launchlab/instructions`](/vi/products/launchlab/instructions) — danh sách tài khoản cho mỗi hướng dẫn.
* [`products/launchlab/global-config`](/vi/products/launchlab/global-config) — ràng buộc cấp giao thức.
* [`products/launchlab/platform-config`](/vi/products/launchlab/platform-config) — lớp phủ nền tảng.
* [`products/launchlab/vesting`](/vi/products/launchlab/vesting) — cơ học cung cấp bị khóa.
* [`products/cpmm/accounts`](/vi/products/cpmm/accounts) — cái `cpmm_pool_state` sau hoàn tất trông như thế nào.

Nguồn:

* `raydium-launch/programs/launchpad/src/states/pool.rs` — `PoolState`, `PoolStatus`, `VestingSchedule`, `AmmCreatorFeeOn`.
* `raydium-launch/programs/launchpad/src/lib.rs` — hằng số seed PDA (`AUTH_SEED`, `CREATOR_FEE_VAULT_AUTH_SEED`, `PLATFORM_FEE_VAULT_AUTH_SEED`).
* [Mô-đun Raydium SDK v2 `launchpad`](https://github.com/raydium-io/raydium-sdk-V2).
