> ## 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 账户

> PoolState（每次启动的根账户）、基础和报价保险库、权限 PDA，以及每次启动的账户图。协议级 GlobalConfig 和平台级 PlatformConfig 在各自的页面。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

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

<Info>
  本页文档说明**每次启动**的账户图：`PoolState`（一次启动的根状态账户）、其两个保险库、权限 PDA，以及启动结算时获得的毕业后引用。

  关于限制每次启动的协议级配置，请参见 [`products/launchlab/global-config`](/zh/products/launchlab/global-config)。关于平台级覆盖，请参见 [`products/launchlab/platform-config`](/zh/products/launchlab/platform-config)。关于解锁账户（`PoolState` 上的 `VestingSchedule`、每位受益人的 `VestingRecord`），请参见 [`products/launchlab/vesting`](/zh/products/launchlab/vesting)。
</Info>

## 账户清单

| 账户                                                         | 所有者                    | 用途                                                             |
| ---------------------------------------------------------- | ---------------------- | -------------------------------------------------------------- |
| [`GlobalConfig`](/zh/products/launchlab/global-config)     | LaunchLab 程序           | 协议级规则：费用、供应下限、迁移钱包。每个 `(curve_type, index)` 一个。                |
| [`PlatformConfig`](/zh/products/launchlab/platform-config) | LaunchLab 程序           | 平台级覆盖：品牌、平台费用、毕业时的 NFT 分割、曲线形状白名单。                             |
| `PoolState`                                                | LaunchLab 程序           | 每次启动的根状态：铸币、保险库、曲线参数、销售计数器、费用计数器、解锁计划、毕业状态。                    |
| `authority`                                                | LaunchLab 程序           | 使用种子 `[b"vault_auth_seed"]` 派生的单一 PDA，拥有所有启动中的保险库，并签署毕业后的 CPI。 |
| `base_vault`                                               | SPL Token / Token-2022 | 每次启动的保险库，持有未售出的基础代币。                                           |
| `quote_vault`                                              | SPL Token              | 每次启动的保险库，持有累积的报价代币。                                            |
| [`VestingRecord`](/zh/products/launchlab/vesting)          | LaunchLab 程序           | 每位受益人的悬崖期 + 线性解锁记录。可选。                                         |
| `creator_fee_vault`                                        | SPL Token              | 每位创建者 + 每种报价铸币的保险库，持有应计创建者费用，由 `ClaimCreatorFee` 清扫。           |
| `platform_fee_vault`                                       | SPL Token              | 每个平台 + 每种报价铸币的保险库，持有应计平台费用，由 `ClaimPlatformFeeFromVault` 清扫。   |
| （毕业后）`cpmm_pool_state` *或* `amm_pool_state`                | CPMM / AMM v4 程序       | 由 `MigrateToCpswap` / `MigrateToAmm` 创建的池。                     |
| （毕业后）Fee Key NFT                                           | LP-Lock 程序             | 包装创建者在 CPMM 毕业时的 LP 份额；赋予持有人在 CPMM 池上 `ClaimCreatorFee` 的权利。   |

SDK 的 `raydium.launchpad.getLaunchById` 返回 `PoolState` 以及指示启动是否已毕业的标志；如果已毕业，则包含迁移后的池 ID。

## `PoolState`

每次启动的根状态。下面的字段名与链上 Rust 结构（`states/pool.rs`）匹配；为便于阅读，某些值已简化——有关确切的内存布局，请参阅源代码。

```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
}
```

`PoolStatus` 值（来自 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
```

面向集成者的字段：

* **`status`** — 三个值，单调的（Funding → Migrate → Migrated）。读取始终安全；写入受保护。
* **`real_base`**、**`real_quote`** — 当前曲线状态。结合 `virtual_base` / `virtual_quote`，它们足以计算现货价格，无需触及保险库。参见 [`bonding-curve`](/zh/products/launchlab/bonding-curve)。
* **`total_base_sell`** vs `real_base` — 用于 UI 的"毕业进度"比率。
* **`migrate_type`** — 选择 `MigrateToAmm` 或 `MigrateToCpswap` 是否为有效的毕业路径。Token-2022 启动必须使用 CPMM。
* **`amm_creator_fee_on`** — 仅在毕业到 CPMM 时有意义。在毕业后的 CPMM 池上选择 `creator_fee_on = OnlyQuoteToken`（`0`）或 `BothToken`（`1`）。*尽管名称如此，该枚举实际上也驱动迁移目标——在当前的操作实践中，`BothToken` 与 `MigrateToAmm` 配对；`QuoteToken` 与 `MigrateToCpswap` 配对。* 参见 [`creator-fees`](/zh/products/launchlab/creator-fees)。
* **`quote_protocol_fee` / `platform_fee` / `migrate_fee`** — 三个独立的费用计数器。每个都有自己的领取指令；参见 [`instructions`](/zh/products/launchlab/instructions)。
* **`vesting_schedule`** — 存在于每个 `PoolState` 上，但当 `total_locked_amount == 0` 时不活跃。参见 [`vesting`](/zh/products/launchlab/vesting) 了解完整的生命周期。

## 权限 PDA

LaunchLab 在所有启动中使用**单一**权限 PDA，不带每次启动的种子派生：

```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 是：

