Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
Raydium의 핵심 상품은 가격 책정을 위해 외부 오라클에 의존하지 않습니다 — 풀 상태 자체가 오라클입니다. 하지만 API와 SDK는 사용자에게 표시되는 USD 가격 책정을 위해 외부 오라클을 사용하며, Token-2022 민트는 SPL Token보다 더 풍부한 제어 집합을 제공합니다. 일부는 풀의 신뢰 모델을 근본적으로 변경합니다. 이 페이지는 둘 다를 정리합니다.

Raydium의 오라클

내부: 풀이 오라클입니다

AMM v4, CPMM, CLMM의 경우 프로토콜의 “현재 가격” 정의는 풀 상태만으로 도출됩니다:
  • AMM v4 / CPMM: price = vaultB_balance / vaultA_balance (소수점 자리 고려).
  • CLMM: price = (sqrtPriceX64 / 2^64)^2 × 10^(decimalsA - decimalsB).
스왑, 예치, 또는 인출 중에 외부 오라클을 참조하지 않습니다. 이것이 AMM 설계의 “신뢰 없음” 부분입니다: 풀 수학이 올바르면 가격 피드의 외부 조작이 이를 손상시킬 수 없습니다.

CLMM ObservationState를 TWAP 오라클로 사용

CLMM 풀은 과거 sqrt_price 스냅샷을 기록하는 ObservationState 계정을 유지합니다. 다른 프로그램은 이를 구성하여 조작 저항성 시간 가중 평균 가격을 도출할 수 있습니다:
이것은 Uniswap V3이 사용하는 것과 동일한 패턴입니다. 단기 가격 조작 (고래가 풀을 일시적으로 밀어붙임) 은 수백 개의 슬롯에 걸쳐 평균화되기 때문에 TWAP을 손상시키지 않습니다. CLMM 민트에 대해 더 안전한 가격 피드가 필요한 프로그램 (청산 오라클, 옵션 가격 책정 등) 은 즉시 가격이 아닌 ObservationState TWAP을 사용해야 합니다. CLMM 즉시 가격을 구성성을 위해 사용하지 마세요. 단일 대규모 스왑은 얕은 풀에서 현물 가격을 10% 이상 밀어붙일 수 있습니다. TWAP은 이를 완화합니다. 데이터 레이아웃은 products/clmm/accounts#observation-state를 참조하세요.

외부: 프론트엔드/API의 USD 가격 책정

Raydium의 프론트엔드와 api-v3.raydium.io는 USD 값 (TVL, 수수료 APR, $ 거래량) 을 표시합니다. 이들은 다음에서 옵니다:
  • Pyth — 주요 민트의 기본 오라클.
  • Jupiter의 집계 가격 — 폴백.
  • 풀 도출 가격 — 외부 오라클 범위가 없는 롱테일 민트.
USD 표시는 순전히 미용입니다 — 온체인 작업은 Pyth를 읽지 않으며 풀 수학은 USD를 사용하지 않습니다. Pyth가 민트에 대한 데이터 제공을 중단하면 UI는 ”—“를 표시합니다. 풀은 계속 작동합니다.

Raydium 풀에 적용되지 않는 오라클 조작

풀 상태가 오라클이기 때문에 버그 바운티 문헌이 의미하는 의미의 “오라클 공격”은 없습니다 — 공격자가 손상시킬 수 있는 외부 조작 가능한 데이터 소스가 없습니다. 풀 상태에 대한 경제적 공격 (플래시 론 스타일 조작) 은 security/attack-vectors에서 다룹니다.

Token-2022 확장 위험

SPL Token-2022 (일명 “Token Extensions”) 는 확장을 통해 민트에 구성 가능한 동작을 추가합니다. 일부 확장은 이를 포함하는 풀의 신뢰 속성을 변경합니다. Raydium 프로그램은 일부를 자동으로 처리하고 다른 것은 사용자 경고로 표시합니다.

전송 수수료

정의: 모든 전송에서 발신자가 민트 권한에 지불하는 구성 가능한 수수료 (전송의 백분율, 절대 항으로 maximum_fee 상한까지). 위험: 수수료는 민트의 수수료 구성 권한에 의해 변경될 수 있습니다. 수수료가 1%일 때 유동성을 예치하고 권한이 이를 50%로 올리면 후속 스왑은 예상보다 훨씬 적게 반환합니다. Raydium의 완화: 풀은 스왑 시간에 현재 transferFeeConfig를 읽고 수학을 조정합니다. 풀 자체는 손상되지 않지만 사용자는 더 나쁜 출력을 봅니다. 수수료 권한은 또한 지연된 수수료 변경을 예약할 수 있습니다. Raydium의 UI는 임박한 수수료 변경이 있는 풀을 표시합니다. 잔여 위험: 악의적인 수수료 권한이 진행 중인 스왑 중에 수수료를 변경하면 minimumAmountOut이 하락을 보호합니다 — tx가 되돌려집니다. 민트 발행자를 신뢰하면 괜찮습니다. 신뢰하지 않으면 LP를 하지 마세요.

