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

# 라우팅 수학

> 라우터는 가격 책정 로직을 직접 구현하지 않으며, 각 홉은 자신의 풀 프로그램의 곡선을 기준으로 가격을 책정합니다. 다중 홉 슬리피지는 복합되고, CLMM 홉은 limit_prices를 사용합니다.

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

  [영문판 보기 →](/products/routing/math)
</Info>

## 라우터는 수학을 수행하지 않습니다

라우팅 프로그램은 **가격 책정 로직을 구현하지 않습니다**. 순수한 오케스트레이터로, 경로를 받아들이고 하위 프로그램에 계정을 전달하며 토큰 흐름을 연결합니다.

각 홉은 자신의 풀 프로그램 곡선에서 가격을 책정합니다:

* **AMM v4 홉:** OpenBook 하이브리드 가격 책정과 함께 상수곱 공식(`x · y = k`)을 사용합니다. [`products/amm-v4/math`](/ko/products/amm-v4/math)를 참조하세요.
* **CPMM 홉:** 구성 가능한 수수료 계층과 함께 상수곱 공식을 사용합니다. [`products/cpmm/math`](/ko/products/cpmm/math)를 참조하세요.
* **CLMM 홉:** 집중 유동성 틱 수학을 사용합니다. [`algorithms/clmm-math`](/ko/algorithms/clmm-math)를 참조하세요.
* **Stable 홉:** 유사 자산을 위한 스테이블 스왑 곡선을 사용합니다. [`products/stable/math`](/ko/products/stable/math)를 참조하세요.

라우터의 역할은 다음과 같습니다:

1. CPI를 통해 각 풀의 스왑 명령어를 호출합니다.
2. 출력 금액을 수집합니다.
3. 다음 홉의 입력 금액으로 전달합니다.
4. 최종 출력을 호출자의 슬리피지 한도에 대해 확인합니다.

## 슬리피지 복합

다중 홉 경로에서 각 홉의 슬리피지는 복합됩니다. 첫 번째 홉의 작은 슬리피지는 두 번째 홉의 더 큰 슬리피지가 되는데, 이는 두 번째 홉으로의 거래량이 이미 감소했기 때문입니다.

**예시:**

```
경로: USDC → SOL → STEP

풀 1 (USDC / SOL):
  입력: 1000 USDC
  슬리피지: 1% (현물은 0.5 SOL을 주지만, 0.495 SOL을 받음)
  출력: 0.495 SOL

풀 2 (SOL / STEP):
  입력: 0.495 SOL (이미 감소함)
  슬리피지: 1% (현물은 495 STEP을 주지만, 490 STEP을 받음)
  출력: 490 STEP

USDC → STEP의 총 유효 슬리피지: 1.99%, 1% + 1% = 2%가 아님.
```

`minimum_amount_out`을 제공하면 라우터는 최종 출력을 이 전역 한도에 대해 확인합니다. 각 홉도 자신의 스왑을 로컬 수수료 구조에 대해 확인하지만, 라우터는 경로 중간에 재견적을 하지 않으므로, 경로를 미리 계산하고 충분한 슬리피지 허용량을 포함해야 합니다.

## CLMM 홉과 limit\_prices

CLMM 풀로의 각 홉에 대해 라우터는 풀의 현재 `sqrt_price_x64`가 지정된 범위 내에 있는지 확인합니다. 범위는 `limit_prices`라는 `VecDeque<u128>`로 전달됩니다:

* 경로의 각 CLMM 홉당 하나의 `sqrt_price_x64`.
* `sqrt_price_x64`는 CLMM에서 사용하는 틱 기반 가격 표현입니다. 정의는 [`algorithms/clmm-math`](/ko/algorithms/clmm-math)를 참조하세요.
* 라우터는 다음을 적용합니다:

```
  sqrt_price_lower <= pool.sqrt_price_x64 <= sqrt_price_upper
```

각 CLMM 홉에 대해, 가격이 범위를 벗어나면 스왑을 거부합니다.

### 명령어 변형과 limit\_prices

* **`SwapBaseInWithUserAccount`, `SwapBaseOutWithUserAccount` (레거시, 태그 0과 1):** `limit_prices` VecDeque은 **필수**입니다. 어떤 홉이 CLMM 풀인 경우 빈 deque는 오류와 함께 거부됩니다. 순서대로 각 CLMM 홉당 하나의 가격을 제공해야 합니다.

* **`SwapBaseIn`, `SwapBaseOut` (현재, 태그 8과 9):** `limit_prices` VecDeque은 **선택 사항**입니다. 빈 deque는 조용히 무시되고, 가격 확인이 수행되지 않습니다. 새 코드는 이것을 사용해야 합니다.

