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

# 슬리피지와 가격 임팩트

> 슬리피지와 가격 임팩트의 정확한 정의, Raydium SDK가 minAmountOut과 maxAmountIn을 어떻게 결정하는지, AMM 종류별 차이점, 그리고 프로덕션 라우팅을 위한 MEV 고려사항을 다룹니다.

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

  [영문판 보기 →](/algorithms/slippage-and-price-impact)
</Info>

## 두 가지 서로 다른 개념

**가격 임팩트**와 **슬리피지**는 UI에서 자주 혼동되지만 서로 다른 의미입니다.

* **가격 임팩트**는 특정 풀 상태에서 거래를 체결할 때의 결정론적 특성입니다. `(Δin, reserves)`가 주어지면, 거래를 제출하기 전에 가격 임팩트를 완전히 계산할 수 있습니다.

* **슬리피지**는 견적 시점에서 *예상했던* 가격과 체결 시점에서 *실제로 받은* 가격 간의 실현된 차이입니다. 이는 지연 시간, 동시 거래, 블록 포함 순서의 함수이며, 풀 수학의 함수가 아닙니다.

다른 거래가 없는 풀에서 1% 견적은 다음 블록에 포함되면 0% 슬리피지를 가집니다. 그 1%는 가격 임팩트였던 것입니다. 다른 거래가 먼저 풀을 거래하면, 같은 견적은 0.2% 더 안 좋은 가격에 체결됩니다. 그 추가 0.2%가 슬리피지입니다.

## 정식 정의

### 가격 임팩트

```
p_before = pool.spot_price()
p_after  = pool.spot_price_if_trade(Δin) applied
impact   = (p_before − p_after) / p_before       // can be signed
```

CPMM의 경우: 소규모 거래에 대해 `impact ≈ 2 · Δin / reserve_in`입니다. CLMM의 경우: 거래가 넘는 틱의 개수에 따라 다릅니다. 종종 현재 틱 범위 내에서는 평탄하고, 각 틱 경계를 넘을 때 급변합니다.

### 실현된 슬리피지

```
quoted_out = amount_out computed at quote time
actual_out = amount_out observed on-chain
slippage   = (quoted_out − actual_out) / quoted_out
```

슬리피지는 항상 0 이상입니다 (견적이 정직했다고 가정). 음수 값은 견적보다 *더* 받았다는 의미이며, 이는 견적 시점과 체결 시점 사이에 풀 상태가 당신에게 유리하게 움직였을 경우 가능합니다.

## `minAmountOut`과 `maxAmountIn` 결정

모든 Raydium 스왑은 슬리피지 보호 경계를 사용합니다:

* `SwapBaseInput(amount_in, min_amount_out)` — 정확한 입력, 출력의 하한.
* `SwapBaseOutput(max_amount_in, amount_out)` — 정확한 출력, 입력의 상한.

SDK는 다음과 같이 계산합니다:

```ts theme={null}
const computed = raydium.<pool_type>.computeAmountOut({
  poolInfo,
  amountIn,
  mintIn,
  mintOut,
  slippage: 0.005,     // 0.5% tolerance
});

// computed.amountOut         — the "expected" quote
// computed.minAmountOut      — amountOut × (1 − slippage), used as the on-chain bound
// computed.priceImpact       — deterministic, pool-state-only
// computed.fee               — total fee charged (all components summed)
```

슬리피지 허용도는 가격 임팩트 자체가 아니라, **가격 임팩트 주변의 버퍼**입니다. 0.5% 허용도는 "내 견적보다 최대 0.5% 더 나쁜 가격을 받아들인다"는 의미이며, 이는 가격 임팩트가 0.01% (아주 작은 거래)였는지 2% (큰 거래)였는지 무관합니다. 2% 가격 임팩트 거래에 0.5% 허용도가 있다면, `minAmountOut`은 거래 전 스팟 가격보다 `2.5%` 낮습니다. 즉, 임팩트와 허용도의 합입니다.