* 每次启动的 `base_vault` 和 `quote_vault` 的权限。
* 每次启动的 `base_mint` 的 `mint_authority`（毕业前）。
* 毕业后 CPI 到 AMM v4 / CPMM（`MigrateTo*`）的签署者。
* `ClaimVestedToken` 转账出基础保险库的签署者。

`mint_authority` 在 `MigrateToAmm` / `MigrateToCpswap` 之后立即被吊销，以便永久固定供应。

两个额外的 PDA 限制费用保险库：

```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,
);
```

这些在 `ClaimCreatorFee` 和 `ClaimPlatformFeeFromVault` 期间签署相应费用保险库的转账。

## 基础铸币

由 `Initialize` 以下列方式创建：

* `mint_authority = authority`（在毕业时吊销）。
* `freeze_authority = None`。
* `supply = supply`，完全铸造到 `base_vault`。
* `decimals` 由创建者在 `Initialize` 时选择（通常为 6）。

因为完整供应是预铸造的，`base_mint.supply` 在启动生命周期内是常数。曲线购买将代币从 `base_vault` 移动到买方，但不调用 `mint_to`。

`Initialize` / `InitializeV2` 创建 SPL Token 启动。专用的 `InitializeWithToken2022` 指令允许基础铸币是 Token-2022 铸币（带有可选的 `TransferFeeConfig`）；报价铸币仍然是 SPL Token。Token-2022 启动必须毕业到 CPMM 池，因为 AMM v4 仅支持 SPL Token 保险库。

## 保险库

`base_vault` 和 `quote_vault` 都是由 LaunchLab `authority` PDA 拥有的标准 SPL Token 账户。地址存储在 `PoolState` 上，也可以派生：

```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,
);
```

（在生产中依赖派生之前，请从源的 `Initialize` 账户结构验证确切的种子前缀。）

## 费用保险库

两个 PDA 跨启动聚合费用：

* **创建者费用保险库** — PDA，种子为 `[creator, quote_mint]`。每次为同一创建者在同一报价铸币上赚取费用的启动都流入同一保险库。创建者通过 `ClaimCreatorFee` 清扫它。
* **平台费用保险库** — PDA，种子为 `[platform_config, quote_mint]`。每次通过同一平台使用同一报价铸币的启动都流入同一保险库。平台的 `platform_fee_wallet` 通过 `ClaimPlatformFeeFromVault` 清扫它。还有一个每次启动的清扫变体（`ClaimPlatformFee`），直接从启动的 `quote_vault` 中提取，无需通过聚合保险库。

聚合保险库模式使高交易量的创建者或平台能够摊销费用累积的租金成本，跨许多启动。

## Quote vault ↔ `real_quote`

`quote_vault.balance` 和 `PoolState.real_quote` 应保持同步。它们最多可能漂移三个待处理费用计数器之和（`quote_protocol_fee`、`platform_fee`、`migrate_fee`），这些费用坐在保险库中，但属于费用计数器而非曲线储备。曲线数学始终使用 `real_quote`，从不使用原始保险库余额。

毕业前不变式：

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

## 生命周期账户转换

| 事件                                      | 状态                           | `real_base` | `real_quote`            | 毕业后池                                         |
| --------------------------------------- | ---------------------------- | ----------- | ----------------------- | -------------------------------------------- |
| `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 | （冻结）        | （冻结）                    | 已创建，LP 根据 `PlatformConfig` 分割                |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | any                          | —           | —                       | 清扫费用保险库                                      |
| `CreateVestingAccount`                  | Funding                      | —           | —                       | 凸起 `vesting_schedule.allocated_share_amount` |
| `ClaimVestedToken`                      | Migrated only                | —           | —                       | 清扫 `base_vault`                              |

## 接下来去哪里

* [`products/launchlab/bonding-curve`](/zh/products/launchlab/bonding-curve) — `real_base` ↔ `real_quote` 背后的数学。
* [`products/launchlab/instructions`](/zh/products/launchlab/instructions) — 每条指令的账户列表。
* [`products/launchlab/global-config`](/zh/products/launchlab/global-config) — 协议级绑定。
* [`products/launchlab/platform-config`](/zh/products/launchlab/platform-config) — 平台覆盖。
* [`products/launchlab/vesting`](/zh/products/launchlab/vesting) — 锁定供应机制。
* [`products/cpmm/accounts`](/zh/products/cpmm/accounts) — 毕业后的 `cpmm_pool_state` 是什么样的。

来源：

* `raydium-launch/programs/launchpad/src/states/pool.rs` — `PoolState`、`PoolStatus`、`VestingSchedule`、`AmmCreatorFeeOn`。
* `raydium-launch/programs/launchpad/src/lib.rs` — PDA 种子常数（`AUTH_SEED`、`CREATOR_FEE_VAULT_AUTH_SEED`、`PLATFORM_FEE_VAULT_AUTH_SEED`）。
* [Raydium SDK v2 `launchpad` 模块](https://github.com/raydium-io/raydium-sdk-V2)。
