Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
Raydium을 통합하는 지갑은 일반적으로 사용자당 네 가지 질문에 답해야 합니다: 이 사용자가 LP를 보유한 풀은 무엇인가? 보유한 포지션(CLMM NFT)은 무엇인가? 스테이킹한 팜은 무엇인가? 이 모든 것의 가치는 얼마인가? 이 페이지에서 각각을 설명합니다.

Raydium 포지션 감지

클래식 LP 토큰 (CPMM, AMM v4)

이들은 다른 SPL 토큰처럼 보입니다: 사용자의 ATA가 잔액을 보유합니다. 지갑은 기본적으로 이를 다른 토큰으로 표시합니다. Raydium LP 포지션으로 표시하려면:
  1. 사용자의 토큰 계정을 열거합니다: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. 각 민트에 대해 Raydium의 민트 목록을 확인합니다: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (호출당 최대 ~50개의 LP 민트를 배치).
  3. 일치하는 민트의 경우 API가 풀 참조를 반환합니다. 이를 사용하여 포지션의 토큰 단위 가치를 계산합니다:
LP 잔액과 언래핑된 금액을 모두 표시합니다 — 사용자는 LP 단위가 아닌 기초 토큰으로 생각합니다.

CLMM 포지션 NFT

CLMM 포지션은 NFT입니다. 각 포지션의 PersonalPositionState PDA는 NFT 민트에서 파생됩니다. 감지하려면:
  1. 사용자의 NFT를 열거합니다. 레거시 Metaplex NFT의 경우: 공급량이 1이고 소수 자릿수가 0인 토큰 계정으로 필터링합니다.
  2. 각 NFT 민트에 대해 PersonalPositionState PDA를 파생시키려고 시도합니다:
  1. raydium.clmm.getOwnerPositionInfo({ programId })로 지갑의 포지션을 열거하고 nftMint와 일치시킵니다 (getPositionInfo는 없습니다). 각 항목은 다음을 제공합니다:
    • poolId → 풀을 가져와 민트를 해결합니다
    • tickLower, tickUpper → 범위 표시
    • liquidity, tokensOwedA/B → 포지션 가치 + 미수령 수수료 계산
    • rewardInfos → 스트림당 미수령 보상
  2. Token-2022 (OpenPositionWithToken22Nft)에서 발행된 포지션 NFT의 경우 NFT 민트의 프로그램은 SPL 토큰이 아닌 Token-2022입니다. 스캔할 때 둘 다 열거합니다.

팜 스테이크

팜 v3 / v5 / v6은 각각 사용자별 원장 PDA를 가집니다. 파생:
완전한 온체인 감지를 선호하는 지갑의 경우: 큐레이션된 “가능성 있는” 팜 ID 목록으로 사용자를 해싱하여 가능한 UserLedger PDA를 반복합니다. 모든 팜 ID를 철저히 열거하는 것은 비실용적입니다 (수천 개 존재). API를 사용합니다.

포지션 가치 계산

CPMM / AMM v4 LP

세 모듈은 서명을 공유하지 않습니다: liquidity.getPoolInfoFromRpc는 { poolId }를 취하는 반면 cpmm.getPoolInfoFromRpc와 clmm.getPoolInfoFromRpc는 위치 기반 base58 문자열을 취합니다.
그런 다음 각각에 민트의 USD 가격을 곱합니다 (raydium.token 또는 가격 오라클에서).

CLMM 포지션

다음과 같이 렌더링합니다:
  • 유동성 가치 (현재 가격)
  • 미수령 수수료
  • 스트림당 미수령 보상
  • 범위: [tickLower_price, tickUpper_price] 현재 가격이 범위 내인지 여부를 보여주는 시각적 막대 포함

팜 스테이크

온체인 계산의 경우 팜의 회계를 미러링합니다:
계산하기 전에 지연 업데이트 공식으로 reward_per_share_x64를 새로고침해야 합니다 (경과 시간 × 배출 속도 ÷ 총_스테이킹).

미리보기를 위한 거래 시뮬레이션

사용자가 서명하기 전에 지갑은 일반적으로 잔액 변화를 미리봅니다. simulateTransaction을 사용합니다:
accounts 매개변수는 검증자에게 나열된 주소에 대한 시뮬레이션 후 계정 상태를 반환하도록 요청합니다. 명령 형태만으로 잔액 변화를 예측하려는 것보다 훨씬 더 정확합니다.

시뮬레이션 함정

  • CLMM 스왑은 유효한 틱 배열이 필요합니다. 사용자의 입력 크기가 초기화되지 않은 틱 배열로 교차하면 시뮬레이션이 되돌아갑니다 (실행과 동일). UI에서 이를 명확하게 표시합니다.
  • 우선순위 수수료. 시뮬레이션은 계산 예산 명령이 적용되지 않은 상태에서 실행됩니다. 기본 200k CU를 초과하는 큰 거래의 경우 시뮬레이션은 실패하지만 명시적 CU 제한이 있는 실제 실행은 성공합니다. 시뮬레이션된 거래에도 항상 CU 제한을 설정합니다.
  • 새로운 블록해시. 시뮬레이션은 현재 블록해시를 사용합니다; 서명이 60초 이상 걸리면 거래가 무효화됩니다. 사용자가 주저하면 다시 시뮬레이션합니다.

Token-2022 표시

Token-2022 프로그램의 토큰은 지갑의 토큰 목록에서 레이블을 지정해야 합니다. 다른 위험 표면을 가지기 때문입니다:
  • 전송 수수료 민트: 현재 transferFeeBasisPoints를 잔액 옆에 “전송 수수료: X%“로 표시합니다. 수신할 때 경고합니다 — 사용자는 발신자가 보낸 것보다 적게 받을 것임을 깨닫지 못할 수 있습니다.
  • 전송 훅 민트: 훅 프로그램 ID를 표시합니다. 악의적인 훅은 아웃바운드 전송을 차단할 수 있습니다; 사용자는 훅이 예상한 것인지 확인해야 합니다.
  • 양도 불가능한 민트: “양도 불가능”을 표시하고 스왑/전송을 비활성화합니다. 이들은 일반적으로 소울바운드 토큰 또는 자격증입니다.
  • 이자 베어링 민트: TokenAccount.amount에서 파생된 UI 잔액은 미수령 이자를 반영하지 않습니다. @solana/spl-token의 amountToUiAmount를 사용합니다 (스케일링 팩터를 적용함). 표시된 값의 경우.

팜 APR 표시

사용자에게 표시되는 APR은 모든 라이브 보상 스트림을 결합하고 USD로 변환하며 연간화해야 합니다:
APR: X.Y%로 표시합니다. 스테이킹 민트가 LP 토큰인 경우 기초 LP의 기본 수수료 APR도 계산하고 합계를 “총 APR” 또는 “APR + 수수료”로 레이블합니다.

포인터

출처:
  • Raydium SDK v2 — 포지션/팜 헬퍼.
  • api-v3.raydium.io의 사용자 포지션 엔드포인트.