전송 훅

정의: 전송은 별도의 프로그램 (“훅”) 을 호출하여 사용자 정의 검증 또는 부작용을 실행합니다. 위험: 훅은 스왑 중 풀의 내부 전송을 포함한 모든 전송을 차단할 수 있습니다. 업그레이드 가능한 훅은 나중에 악의적이 될 수 있습니다 — 예치 시간에 안전했던 것이 인출 시간에 스왑 불가능해질 수 있습니다. Raydium의 완화: Raydium은 풀 상태에 훅 프로그램 ID를 나열합니다. 통합은 훅 프로그램 ID를 사용자에게 표시하여 예상되는 (업그레이드 불가능하고 감사된) 프로그램인지 확인할 수 있도록 해야 합니다. 잔여 위험: 훅이 업그레이드 가능하고 그 권한이 적대적이 되면 풀이 동결될 수 있습니다. Raydium은 전송 훅이 있는 풀을 차단하지 않지만 표시합니다. 훅이 안전하다고 확인된 경우에만 전송 훅 풀에 LP하세요.

동결 권한

정의: 민트의 동결 권한은 해당 민트를 보유하는 모든 토큰 계정을 동결하여 모든 전송을 방지할 수 있습니다. 위험: 풀의 금고 계정을 동결할 수 있는 동결 권한은 풀을 효과적으로 종료합니다 — 사용자는 인출할 수 없고 거래자는 스왑할 수 없습니다. 이는 SPL Token Token-2022에 적용됩니다. Token-2022의 새로운 것이 아니지만 여전히 위험입니다. Raydium의 완화: 프로그램 수준에서는 없습니다 — SPL Token의 동결은 풀에 불투명합니다. Raydium의 UI는 동결 가능한 민트가 있는 풀에 경고합니다. 예치하는 사용자는 동결 권한이 null이거나 신뢰하는 멀티시그인지 확인해야 합니다 (USDC는 동결 권한을 가지고 있습니다. 발행자 Circle입니다). 잔여 위험: 동결 가능한 민트를 동결할 수 있다는 것을 수용하세요. 주요 민트 (USDC, USDT, USDY) 는 발행자가 보유한 동결 권한을 가지고 있으며 규제 준수에만 사용됩니다. 이는 일반적으로 허용됩니다.

CLMM 제한된 발행자 포지션 NFT

CLMM은 선택된 KYC 제한 발행자 동결 권한에 대한 추가 제어를 적용합니다. 풀 민트 중 하나의 동결 권한이 프로그램의 하드코딩된 목록과 일치하면 OpenPositionV2 또는 OpenPositionWithToken22Nft를 통해 열린 새 포지션의 NFT 토큰 계정이 즉시 동결됩니다. 해당 풀 PDA는 포지션 NFT 민트의 동결 권한입니다. 이는 포지션이 승인되지 않은 지갑으로 전송되거나 토큰 계정 소유자를 변경하는 것을 방지합니다. 기본 토큰 발행자에게 포지션 NFT의 제어를 제공하지 않습니다: CLMM 풀 PDA만이 포지션 NFT 동결 권한이며 프로그램은 ClosePosition 전에 해제하는 데만 사용합니다. 유동성 관리 및 수수료 또는 보상 수집은 계속 NFT 소유자가 필요합니다. 기존 포지션은 동결되지 않습니다. 통합자는 전송 가능성을 포지션별 상태로 취급하고 NFT 토큰 계정의 isFrozen 플래그를 읽어야 합니다.

영구 위임자

정의: 승인 없이 모든 보유자로부터 토큰을 전송할 수 있는 영구 위임자를 지정하는 Token-2022 확장입니다. 위험: 영구 위임자는 언제든지 풀의 금고를 비울 수 있습니다. Raydium의 완화: CPMM과 CLMM은 영구 위임자가 있는 민트로 풀을 생성하기를 거부합니다. 초기화가 되돌려집니다. 실행 중인 Raydium 풀에는 영구 위임자 민트가 없습니다. 잔여 위험: 0 (검사가 올바른 한, 두 감사 모두 확인함).

전송 불가능

