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

# Đường cong LaunchLab

> Các công thức đường cong mà LaunchLab hỗ trợ, chi phí mua/bán dạng đóng, suy dẫn ngưỡng tốt nghiệp và hướng dẫn số học từng bước cho một lần phát hành từ lần mua đầu tiên đến tốt nghiệp.

<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/bonding-curve)
</Info>

<Info>
  LaunchLab hỗ trợ ba hình dạng đường cong được lựa chọn tại `Initialize`: **constant-product** (phổ biến nhất, dạng bản sao ảo của đường cong chuẩn `x · y = k`), **linear-price** và **fixed-price**. Công thức ngưỡng tốt nghiệp được chia sẻ trên cả ba hình dạng. Trang này hướng dẫn chi tiết toán học constant-product; các dạng tuyến tính và cố định được tóm tắt ở phía cuối.
</Info>

## Các tham số lưu trữ trên `LaunchState`

| Trường                                                       | Ý nghĩa                                                                                                                                  |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `curve_type`                                                 | `0` = constant-product (bản sao ảo), `1` = fixed-price, `2` = linear-price.                                                              |
| `base_supply_max`                                            | Tổng số base token mà đường cong có thể phát hành bất cứ lúc nào.                                                                        |
| `base_supply_graduation`                                     | Base token phải được bán để đạt tốt nghiệp. Thường là `0.8 × base_supply_max`; 20% còn lại trở thành LP ban đầu của pool sau tốt nghiệp. |
| `quote_reserve_target`                                       | Số lượng quote kích hoạt tốt nghiệp. Được suy dẫn tại `Initialize` từ các tham số đường cong + `base_supply_graduation`.                 |
| `virtual_base` / `virtual_quote`                             | Hạt giống bản sao ảo cho đường cong constant-product.                                                                                    |
| `migrate_type`                                               | Lựa chọn mục tiêu tốt nghiệp: AMM v4 vs CPMM. Xem [`instructions`](/vi/products/launchlab/instructions).                                 |
| `fees.buy_numerator / buy_denominator`                       | Phí mua, ví dụ `100 / 10_000 = 1.00%`.                                                                                                   |
| `fees.sell_numerator / sell_denominator`                     | Phí bán. Thường giống phí mua.                                                                                                           |
| `fees.protocol_share`, `fees.creator_share`, `fees.lp_share` | Chia tách của các phí trên, tổng bằng mẫu số.                                                                                            |

Tên trường trong struct Rust khớp với các trường `PoolState` được mô tả trong [`accounts`](/vi/products/launchlab/accounts); các đơn vị trên là khái niệm.

## Đường cong constant-product với bản sao ảo (`curve_type = 0`)

Đường cong mặc định và được sử dụng nhiều nhất. Tất cả các lần phát hành kiểu Pump đều sử dụng dạng này. Đường cong cho rằng có một **bản sao quote ảo** `V_q` và một **bản sao base ảo** `V_b` từ lúc bắt đầu (lưu trữ dưới dạng `virtual_quote` và `virtual_base` trên `PoolState`), do đó pool hiệu dụng giống như một CPMM có các bản sao đó. Các lần mua tuân theo toán học `x · y = k`:

```
(V_q + real_quote_in_after_fee) × (V_b + real_base_remaining − base_out) = V_q × V_b
```

giải cho `base_out`:

```
base_out = (V_b + real_base_remaining) × quote_in_after_fee / (V_q + real_quote_in_after_fee)
```

Giá hiệu dụng tại base đã bán `s`:

```
price(s) = (V_q + real_quote_in(s)) / (V_b + real_base_remaining(s))
```

Bất biến `x · y = k` tương tự mà LaunchLab áp dụng trước tốt nghiệp sau đó là chính xác đường cong CPMM (hoặc AMM v4) sau tốt nghiệp, do đó bàn giao tốt nghiệp là liền mạch về mặt cơ học: giá biên tại `base_sold = base_supply_graduation` bằng giá mà pool sau tốt nghiệp mở ra với `(quote_vault, base_vault_remaining)` làm các bản sao.

