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

# ボンディングカーブ

> トークン発行曲線の数学 — 二次、一次、仮想リザーブ CPMM バリアント — コスト / リターン / スポット価格の導出、および LaunchLab で使用される卒業閾値の数学。

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

  [英語版を表示 →](/algorithms/bonding-curves)
</Info>

## ボンディングカーブとは

**ボンディングカーブ** は、トークン価格を現在流通しているサプライ量（`s` は「売却済みサプライ」を意味する）に関連付ける決定論的な価格関数 `p(s)` です。買い手はコントラクトに担保を送ることで購入します。コントラクトは曲線によって定められた限界価格で新しいトークン単位を発行します。売り手はトークン単位を返し、統合された払い戻しを受け取ります。

CPMM プールと比較して 2 つの主要な特性があります：

* **カウンターパーティが不要。** 発行するコントラクトは市場メーカーです。流動性は決定によって存在します。
* **単調な価格。** ネット買いで上昇し、ネット売りで下落します。

ボンディングカーブは、発行元が担保で事前に AMM プールをシードしたくない場合の標準的なローンチメカニズムです。

## 一般的な価格計算式

任意の連続価格関数 `p(s)` に対して：

**スポット価格** （サプライ `s` での）：

```
p(s) = the curve formula
```

**購入コスト** （サプライ `s_0` から `s_1` まで、`s_1 > s_0` の場合）：

```
cost(s_0, s_1) = ∫_{s_0}^{s_1} p(s) ds = P(s_1) − P(s_0)
```

ここで `P(s) = ∫ p(s) ds` は曲線の原始関数です。幾何学的には、`cost` は `s_0` と `s_1` の間で `p` の下の領域です。

**売却からのリターン** （サプライを `s_1` から `s_0` に戻す）：

```
proceeds(s_1, s_0) = cost(s_0, s_1)
```

（対称性：同じ間隔での買いと売りは同じ担保を交換します — 手数料を除く。）

**購入の平均価格**：

```
avg = cost(s_0, s_1) / (s_1 − s_0)
```

## 一般的な曲線ファミリー

### 一次曲線

```
p(s) = a + b · s
```

```
P(s)            = a·s + (b/2)·s²
cost(s_0, s_1)  = a·(s_1 − s_0) + (b/2)·(s_1² − s_0²)
```

価格はサプライに比例して上昇します。発行者が予測可能で適度なマークアップを生涯にわたって望む「安定した」ローンチに使用されます。

### 二次曲線

```
p(s) = k · s²                      // or  k · (s / S_max)² for a normalized form
```

```
P(s)            = (k / 3) · s³
cost(s_0, s_1)  = (k / 3) · (s_1³ − s_0³)
```

価格は二次的に上昇します。初期の買い手はほぼゼロの価格を取得します（平坦な開始領域）。後期の買い手はより高い報酬を支払います。これは LaunchLab がデフォルトとする曲線タイプです（`curve_type = 0`）。

### 仮想リザーブ CPMM（ポンプスタイル）

曲線は、見かけ上の初期クォートリザーブ `V_q` を備えた標準的な CPMM です：

```
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // invariant
```

スポット価格：

```
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (derivable via implicit differentiation)
```

`s_0` から `s_1` に移動するコスト：

```
cost(s_0, s_1) = V_q · S_max / (S_max − s_1) − V_q · S_max / (S_max − s_0)
              = V_q · (s_1 − s_0) · S_max / ((S_max − s_0) · (S_max − s_1))
```

このバリアントは、卒業時（`s = S_graduate` の場合）に、限界価格がリザーブ `(S_max − S_graduate, V_q + cost(0, S_graduate))` でシードされた下流の CPMM プールのオープン価格に等しくなるという優雅な特性を持っています。ハンドオフはシームレスです。LaunchLab はこれを `curve_type = 1` として公開しています。

## 離散実装

オンチェーンでは、`s` と `cost` は両方とも整数（最小デノミネーション単位）です。連続積分 `cost(s_0, s_1)` は、1 つが存在するときは常に閉じた形式から直接計算されます（一次、二次）。閉じた形式の逆を持たない曲線（二次、`cost` が与えられた場合 `s_1` を求める）では、ニュートン法が使用されます：

```
# Solve quadratic: (k/3)·s_1³ = (k/3)·s_0³ + cost
# Initialize with s_guess ≈ cbrt(3·cost/k + s_0³)
for i in 0..MAX_ITER:
    f    = (k/3)·s_guess³ − (k/3)·s_0³ − cost
    f'   = k·s_guess²
    step = f / f'
    s_guess -= step
    if |step| < precision_floor: break
```

