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

> 通过 LaunchLab 的端到端代币启动流程：选择曲线类型、初始配置、监控毕业前的融资曲线活动，以及验证已毕业的 CPMM 池。

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

  [查看英文版 →](/user-flows/launch-token-launchlab)
</Info>

<Info>
  LaunchLab 是 Raydium 的一级市场启动平台。项目将其代币供应存入融资曲线；买家使用 SOL（或其他计价资产）与曲线交易；当达到毕业阈值时，曲线的资产自动迁移到 CPMM 池，代币变成自由交易状态。本页从项目方的角度介绍完整的流程。
</Info>

## 你需要准备

* **代币铸造地址** — 你要出售的代币。必须是新铸造的，且满足：
  * 全部供应量已铸造到你的钱包（以便存入曲线）。
  * 在启动前已撤销铸造权限（否则可以通过新增铸造来操纵曲线价格）。
* **元数据** — 名称、符号、图片、社交链接等。遵循 Metaplex 元数据或类似标准。
* **钱包** — 约 1 SOL 用于创建租金 + 金库资金 + 优先费用（毕业本身由毕业人支付，不由你支付）。
* **做出以下决定**：
  * 曲线类型（二次曲线 vs 虚拟准备金 CPMM）。
  * 毕业阈值。
  * LP 处理政策（销毁 / 锁定 / 转给创建者）。
  * 初始价格和上限。

## 曲线选择

LaunchLab 支持两种曲线系列：

### 二次曲线（`curve_type = 0`）

价格随售出供应量二次增长。经典的"公平启动"风格 — 早期买家获得价格优势，后期买家支付更多，价格平稳加速。

```
price(s) = a * s^2 + b * s + c
```

其中 `s` 是售出的供应量。通常 `a > 0`（凸函数）。初始价格和毕业价格之间的差异由 `a, b, c` 和上限决定。

最适合：新奇启动、迷因币、社区驱动项目。

### 虚拟准备金 CPMM（`curve_type = 1`）

使用*虚拟*准备金模拟常数乘积 AMM — 曲线表现像一个 CPMM，满足 `x * y = k`，但池从未被提取的合成代币开始。

```
price = virtual_quote_reserve / virtual_base_reserve
```

买家购买时，`virtual_base_reserve` 减少，`virtual_quote_reserve` 增加 — 曲线看起来与毕业后的 CPMM 完全相同。过渡更平稳。

最适合：希望毕业后价格连续性可预测的启动。

## UI 演练

在 [raydium.io/launchpad/create](https://raydium.io/launchpad/create)：

1. **代币。** 粘贴铸造地址。UI 获取元数据并显示。

2. **曲线类型。** 选择二次曲线或虚拟 CPMM；UI 为各自显示价格图表预览。

3. **毕业阈值。** 默认：曲线在售出全部 `total_base_supply` 后结束。替代方案：在特定 `graduation_quote_amount`（例如 85 SOL）时结束。

4. **计价资产。** SOL（默认）、USDC 或任何其他资产。SOL 是标准选择。

5. **LP 处理政策：**

   * **销毁** — LP 代币在毕业时发送到无法使用的地址。创建者无法提取流动性；用户永久信任该池。
   * **锁定** — LP 代币发送到时间锁定托管，锁定期为 `lock_duration`。
   * **转给创建者** — LP 代币发送给创建者。最灵活，信任度最低。

   受尊重的启动通常使用销毁。

6. **检查。** UI 总结：预期价格范围、曲线售出所有代币的初始募资额、毕业 CPMM 配置。

7. **签署。** 一笔交易创建启动状态 + 基础金库 + 计价金库，从你的钱包转移 `total_base_supply` 到基础金库。

## 程序化演练

```ts theme={null}
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
import { PublicKey } from "@solana/web3.js";
import BN from "bn.js";

const raydium = await Raydium.load({ connection, owner, cluster: "mainnet" });

const baseMint  = new PublicKey("MyNewToken...");
const quoteMint = new PublicKey("So11111111111111111111111111111111111111112"); // SOL

const { execute, extInfo } = await raydium.launchpad.createLaunchpad({
  programId:      LAUNCHPAD_PROGRAM_ID,
  baseMint,
  quoteMint,
  curveType:      0,                           // quadratic
  totalBaseSupply:    new BN("1000000000000000000"),   // 1B tokens with 9 decimals
  graduationQuoteAmount: new BN("85000000000"),         // 85 SOL
  lpDisposalPolicy:   "Burn",
  priceCurveParams: {
    a: new BN("1"),
    b: new BN("0"),
    c: new BN("0"),
  },
  startTime: new BN(Math.floor(Date.now() / 1000) + 300),  // start in 5 min
  txVersion: TxVersion.V0,
  computeBudgetConfig: { units: 400_000, microLamports: 50_000 },
});

const { txId } = await execute({ sendAndConfirm: true });
console.log("Launch ID:", extInfo.launchId.toBase58());
console.log("Base vault:", extInfo.baseVault.toBase58());
console.log("Quote vault:", extInfo.quoteVault.toBase58());
```

## 毕业前的监控

通过 API 追踪活动：

```ts theme={null}
const status = await fetch(
  `https://api-v3.raydium.io/launchpad/status?launchId=${launchId}`
).then(r => r.json());