## Đường cong fixed-price (`curve_type = 1`)

Một đường cong giá phẳng. Mỗi lần mua/bán xảy ra ở một giá không đổi, có thể cấu hình tại `Initialize`:

```
price(s) = virtual_quote / virtual_base    (hằng số cho tất cả s)
```

Hữu ích cho các lần phát hành công bằng nơi nhóm muốn định giá thống nhất cho tất cả những người tham gia bất kể họ mua khi nào. Tốt nghiệp kích hoạt khi `base_supply_graduation` đã được bán (mối quan hệ chi phí tuyến tính làm cho việc suy dẫn `quote_reserve_target` trở nên đơn giản).

## Đường cong linear-price (`curve_type = 2`)

Giá tăng tuyến tính với `base_sold`:

```
price(s) = a · s     (a = độ dốc, suy dẫn từ virtual_base / virtual_quote)
```

Chi phí tích phân:

```
cost(s_0, s_1) = a · (s_1² − s_0²) / 2
```

Bậc hai trong `base_sold` — những người mua sớm thanh toán gần như không, những người mua muộn thanh toán nhiều hơn đáng kể, với giá biên luôn tăng ở độ dốc cố định. Triển khai trên chuỗi nằm trong `curve/linear_price.rs`.

## So sánh hình dạng đường cong

```
price
  │   linear (steep tail)               linear (curve_type = 2)
  │       ╱
  │      ╱
  │     ╱            const-product (curve_type = 0)
  │    ╱            ╱
  │   ╱           ╱
  │  ╱         ╱
  │ ╱       ╱
  │╱_____╱_______________________  fixed-price (curve_type = 1)
  └──────────────────────────────── base_sold
  0                  S_grad         S_max
```

## Ngưỡng tốt nghiệp

`quote_reserve_target` được tính toán tại `Initialize` là quote cần thiết để đẩy `base_sold` từ 0 đến `base_supply_graduation`:

```
quote_reserve_target = cost(0, base_supply_graduation) × (1 + buy_fee_rate)
                                                         ^^^^^^^^^^^^^^^^^
                                                         xấp xỉ; dạng chính xác
                                                         khớp với làm tròn phí
                                                         được sử dụng trên Buy.
```

Một lần phát hành tốt nghiệp ngay khi `quote_vault.balance ≥ quote_reserve_target`. Vì các lần mua có kích thước rời rạc, số dư thực tế tại tốt nghiệp có thể vượt quá mục tiêu một chút — phần dôi thành thêm tính thanh khoản phía quote trong pool CPMM kết quả.

## Ví dụ đã làm việc — một lần phát hành bậc hai

Tham số:

* `base_supply_max        = 1_000_000_000` (1 tỷ base token, 6 chữ số thập phân)
* `base_supply_graduation = 800_000_000`   (80% bán kích hoạt tốt nghiệp)
* `k                      = 40` (thang giá)
* Phí: 1% mua, 1% bán, chia tách `lp:creator:protocol = 60:20:20`.

**Giá ban đầu** (`s = 0`): `0` (bậc hai thuần túy bắt đầu từ không).

**Giá tại 50% bán** (`s = 500_000_000`):

```
price = 40 × (500e6 / 1e9)² = 40 × 0.25 = 10  (quote trên base, 6 chữ số thập phân)
```

**Giá tại tốt nghiệp** (`s = 800_000_000`):

```
price = 40 × (800e6 / 1e9)² = 40 × 0.64 = 25.6
```

**Quote cần thiết để đạt tốt nghiệp** (chi phí tích phân):

```
cost(0, 800_000_000) = (40 / (3 × 1e18)) × ((800e6)³ − 0)
                     = (40 / 3e18) × 5.12e26
                     ≈ 6.827e9
```