## 권장 슬리피지 허용도

정답은 없으며, 올바른 경계는 다음에 따라 다릅니다:

1. **거래 쌍의 안정성.** 스테이블코인-스테이블코인 풀은 0.1%을 안전하게 사용할 수 있습니다. 변동성 높은 밈 토큰 쌍 풀은 안정적으로 체결되려면 보통 3–5%가 필요합니다.
2. **거래 규모.** 더 큰 거래는 더 큰 가격 임팩트를 가지므로, 거래 복귀를 피하기 위해 허용도를 그에 맞춰 확대해야 합니다. SDK의 자동 슬리피지 기본값이 `max(0.5%, 2 × price_impact)` 정도인 이유가 이것입니다.
3. **블록 포함 지연.** 멤풀에 여러 블록 동안 머물러 있는 거래는 더 많은 동시 거래에 노출됩니다. Jito 번들과 우선 수수료는 이를 감소시킵니다.

일반적인 규칙 (Raydium UI 기본값):

| 거래 쌍 유형                          | 기본 허용도 |
| -------------------------------- | ------ |
| 스테이블-스테이블 (USDC-USDT, USDC-USDS) | 0.1%   |
| 스테이블-주요 (USDC-SOL, USDC-BTC)     | 0.5%   |
| 주요-주요 (SOL-BTC, SOL-ETH)         | 1%     |
| 변동성 높음 (밈 토큰, 유동성 낮은 롱테일)        | 3–5%   |

## AMM 종류별 차이점

### CPMM

가격 임팩트는 부드럽고 연속적입니다 (폐쇄형 `2 · Δin / reserve_in`). 슬리피지 허용도는 거래 규모에 따라 선형으로 확대됩니다.

### AMM v4

CPMM과 같은 곡선 수학이지만, "유효 준비금"에는 풀의 OpenBook에 게시된 리미트 주문이 포함됩니다. 실제로는:

* 원시 자산 잔액으로 견적하면 준비금을 *저평가*하고 따라서 임팩트를 *과대평가*합니다.
* SDK는 `AmmInfo`를 가져와 `vault + on_book.free + on_book.locked`를 더해서 올바른 수를 얻습니다.
* 오래된 OpenBook 상태 (크랭크 차단)는 견적 임팩트가 온체인 현실과 다르게 나타나게 할 수 있습니다. 애그리게이터는 보통 큰 AMM-v4 거래 전에 (권한 없는 `MonitorStep`으로) 미리 크랭크합니다.

### CLMM

가격 임팩트는 **구간별**입니다. 현재 틱 범위 내에서는 임팩트가 `Δin / L`에 대해 대략 선형입니다. 틱 경계를 넘으면 `L`이 이산적으로 변하면서 한계 가격이 급격히 뛸 수 있습니다. 희소하게 분포된 여러 틱을 넘는 거래는 `2 · Δin / reserve` 경험칙이 제시하는 것보다 훨씬 큰 임팩트를 가질 수 있습니다.

SDK의 CLMM 견적은 스왑 단계를 결정론적으로 반복하여 정확한 예상 `amountOut`을 반환하므로, `minAmountOut = amountOut · (1 − slippage)`는 정확합니다. 하지만 **priceImpact** 반환값은 "거래 전 스팟과 거래 후 스팟 간의 스프레드"로 해석해야 하며, CLMM에서는 `amount_out`만 신경 쓰는 사용자의 유효 슬리피지보다 훨씬 클 수 있습니다.

### LaunchLab 곡선

CPMM과 유사하지만 비대칭 곡선 (이차 또는 가상 준비금) 사용. 곡선이 졸업을 향해 가팔라지면서 후기 구매자의 임팩트가 더 빠르게 증가합니다. 구매자 UI는 한 트랜잭션에서 곡선을 `quote_reserve_target`의 \~5% 이상 밀어낼 것으로 예상될 때 경고해야 합니다.

