> ## 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 がサポートするカーブの計算式、クローズドフォーム買値と売値、卒業スレッショルドの導出、および最初の購入から卒業までのローンチのワークスルー例。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/products/launchlab/bonding-curve)
</Info>

LaunchLab は、`Initialize` で選択される 3 つのカーブ形状をサポートします：**constant-product**（最も一般的で、標準的な `x · y = k` カーブの仮想リザーブ形式）、**linear-price**、および **fixed-price**。卒業スレッショルド式は、すべての 3 つに共通しています。このページでは constant-product の数学を詳細に説明します。linear と fixed の形式は最後に要約されています。

## `LaunchState` に保存されるパラメータ

| フィールド                                                      | 意味                                                                                        |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| `curve_type`                                               | `0` = constant-product（仮想リザーブ）、`1` = fixed-price、`2` = linear-price。                      |
| `base_supply_max`                                          | カーブがミントできるベーストークンの総量。                                                                     |
| `base_supply_graduation`                                   | 卒業に到達するために売却する必要があるベーストークン。通常 `0.8 × base_supply_max`。残りの 20% は卒業後プールの初期 LP になります。        |
| `quote_reserve_target`                                     | 卒業をトリガーするクオート額。`Initialize` でカーブパラメータ + `base_supply_graduation` から導出されます。                |
| `virtual_base` / `virtual_quote`                           | constant-product カーブの仮想リザーブシード。                                                           |
| `migrate_type`                                             | 卒業ターゲットを選択：AMM v4 対 CPMM。[`instructions`](/ja/products/launchlab/instructions) を参照してください。 |
| `fees.buy_numerator / buy_denominator`                     | 買値側のフィー、例えば `100 / 10_000 = 1.00%`。                                                       |
| `fees.sell_numerator / sell_denominator`                   | 売値側のフィー。通常は買値と同じ。                                                                         |
| `fees.protocol_share`、`fees.creator_share`、`fees.lp_share` | 上記の分割。合計は denominator。                                                                    |

Rust 構造体のフィールド名は、[`accounts`](/ja/products/launchlab/accounts) に記載された `PoolState` フィールドと一致します。上記の単位は概念的です。

## 仮想リザーブを使用した constant-product カーブ（`curve_type = 0`）

デフォルトで最も使用されるカーブ。Pump スタイルのローンチはすべてこの形式を使用します。カーブは、最初から **仮想クオートリザーブ** `V_q` と **仮想ベースリザーブ** `V_b` が存在すると想定します（`PoolState` の `virtual_quote` と `virtual_base` として保存）。そのため、実質的なプールはこれらのリザーブを持つ CPMM のように見えます。買値は `x · y = k` の計算に従います：

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

`base_out` について解くと：

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

ベース売却 `s` での実効価格：

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

LaunchLab が卒業前に適用する同じ `x · y = k` インバリアントは、卒業後は文字通り CPMM（または AMM v4）カーブになるため、卒業のハンドオフは機械的にシームレスです：`base_sold = base_supply_graduation` での限界価格は、`(quote_vault, base_vault_remaining)` をリザーブとして卒業後プールがオープンする価格と等しい。

## 固定価格カーブ（`curve_type = 1`）

フラット価格カーブ。すべての買値・売値は定数価格で発生します。これは `Initialize` で設定可能です：

```
price(s) = virtual_quote / virtual_base    (すべての s で定数)
```

チームが購入タイミングに関係なく、すべての参加者に対して均一の価格設定を希望するフェアローンチに役立ちます。`base_supply_graduation` が売却されると卒業がトリガーされます（線形コスト関係により `quote_reserve_target` の導出は簡単です）。

## 線形価格カーブ（`curve_type = 2`）

価格は `base_sold` に応じて線形に上昇します：

```
price(s) = a · s     (a = スロープ、virtual_base / virtual_quote から導出)
```

統合コスト：

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

`base_sold` に関して二次式です。早期の購入者はほぼゼロを支払い、後期の購入者は大幅に多く支払います。限界価格は常に固定スロープで上昇しています。オンチェーン実装は `curve/linear_price.rs` に存在します。

## カーブ形状の比較

```
価格
  │   linear（急な尾部）               linear (curve_type = 2)
  │       ╱
  │      ╱
  │     ╱            const-product (curve_type = 0)
  │    ╱            ╱
  │   ╱           ╱
  │  ╱         ╱
  │ ╱       ╱
  │╱_____╱_______________________  fixed-price (curve_type = 1)
  └──────────────────────────────── base_sold
  0                  S_grad         S_max
```

## 卒業スレッショルド

`quote_reserve_target` は `Initialize` で計算され、`base_sold` を 0 から `base_supply_graduation` へ駆動するために必要なクオートです：

