Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →

두 가지 서로 다른 개념

**가격 영향(Price impact)**과 **슬리피지(Slippage)**는 UI에서 자주 혼동되지만 서로 다른 의미입니다.
  • 가격 영향은 특정 풀 상태에 대한 거래의 결정론적 속성입니다. (Δin, reserves)이 주어지면 가격 영향은 거래 제출 전에 완전히 계산할 수 있습니다.
  • 슬리피지는 견적 시점에 예상했던 가격과 실행 시점에 실제로 받은 가격 사이의 실현된 차이입니다. 이는 지연 시간, 동시 거래, 블록 포함 순서의 함수이며 풀 수학과는 무관합니다.
한적한 풀에 대한 1% 견적이 다음 블록에 포함되면 슬리피지는 0%입니다. 그 1%는 가격 영향이었던 것입니다. 다른 거래가 먼저 풀을 건드리면 같은 견적이 0.2% 더 나빠집니다. 그 추가 0.2%가 슬리피지입니다.

형식적 정의

가격 영향

CPMM의 경우: 작은 거래에 대해 impact ≈ 2 · Δin / reserve_in. CLMM의 경우: 거래가 교차하는 틱의 개수에 따라 달라지며, 현재 틱 범위 내에서는 대체로 평탄하고 각 틱 교차에서 점프합니다.

실현된 슬리피지

슬리피지는 항상 음이 아닙니다(또는 0입니다). 견적이 정직했다고 가정하면 음수 값은 견적보다 더 많이 받았다는 의미이며, 이는 견적과 실행 사이에 풀 상태가 당신에게 유리하게 움직였을 때 가능합니다.

minAmountOut과 maxAmountIn 크기 결정

모든 Raydium 스왑은 슬리피지 보호 한계를 사용합니다:
  • SwapBaseInput(amount_in, min_amount_out) — 정확한 입력, 출력의 하한.
  • SwapBaseOutput(max_amount_in, amount_out) — 정확한 출력, 입력의 상한.
SDK는 제품별로 이를 계산하며, 세 가지는 하나의 서명을 공유하지 않습니다:
세 가지 모두에서 minAmountOut은 amountOut × (1 − slippage)이며 온체인 한계로 사용됩니다. priceImpact는 풀 상태만으로 결정론적이고, fee는 부과된 총액입니다. 슬리피지 허용치는 가격 영향 자체가 아니라 가격 영향 주변의 버퍼입니다. 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 기본값):

AMM 유형별 차이점

CPMM

가격 영향은 부드럽고 연속적입니다 (폐쇄형 2 · Δin / reserve_in). 슬리피지 허용치는 거래 규모에 따라 선형으로 조정됩니다.

AMM v4

CPMM과 동일한 곡선 수학입니다. OpenBook 제거 이후, “유효 준비금”은 단순히 두 개의 볼트 잔액입니다:
  • 원시 볼트 잔액에서 견적을 받습니다. 추가할 온북 구성 요소는 없습니다. Initialize2는 모든 새 풀에서 AmmInfo.open_orders = Pubkey::default()를 작성하고, 어떤 명령도 OpenOrders 계정을 읽지 않습니다.
  • 누적된 프로토콜 PnL (state_data.need_take_pnl_coin / need_take_pnl_pc)을 볼트 잔액에서 빼서 불변식이 실제로 사용하는 준비금을 얻습니다.
  • 미리 실행할 크랭크는 없습니다: MonitorStep은 이제 unimplemented!로 패닉하며 전송되면 안 됩니다.

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 고려사항

Solana에서 스왑에 대한 MEV 추출은 주로 샌드위치 공격 형태입니다: 봇이 당신의 거래 후에 거래하는 백런 거래와 전에 거래하는 프런트런을 같은 슬롯에 배치합니다. 당신의 거래는 샌드위치가 없었을 때보다 더 나쁜 가격으로 채워지고, 백런이 그 차이를 포착합니다. 완화 방법:
  1. 엄격한 minAmountOut. 공격적인 슬리피지 한계는 피해자 거래가 심하게 샌드위치되면 되돌리게 하여 자금을 보호합니다 (하지만 가스를 낭비합니다). Solana에서는 이것이 표준 관행입니다. 거부는 저렴합니다.
  2. Jito 번들. Jito를 통해 번들 팁으로 제출하면 중개자가 당신의 tx를 재정렬하지 못하게 합니다. 번들은 원자적 블록으로 착지합니다.
  3. 우선 수수료. 높은 우선 수수료는 당신의 거래가 샌드위처가 반응하기 전에 현재 리더의 블록에 착지할 가능성을 높입니다. 번들보다 덜 견고하지만 더 표준적입니다.
  4. 프라이빗 RPC. 프라이빗 RPC를 통해 제출하거나 검증자의 직접 엔드포인트를 통해 제출하면 멤풀 샌드위처가 당신의 거래를 관찰할 수 있는 창을 줄입니다.
Raydium의 SDK는 번들하지 않습니다. 통합자는 일반적으로 Jito를 위에 계층화합니다. 패턴은 integration-guides/routing-and-mev를 참조하세요.

멀티홉 라우트의 슬리피지

스왑이 여러 풀을 통해 라우팅될 때 (예: USDC → SOL → RAY), 슬리피지 허용치는 끝에서 끝까지만이 아니라 홉별로 적용되어야 합니다:
SDK의 라우터는 raydium.tradeV2.swap을 호출할 때 홉별 한계를 자동으로 적용합니다. (파사드는 tradeV2입니다. raydium.trade는 존재하지 않습니다.) 사용자 정의 라우터의 경우 패턴을 복제하세요.

사용자에게 보고

좋은 스왑 UI를 위한 경험 법칙:
  • 예상 가격 영향과 슬리피지 허용치를 모두 별도로 표시합니다.
  • 가격 영향이 약 2%를 초과할 때 강조합니다. “높은 영향” 경고.
  • 가격 영향이 허용치를 초과할 때 강조합니다. 거래는 거의 확실히 되돌릴 것입니다.
  • 변동성 페어의 경우, 한계를 완화하고 더 강한 경고를 표시하는 “높은 슬리피지 모드”를 제공합니다.

포인터

출처:
  • Raydium SDK v2 슬리피지 / 영향 구현.
  • Flashbots / Solana의 Jito MEV.