정의: 보유자가 전송할 수 없는 민트입니다. 위험: 풀은 사용자 ATA와 풀 금고 간에 토큰을 이동하기 위해 전송 가능성에 의존합니다. 전송 불가능한 민트는 풀을 사소하게 깨뜨립니다. Raydium의 완화: 풀 생성은 전송 불가능한 민트에서 되돌려집니다. 팜도 전송 불가능한 스테이킹 민트를 거부합니다.

기본 동결 / 종료 권한 / 이자 베어링

Raydium이 처리하는 낮은 영향 확장:
  • 기본 동결: 새 토큰 계정은 사용 전에 해제되어야 합니다. Raydium은 ATA 생성 시 이를 투명하게 처리합니다.
  • 종료 권한: 지정된 권한이 토큰 계정을 종료할 수 있습니다. 풀 금고는 풀의 프로그램 도출 권한이 소유하므로 민트의 종료 권한은 금고에 적용되지 않습니다.
  • 이자 베어링: 표시된 잔액이 이자를 발생시킵니다. amount는 고정되지만 uiAmount는 증가합니다. Raydium 풀 수학은 이자 발생이 아닌 amount를 사용합니다. 표시는 별도로 조정됩니다.

민트 권한

Token-2022 특정 위험이 아니지만 주목할 가치가 있습니다: 민트가 민트 권한을 유지하면 보유자는 공급을 자유롭게 팽창시킬 수 있습니다. 출시된 토큰의 경우 이는 풀의 현재 가격에서 LP를 희석합니다. LaunchLab은 민트 권한이 null이 아닌 한 출시를 생성하기를 거부합니다.

UI의 위험 레이블

Raydium의 프론트엔드는 각 풀을 적용 가능한 위험 태그로 레이블합니다:
  • TRANSFER_FEE — 0이 아닌 전송 수수료.
  • TRANSFER_HOOK — 전송 훅 확장이 활성화됨.
  • FREEZE — 민트에 동결 권한이 있음.
  • MINT — 민트에 민트 권한이 있음 (공급이 팽창할 수 있음).
  • CLOSE — 민트에 종료 권한이 있음.
Raydium의 API를 사용하는 집계자는 이러한 레이블을 사용자에게 표시해야 합니다.

통합자 체크리스트

Raydium 풀과 구성하기 전에:
  • getMint(mint, TOKEN_2022_PROGRAM_ID)를 통해 각 민트의 확장을 확인하세요.
  • permanent_delegate 또는 non_transferable이 있는 민트가 있는 풀을 건너뛰세요 (이들은 Raydium에 존재하지 않아야 하지만 심층 방어).
  • 두 민트 모두의 동결 권한을 확인하세요. null 또는 신뢰하는 권한만.
  • 포지션 전송, 에스크로우 또는 Burn & Earn을 제공하기 전에 CLMM 포지션 NFT 토큰 계정이 동결되지 않았는지 확인하세요.
  • 전송 훅 풀의 경우 훅 프로그램 ID를 화이트리스트와 비교하여 확인하세요.
  • 전송 수수료 시나리오에 대해 노출을 크기 조정하세요 (수수료가 최대로 올라가면 어떻게 될까요?).
  • 현물 가격이 아닌 CLMM TWAP (ObservationState) 을 파생 상품 가격 책정에 사용하세요.

잔여 위험 수용 성명

Raydium의 프로그램은 프로그램 수준에서 적용할 수 있는 것을 적용합니다:
  • 풀 생성은 permanent_delegate / non_transferable 민트를 거부합니다.
  • 스왑 수학은 현재 전송 수수료에 대해 올바르게 조정됩니다.
  • ObservationState는 조작 저항성 오라클을 제공합니다.
사용자가 수용해야 하는 잔여 위험:
  • 민트의 동결 권한은 풀을 동결할 수 있습니다.
  • 민트의 수수료 권한은 언제든지 전송 수수료를 올릴 수 있습니다 (maximum_fee 상한까지).
  • 전송 훅 프로그램은 악의적인 코드로 업그레이드될 수 있습니다.
  • 이자 베어링 민트의 발생 비율을 변경할 수 있습니다.
올바른 방어는 LP 전 실사입니다: 신뢰하지 않는 집중된 권한이 있는 민트가 있는 풀에 예치하지 마세요. Raydium은 그 신뢰를 당신을 위해 결정할 수 없습니다. 관련 사실만 표시할 수 있습니다.

포인터

출처:
  • SPL Token-2022 확장 문서.
  • 풀 초기화 검증 로직: src/raydium/cpmm/instrument.ts, src/raydium/clmm/instrument.ts.
  • Pyth — 프론트엔드에서 사용되는 외부 가격 오라클.