## MEV 고려사항

솔라나에서 스왑에 대한 MEV 추출은 대부분 **샌드위치 공격** 형태입니다: 봇이 당신의 거래 다음에 거래하는 백런 트랜잭션과, 먼저 거래하는 프런트런 트랜잭션을 모두 같은 슬롯에 배치합니다. 당신의 거래는 샌드위치가 없었을 경우보다 더 나쁜 가격에 체결되고, 백런이 그 차이를 취합니다.

완화 방법:

1. **타이트한 `minAmountOut`.** 공격적인 슬리피지 경계는 피해 트랜잭션이 심하게 샌드위치당할 경우 복귀하도록 하여 자금을 보호합니다 (하지만 가스 낭비). 솔라나에서는 표준 관행입니다. 거부는 비쌉니다.
2. **Jito 번들.** Jito를 통해 번들된 팁과 함께 제출하면 중개인이 트랜잭션 순서를 바꾸지 못하게 합니다. 번들은 원자적 블록으로 도착합니다.
3. **우선 수수료.** 높은 우선 수수료는 당신의 거래가 샌드위처가 반응하기 전에 현재 리더의 블록에 포함될 확률을 증가시킵니다. 번들보다는 덜 강력하지만 더 표준적입니다.
4. **프라이빗 RPC.** 프라이빗 RPC (또는 검증자의 직접 엔드포인트)를 통해 제출하면 멤풀 샌드위처가 당신의 거래를 관찰할 수 있는 시간을 줄입니다.

Raydium SDK는 번들링을 하지 않습니다. 통합자는 보통 그 위에 Jito를 계층화합니다. [`integration-guides/routing-and-mev`](/ko/integration-guides/routing-and-mev)에서 패턴을 확인하세요.

## 다중 홉 라우트의 슬리피지

스왑이 여러 풀을 통해 라우팅될 때 (예: `USDC → SOL → RAY`), 슬리피지 허용도는 끝에서만이 아니라 홉별로 적용해야 합니다:

```ts theme={null}
// Bad: 0.5% applied at the end only, so any intermediate hop sliding fails the second hop.
const finalMin = finalAmount * (1 - 0.005);

// Better: each hop enforces its own bound.
const hop1Min  = hop1Amount * (1 - 0.005);
const hop2Min  = hop2Amount * (1 - 0.005);
// End-to-end this is tighter (compound), but atomic — if either hop degrades, the tx reverts early.
```

SDK의 라우터는 `raydium.trade.swap`을 호출할 때 홉별 경계를 자동으로 적용합니다. 커스텀 라우터의 경우 이 패턴을 복제하세요.

## 사용자에게 보고

좋은 스왑 UI를 위한 일반적인 규칙:

* **예상 가격 임팩트와 슬리피지 허용도를 모두** 따로 표시하세요.
* 가격 임팩트가 \~2%를 초과하면 강조하세요. "높은 임팩트" 경고.
* 가격 임팩트가 허용도를 초과하면 강조하세요. 거래는 거의 확실히 복귀할 것입니다.
* 변동성 높은 쌍의 경우, "높은 슬리피지 모드"를 제공하여 경계를 완화하고 더 강한 경고를 표시하세요.

## 참고 자료

* [`products/cpmm/math`](/ko/products/cpmm/math), [`products/amm-v4/math`](/ko/products/amm-v4/math), [`products/clmm/math`](/ko/products/clmm/math) — 풀 종류별 임팩트 유도.
* [`integration-guides/routing-and-mev`](/ko/integration-guides/routing-and-mev) — 다중 홉 라우팅 + MEV 방어.
* [`integration-guides/priority-fee-tuning`](/ko/integration-guides/priority-fee-tuning) — 슬리피지를 줄이기 위한 우선 수수료 크기 조정.

출처:

* Raydium SDK v2 슬리피지 / 임팩트 구현.
* Flashbots / Jito on Solana MEV.