Vì vậy ≈ 6.827 đơn vị gốc quote (trong bất kỳ mint quote 6 chữ số thập phân nào được cấu hình, ví dụ \~6.827 USDC nếu quote là USDC).

**Phí áp dụng trên cùng**:

```
quote_reserve_target ≈ 6.827e9 × 1.01 ≈ 6.895e9  (6.895 USDC)
```

**Lần mua đầu tiên** của `10 USDC`:

* Trạng thái ảo: `s = 0`, `quote_vault = 0`.
* Trừ phí: `quote_after_fee = 10 × 0.99 = 9.9`.
* Giải `(40 / (3e18)) × s³ = 9.9` ⇒ `s ≈ 6.22e6` base token được mua.
* Phí 1% (`0.1 USDC`) chia tách: lp `0.06`, creator `0.02`, protocol `0.02`. Phần chia sẻ lp nằm trong `quote_vault`; hai phần kia định tuyến đến các bộ đếm tích lũy tương ứng.

**Mua tại 75% bán** (tiếp cận tốt nghiệp):

Cùng 10 USDC mua ít base hơn nhiều bây giờ vì đường cong dốc. Một giải Newton tại `s₀ = 750e6` với `quote_in_after_fee = 9.9` cho khoảng `∆s ≈ 0.4e6` — giảm \~15 lần số base trên USDC so với lần mua đầu tiên.

## Cơ học phí trong giai đoạn đường cong

Trên mỗi `Buy`:

```
gross_fee      = ceil(quote_in_gross × buy_numerator / buy_denominator)
lp_share       = gross_fee × fees.lp_share / fees.total_share
protocol_share = gross_fee × fees.protocol_share / fees.total_share
creator_share  = gross_fee × fees.creator_share / fees.total_share
```

* `lp_share` được để lại trong `quote_vault`. Đây là cách làm cho đường cong hiệu dụng chặt hơn (nhiều bản sao quote hơn so với cùng một nguồn cung base).
* `protocol_share` tăng `LaunchState.state_data.protocol_fees_quote`.
* `creator_share` tăng `LaunchState.state_data.creator_fees_quote`.

Trên `Sell` cùng một chia tách áp dụng nhưng phí được lấy từ `quote_out` xuất.

Cả hai bộ đếm được xóa thông qua `CollectFees` (quản trị viên hoặc người tạo, mỗi bộ đến bộ đếm của mình).

## Độ chính xác

* Số lượng phía base: `u64`.
* Số lượng phía quote: `u64`.
* Lập phương/tích trung gian: `u128`.
* Giải Newton cho "mua quote chính xác" và "bán quote chính xác" lặp lại trong `u128` điểm cố định với số lần lặp tối đa có thể cấu hình (mặc định 10). Chế độ lỗi là `NotConverged` — hiếm khi xảy ra ngoài các trường hợp cạnh gần tốt nghiệp.

## Bàn giao đến CPMM

Khi `Graduate` kích hoạt:

```
cpmm_quote_reserve = quote_vault − swept_protocol_fees − swept_creator_fees
cpmm_base_reserve  = base_vault                       // tức là base_supply_max − base_sold
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
```

Đối với đường cong bậc hai, `cpmm_initial_price` là `price(base_sold)` về mặt cơ học (nó là giá biên đường cong tại thời điểm bàn giao). Pool CPMM mở ở giá chính xác đó, do đó một người quan sát chuyển từ UI đường cong sang UI CPMM không thấy bất kỳ bước nhảy nào.

## Bước tiếp theo

* [`products/launchlab/accounts`](/vi/products/launchlab/accounts) — các trường `LaunchState` lưu trữ các tham số này.
* [`products/launchlab/instructions`](/vi/products/launchlab/instructions) — danh sách tài khoản `Buy`, `Sell`, `Graduate`.
* [`algorithms/constant-product`](/vi/algorithms/constant-product) — toán học CPMM mà pool sau tốt nghiệp sử dụng.

Nguồn:

* [Raydium SDK v2 `LaunchLab` module](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium LaunchLab program source