console.log("Sold so far:",       status.baseSold.toString());
console.log("Quote raised:",      status.quoteRaised.toString());
console.log("Current price:",     status.currentPriceUsd);
console.log("Graduation progress:", status.graduationProgress, "%");
```

或直接解码链上状态：

```ts theme={null}
const launchState = await raydium.launchpad.fetchLaunchState(launchId);
console.log({
  baseSold:   launchState.baseSold.toString(),
  quoteHeld:  launchState.quoteHeld.toString(),
  graduated:  launchState.graduated,
});
```

### 关键指标

* **售出率**：售出的基础代币百分比。毕业阈值通常在 80–100% 售出时。
* **当前价格**：从曲线在当前 `baseSold` 位置推导。
* **独特买家**：通过索引器统计的不同付款人数量。
* **买卖比例**：早期启动看到大量买压，之后放缓。

如果 24 小时后售出率 `<10%`，考虑营销是否充分。LaunchLab 不会拯救宣传不足的启动。

## 毕业

毕业是一个单独的交易，任何人都可以调用（通常是第一个注意到阈值已达成的人获得小额 `graduation_bounty`）。作为创建者，除了初始设置外，你不需要采取任何行动。

### 毕业做什么

1. 读取金库余额。
2. 关闭曲线（不再允许买卖）。
3. 创建新的 CPMM 池，使用金库余额作为初始流动性。
4. 根据金库余额铸造初始 LP 代币。
5. 根据配置的政策处置 LP 代币（销毁 / 锁定 / 转给创建者）。

毕业后，CPMM 池上线，通过正常的 Raydium 路由进行交易。

### 监控毕业

```ts theme={null}
const launchState = await raydium.launchpad.fetchLaunchState(launchId);
if (launchState.graduated) {
  const cpmmPoolId = launchState.graduatedCpmmPool;
  console.log("Graduated to CPMM pool:", cpmmPoolId.toBase58());
}
```

### 手动毕业

如果没人领取赏金，你想强制毕业，可以自己调用：

```ts theme={null}
await raydium.launchpad.graduate({
  launchId,
  txVersion: TxVersion.V0,
  computeBudgetConfig: { units: 600_000, microLamports: 100_000 },
});
```

毕业耗用大量 CU；预算 600k。

## 毕业后

### 验证 CPMM 池

```ts theme={null}
const pool = await raydium.cpmm.getPoolInfoFromRpc({ poolId: cpmmPoolId });
console.log("CPMM price:", pool.poolInfo.price);
console.log("CPMM TVL:  ", pool.poolInfo.tvl);
```

CPMM 池应该有（大约）：

* 基础代币余额：`total_base_supply - baseSold` + 曲线残余。
* 计价代币余额：`quoteRaised - graduationFee`。
* 价格：与最后的曲线价格匹配。

### 验证 LP 处理

* **销毁**：LP 铸造供应显示已发送到 1nc1nerator11111111111111111111111111111111 或类似地址。
* **锁定**：LP 代币在托管 PDA 中，带有解锁时间戳。
* **转给创建者**：LP 代币在创建者的钱包中。

### 收集创建者费用

如果你配置了创建者费用分享，定期调用：

```ts theme={null}
await raydium.launchpad.collectCreatorFees({
  launchId,
  txVersion: TxVersion.V0,
});
```

费用从毕业前的曲线交易和毕业后的 CPMM 池（如果是 `ToCreator` LP）中累积。

## 公告清单

毕业后的公告应包括：

* [ ] 毕业交易哈希。
* [ ] 新 CPMM 池 ID。
* [ ] LP 处理证明（销毁交易 / 锁定交易 / 创建者钱包）。
* [ ] 聚合器覆盖 ETA（钱包通常在 5 分钟内建立索引）。
* [ ] 代币合约验证（铸造地址在公告渠道中一致）。

## 常见陷阱

### 1. 未撤销铸造权限

如果 `baseMint.mintAuthority` 仍是你控制的密钥，你可以铸造新的供应量并卖入自己的曲线。未撤销铸造权限的启动通常被聚合器和列表网站标记为高风险或未验证。在启动前撤销。

### 2. 曲线参数错误

`a` 过高的二次曲线使早期代币几乎免费（价格 ≈ 0），后期代币荒谬昂贵。`a` 过低的曲线使曲线几乎是线性的（失去"融资"感觉）。先在测试网上测试参数。

### 3. 毕业阈值过高

如果毕业需要比现实需求更多资本，曲线永远不会毕业，买家被困于只能以更差价格卖回曲线的代币。选择一个你实际上能达到的阈值。

### 4. 计价资产诈骗

如果你的计价资产是自定义代币（不是 SOL/USDC），用户不会信任它。坚持使用 SOL 或 USDC 作为计价资产。

### 5. 忘记资金基础金库

SDK 在创建时从你的钱包转移 `totalBaseSupply`。如果你的钱包没有足够的代币，交易会回滚。签署前确认余额。

### 6. LP 处理 = 销毁是不可逆的

一旦 LP 发送到 1nc1nerator，任何人都无法提取流动性，*包括你*。这就是目的 — 最小化信任。如果你不确定，不要选择销毁。

### 7. 毕业后 CPMM 费用层级

毕业池使用 LaunchLab 的默认 CPMM 配置（0.25%）。如果你想要 1% 或 0.01%，你需要在毕业后自己创建第二个 CPMM 池并迁移流动性 — 很繁琐，而且会分割池。接受默认值，或通过直接 CPMM 创建而非 LaunchLab 启动。

## 相关资源

* [`products/launchlab/overview`](/zh/products/launchlab/overview) — LaunchLab 概念和生命周期。
* [`products/launchlab/bonding-curve`](/zh/products/launchlab/bonding-curve) — 曲线数学详解。
* [`products/launchlab/instructions`](/zh/products/launchlab/instructions) — 完整指令参考。
* [`products/launchlab/vesting`](/zh/products/launchlab/vesting) — 锁定期机制。
* [`algorithms/bonding-curves`](/zh/algorithms/bonding-curves) — 通用融资曲线数学。
* [`user-flows/creating-a-launchlab-token`](/zh/user-flows/creating-a-launchlab-token) — 代币创建者的 UI 演练（JustSendit 和 LaunchLab 模式）。
* [`user-flows/how-creator-fees-work`](/zh/user-flows/how-creator-fees-work) — 迁移前后创建者费用概览。

来源：

* Raydium SDK v2 `launchpad` 模块。
* 通过 `api-v3.raydium.io` 端点的启动状态。
