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

# 결합곡선

> 토큰 발행 곡선의 수학 - 2차, 1차, 가상 예비금 CPMM 변형 - 비용 / 수익 / 현물 가격 도출 및 LaunchLab이 사용하는 졸업 임계값 수학

<Info>
  **이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.**

  [영문판 보기 →](/algorithms/bonding-curves)
</Info>

## 결합곡선이란 무엇인가

**결합곡선**은 토큰 가격과 현재 유통량(`s`는 "판매된 공급량"의 약자)을 연결하는 결정론적 가격 함수 `p(s)`입니다. 구매자는 계약에 담보를 보내어 구매하고, 계약은 곡선이 지시하는 한계 가격으로 새로운 토큰 단위를 발행합니다. 판매자는 토큰 단위를 반환하고 통합 환금을 받습니다.

CPMM 풀과 비교했을 때 두 가지 핵심 특성:

* **상대방이 필요 없음.** 발행 계약이 시장 조성자이며, 유동성은 자동으로 존재합니다.
* **단조 가격.** 모든 순 매수로 가격이 상승하고 모든 순 매도로 가격이 하락합니다.

결합곡선은 발행 주체가 AMM 풀에 담보를 미리 준비하고 싶지 않을 때 표준 출시 메커니즘입니다.

## 일반적인 가격 공식

모든 연속 가격 함수 `p(s)`에 대해:

**`s`에서의 현물 가격**:

```
p(s) = 곡선 공식
```

**`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)
```

## 일반적인 곡선 유형

### 1차

```
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²)
```

가격은 공급에 비례하여 상승합니다. 발행자가 수명 기간 동안 예측 가능하고 적당한 마크업을 원하는 "안정적인" 출시에 사용됩니다.

### 2차

```
p(s) = k · s²                      // 또는 정규화된 형식의 k · (s / S_max)²
```

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

가격은 2차로 상승합니다. 초기 구매자는 거의 0에 가까운 가격을 받고(평탄한 시작 영역), 후기 구매자는 더 가파른 프리미엄을 지불합니다. 이것이 LaunchLab의 기본값 곡선 유형입니다(`curve_type = 0`).

### 가상 예비금 CPMM (Pump 스타일)

곡선은 가짜 초기 담보 예비금 `V_q`가 있는 표준 CPMM입니다:

```
effective_y = V_q + collateral_received
effective_x = S_max − s
(effective_x) · (effective_y) = V_q · S_max      // 불변식
```

현물 가격:

```
p(s) = effective_y / effective_x
     = V_q · S_max / (S_max − s)² · ... (음함수 미분을 통해 도출 가능)
```

`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차, 2차). 닫힌 형식의 역이 없는 곡선의 경우(2차, `cost`가 주어지면 `s_1`을 찾음), Newton 반복이 사용됩니다:

```
# 2차 풀기: (k/3)·s_1³ = (k/3)·s_0³ + cost
# 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)`가 있는 2차 곡선의 경우:

```
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        // 미판매 곡선 공급
cpmm_quote_reserve = quote_vault − accrued_fee_counters
cpmm_initial_price = cpmm_quote_reserve / cpmm_base_reserve
```

가상 예비금 곡선의 경우, 구조상:

```
cpmm_initial_price == p(S_graduate)           // 정확한 동일성
```

2차의 경우 동일성은 근사치입니다. "여유"는 `S_graduate`의 반올림(일반적으로 `0.8 · S_max`)과 최종 임계값 교차 매수의 잉여 담보로 흡수됩니다.

## CPMM 풀과의 비영구성

순수 결합곡선 출시는 Uniswap 의미에서 **비영구성이 없습니다**: 시장의 "다른 쪽"이 없어 재조정할 수 없습니다. 곡선은 수요에 따라 공급을 발행하며, 유일한 "LP"는 계약 자체입니다.

졸업 후, 결과 CPMM 풀은 다른 CPMM 풀처럼 작동합니다 - LP가 소각되지 않은 경우, 일반적인 비영구 손실 역학을 받습니다. 이것이 공개 출시에서 졸업 후 **소각** 정책이 지배적인 이유입니다: 풀을 영구적으로 유지하고 LP 출금 중심의 가격 충격을 제거합니다.

## 작업 예시

곡선: 2차, `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     (가장 작은 담보 단위)
```

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  (수수료 카운터 공제 제외)
cpmm_price ≈ 3.41e19 per base — 단위가 고려된 후 p(8e8)과 일치합니다
```

(단위: 소수점은 신중하게 추적해야 합니다. 예시는 설명용입니다.)

## 포인터

* [`products/launchlab/bonding-curve`](/ko/products/launchlab/bonding-curve) — 이 공식의 온체인 LaunchLab 구현.
* [`products/launchlab/instructions`](/ko/products/launchlab/instructions) — `Buy`, `Sell`, `Graduate` 계정 수준 사양.
* [`algorithms/constant-product`](/ko/algorithms/constant-product) — 졸업 후 CPMM이 예비금으로 수행하는 작업.

출처:

* Raydium LaunchLab 프로그램 소스(2차 및 가상 예비금 곡선 구현).
* Bancor 백서(1차 결합곡선, 역사적).
* Pump.fun 공개 사후분석(가상 예비금 변형).