```
quote_reserve_target = cost(0, base_supply_graduation) × (1 + buy_fee_rate)
                                                         ^^^^^^^^^^^^^^^^^
                                                         近似値；正確な
                                                         形式は Buy で使用される
                                                         フィー丸め処理に一致。
```

ローンチは `quote_vault.balance ≥ quote_reserve_target` になるとすぐに卒業します。買値は離散サイズで来るため、卒業時の実際のバランスはターゲットをわずかに超える可能性があります。剰余は結果的な CPMM プールのクオート側の追加流動性になります。

## ワークスルー例 — 二次ローンチ

パラメータ：

* `base_supply_max        = 1_000_000_000`（10 億ベーストークン、6 デシマル）
* `base_supply_graduation = 800_000_000`  （80% 売却で卒業トリガー）
* `k                      = 40`（価格スケール）
* フィー：買値 1%、売値 1%、分割 `lp:creator:protocol = 60:20:20`。

**初期価格**（`s = 0`）：`0`（純粋な二次カーブはゼロで開始）。

**50% 売却時の価格**（`s = 500_000_000`）：

```
price = 40 × (500e6 / 1e9)² = 40 × 0.25 = 10  (ベースあたりのクオート、6 デシマル)
```

**卒業時の価格**（`s = 800_000_000`）：

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

**卒業に到達するために必要なクオート**（統合コスト）：

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

したがって、約 6.827 クオート ネイティブ単位（設定されたどのような 6 デシマルクオートミント、例えば USDC がクオートの場合は約 6,827 USDC）。

**適用されるフィー**：

```
quote_reserve_target ≈ 6.827e9 × 1.01 ≈ 6.895e9  (6,895 USDC)
```

**最初の購入** `10 USDC`：

* 仮想状態：`s = 0`、`quote_vault = 0`。
* フィーを差し引く：`quote_after_fee = 10 × 0.99 = 9.9`。
* `(40 / (3e18)) × s³ = 9.9` を解く ⇒ `s ≈ 6.22e6` ベーストークンを購入。
* 1% フィー（`0.1 USDC`）の分割：lp `0.06`、creator `0.02`、protocol `0.02`。lp シェアは `quote_vault` に残ります。その他は各自のアクルーアルカウンターにルーティングされます。

**75% 売却時の購入**（卒業に近づく）：

同じ 10 USDC は、カーブが急なため、現在ははるかに少ないベースを購入します。`s₀ = 750e6` での Newton 解を `quote_in_after_fee = 9.9` で求めると、約 `∆s ≈ 0.4e6` です。これは最初の購入と比べてベース / USDC が約 15 倍減少しています。

## カーブ段階中のフィーメカニクス

すべての `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` は `quote_vault` に残ります。これが実効カーブをより厳しくする（同じベース供給に対してより多くのクオートリザーブ）理由です。
* `protocol_share` は `LaunchState.state_data.protocol_fees_quote` を増加させます。
* `creator_share` は `LaunchState.state_data.creator_fees_quote` を増加させます。

`Sell` ではアウトバウンド `quote_out` からフィーが取得され、同じ分割が適用されます。

両方のカウンターは `CollectFees`（管理者またはクリエイター。各自のカウンターへ）でスイープされます。

## 精度

* ベース側の金額：`u64`。
* クオート側の金額：`u64`。
* 中間の立方体 / 積：`u128`。
* 「正確なクオートを買う」および「正確なクオートを売る」ための Newton 解は、設定可能な最大反復回数（デフォルト 10）で `u128` 固定小数点で反復します。フェイルモードは `NotConverged` です。卒業直前のエッジケースの外では珍しい。

## CPMM へのハンドオフ

`Graduate` が発火するとき：

```
cpmm_quote_reserve = quote_vault − swept_protocol_fees − swept_creator_fees
cpmm_base_reserve  = base_vault                       // つまり base_supply_max − base_sold
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
```

二次カーブの場合、`cpmm_initial_price` は機械的には `price(base_sold)` です（ハンドオフの瞬間の限界カーブ価格です）。CPMM プールはまさにその価格で開きます。そのため、カーブ UI から CPMM UI に切り替わるオブザーバーは価格のジャンプを見ません。

## 次のステップ

* [`products/launchlab/accounts`](/ja/products/launchlab/accounts) — これらのパラメータを保存している `LaunchState` フィールド。
* [`products/launchlab/instructions`](/ja/products/launchlab/instructions) — `Buy`、`Sell`、`Graduate` アカウントリスト。
* [`algorithms/constant-product`](/ja/algorithms/constant-product) — 卒業後プールが使用する CPMM の数学。

ソース：

* [Raydium SDK v2 `LaunchLab` module](https://github.com/raydium-io/raydium-sdk-V2)
* Raydium LaunchLab プログラムソース