### limit\_prices 빌드하기

M개의 CLMM 홉이 있는 경로의 경우, deque는 정확히 M개의 항목을 포함해야 합니다. 홉별로 순서를 정합니다:

```
limit_prices = [
  sqrt_price_for_first_clmm_hop,
  sqrt_price_for_second_clmm_hop,
  ...
]
```

### limit\_prices를 확인할 때

`sqrt_price_x64`는 풀의 현재 가격의 스냅샷입니다. 스왑이 실행되면서 계속 변경됩니다. 다음을 수행해야 합니다:

1. 온체인에서 풀의 현재 상태를 가져옵니다.
2. 허용 가능한 범위를 계산합니다 (예: 현재 가격의 ±0.5%).
3. 해당 범위를 `limit_prices`로 인코딩합니다.
4. 라우터 명령어에 범위를 포함합니다.

거래가 착륙하기 전에 풀의 가격이 범위를 넘어 변동하면, 라우터는 이를 거부합니다.

## 수수료 처리

각 풀은 자신의 구성에 따라 자신의 수수료를 부과합니다:

* **AMM v4:** 0.25% (고정), LP, 프로토콜, 펀드 간에 나뉨.
* **CPMM:** `AmmConfig`당 구성 가능 (기본값 0.25%, 계층별로 분할 다름).
* **CLMM:** 풀당 구성 가능, 입력 금액에서 차감.
* **Stable:** AMM v4와 같이 0.25% 분할.

라우터는 **자신의 수수료를 내지 않습니다**. 모든 수수료 처리는 각 하위 풀에 위임됩니다. N번째 홉의 출력에는 이미 해당 홉의 수수료가 차감되어 있습니다.

개별 풀의 수수료 문서를 참조하세요:

* [`products/amm-v4/fees`](/ko/products/amm-v4/fees)
* [`products/cpmm/fees`](/ko/products/cpmm/fees)
* [`products/clmm/fees`](/ko/products/clmm/fees) (사용 가능한 경우)
* [`products/stable/fees`](/ko/products/stable/fees) (사용 가능한 경우)

## 다중 홉 회계 예시

USDC → SOL → STEP을 두 개의 상수곱 풀을 통해 라우팅한다고 가정하면, 각각 0.25% 수수료가 있습니다:

```
입력: 1000 USDC
풀 1 (USDC/SOL):
  수수료 차감: ceil(1000 * 0.25%) = 2.5 USDC
  곡선에 대한 순 입력: 997.5 USDC
  곡선 출력 (슬리피지 전): 0.5 SOL
  슬리피지 여유: 1%라고 가정, ~0.495 SOL을 받음

풀 2 (SOL/STEP):
  입력: 0.495 SOL
  수수료 차감: ceil(0.495 * 0.25%) ≈ 0.001 SOL
  곡선에 대한 순 입력: 0.494 SOL
  곡선 출력: ~494 STEP
  슬리피지 여유: 1%, ~489 STEP을 받음

최종 출력: ~489 STEP
```

라우터는 다음을 확인합니다:

```
489 >= minimum_amount_out  // 호출자가 지정함
```

거짓이면 전체 경로가 원자적으로 실패합니다.

## 정밀도 고려 사항

모든 Solana 프로그램처럼 라우터는 정수 산술을 사용합니다:

* 모든 금액은 `u64` (램포트 또는 토큰 최소 단위).
* 곡선 계산은 오버플로우를 피하기 위해 필요한 곳에서 `u128` 중간값을 사용합니다.
* 반올림 규칙은 하위 프로그램에 따라 다릅니다. 라우터는 재반올림하지 않습니다.

극단적인 가격 비율로 인해 홉이 0 금액을 생성하는 경우 (예: 1B:1 풀에서 1 램포트 스왑), 라우터는 해당 0을 다음 홉에 전파하며, 이는 이를 불충분한 것으로 거부할 수 있습니다. 개별 풀의 오류 코드를 참조하세요.

## 다음으로 읽을 내용

* [`products/amm-v4/math`](/ko/products/amm-v4/math) — 상수곱 수학.
* [`products/cpmm/math`](/ko/products/cpmm/math) — Token-2022를 포함한 CPMM 상수곱.
* [`algorithms/clmm-math`](/ko/algorithms/clmm-math) — 집중 유동성 가격 책정.
* [`products/stable/math`](/ko/products/stable/math) — 스테이블 스왑 곡선.
* [`products/routing/code-demos`](/ko/products/routing/code-demos) — 라우팅 전 견적의 예시.