LaunchLab は反復を約 10 回に制限し、残差がまだ許容値を超えている場合は `NotConverged` で戻します。実際には、これはドメインの端でのみトリガーされます。本番スワップは 2 ～ 3 回の反復で収束します。

## 手数料統合

手数料は曲線コストの上に適用され、その内部ではありません。購入時：

```
cost_curve  = cost(base_sold, base_sold + base_out)
fee         = ceil(cost_curve · buy_numerator / buy_denominator)
quote_in    = cost_curve + fee
```

売却時：

```
proceeds_curve = cost(base_sold − base_in, base_sold)
fee            = ceil(proceeds_curve · sell_numerator / sell_denominator)
quote_out      = proceeds_curve − fee
```

手数料の LP 部分は `quote_vault` に保持され、後の買い手のために曲線をより硬くします — リザーブはサプライをさらに発行することなく成長します。プロトコルと作成者の部分は、後で掃引するための別々のカウンターで追跡されます。

## 卒業閾値

曲線は、現在の曲線価格に一致する価格で外部 AMM プールをシードするのに十分な担保を受け取ったときに「卒業」します。パラメーター `(k, S_max, S_graduate)` を持つ二次曲線の場合：

```
quote_to_graduate = cost(0, S_graduate) · (1 + buy_fee_rate)
                  = (k / 3) · S_graduate³ · (1 + f_buy)
```

`quote_vault ≥ quote_to_graduate` になると、`Graduate` 命令は以下を含む CPMM プールを作成します：

```
cpmm_base_reserve  = S_max − S_graduate        // unsold curve supply
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
```

仮想リザーブ曲線の場合、構成上：

```
cpmm_initial_price == p(S_graduate)           // exact equality
```

二次の場合、等式は近似です。「スロップ」は `S_graduate` のラウンディング（通常 `0.8 · S_max`）と最終閾値を越える買いからの余分な担保に吸収されます。

## CPMM プールと比較した無期限損失

純粋なボンディングカーブローンチは、Uniswap の意味で **無期限損失がありません**：バランスを調整すべき「もう一方の側」がありません。曲線はオンデマンドでサプライを発行し、唯一の「LP」はコントラクト自体です。

卒業後、結果の CPMM プールは他の CPMM プールのような動作をします — LP が焼却されなかった場合、それらは通常の無期限損失ダイナミクスの対象となります。これが、公開ローンチ後の **焼却** ポリシーが支配的である理由です：プールを永続的に保ち、LP 引き出し駆動の価格ショックを削除します。

## 実例

曲線：二次、`k = 40`、`S_max = 1e9`、`S_graduate = 0.8 · S_max = 8e8`。購入手数料 1%。

### `s = 5e8` での価格

```
p(5e8) = 40 · (5e8 / 1e9)² = 40 · 0.25 = 10
```

ベース単位あたり 10 クォート単位。

### 最初の 1e6 ベースの購入のコスト

```
cost(0, 1e6) = (40/3) · (1e6)³
             = (40/3) · 1e18
             ≈ 1.333e19     (smallest quote units)
```

1% 手数料付き：

```
quote_in = 1.333e19 · 1.01 ≈ 1.347e19
```

### 卒業閾値

```
cost(0, 8e8) = (40/3) · (8e8)³
             = (40/3) · 5.12e26
             ≈ 6.827e27
quote_to_graduate ≈ 6.827e27 · 1.01 ≈ 6.895e27
```

### 卒業時の価格

```
p(8e8) = 40 · 0.64 = 25.6
```

### 卒業後の CPMM リザーブ

```
cpmm_base  = 1e9 − 8e8 = 2e8
cpmm_quote ≈ 6.827e27  (less fee-counter deductions)
cpmm_price ≈ 3.41e19 per base — which matches p(8e8) after units are accounted for
```

（単位：デシマルを慎重に追跡する必要があります。例は説明的です。）

## ポインター

* [`/ja/products/launchlab/bonding-curve`](/ja/products/launchlab/bonding-curve) — これらの計算式の LaunchLab オンチェーン実装。
* [`/ja/products/launchlab/instructions`](/ja/products/launchlab/instructions) — `Buy`、`Sell`、`Graduate` のアカウント レベルの仕様。
* [`/ja/algorithms/constant-product`](/ja/algorithms/constant-product) — 卒業後の CPMM がリザーブで行うこと。

ソース：

* Raydium LaunchLab プログラム ソース（二次 + 仮想リザーブ曲線実装）。
* Bancor ホワイトペーパー（線形ボンディング曲線、歴史的）。
* Pump.fun パブリック ポストモーテム（仮想リザーブ バリアント）。
