메인 콘텐츠로 건너뛰기

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.

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

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

라우팅 프로그램은 가격 책정 로직을 구현하지 않습니다. 순수한 오케스트레이터로, 경로를 받아들이고 하위 프로그램에 계정을 전달하며 토큰 흐름을 연결합니다. 각 홉은 자신의 풀 프로그램 곡선에서 가격을 책정합니다:
  • AMM v4 홉: OpenBook 하이브리드 가격 책정과 함께 상수곱 공식(x · y = k)을 사용합니다. products/amm-v4/math를 참조하세요.
  • CPMM 홉: 구성 가능한 수수료 계층과 함께 상수곱 공식을 사용합니다. products/cpmm/math를 참조하세요.
  • CLMM 홉: 집중 유동성 틱 수학을 사용합니다. algorithms/clmm-math를 참조하세요.
  • Stable 홉: 유사 자산을 위한 스테이블 스왑 곡선을 사용합니다. 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를 참조하세요.
  • 라우터는 다음을 적용합니다:
  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번째 홉의 출력에는 이미 해당 홉의 수수료가 차감되어 있습니다. 개별 풀의 수수료 문서를 참조하세요:

다중 홉 회계 예시

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을 다음 홉에 전파하며, 이는 이를 불충분한 것으로 거부할 수 있습니다. 개별 풀의 오류 코드를 참조하세요.

다음으로 읽을 내용