Skip to main content
Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
Las billeteras que integran Raydium suelen necesitar responder cuatro preguntas por usuario: ¿en qué pools tiene este usuario LP? ¿qué posiciones (NFTs de CLMM) posee? ¿en qué granjas tiene apuestas? ¿cuánto vale todo? Esta página documenta cada uno.

Detección de posiciones Raydium

Tokens LP clásicos (CPMM, AMM v4)

Se ven como cualquier otro SPL Token: la ATA del usuario mantiene un saldo. Una billetera muestra esto como otro token más por defecto. Para revelarlo como una posición LP de Raydium:
  1. Enumera las cuentas de token del usuario: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. Para cada mint, consulta la lista de mints de Raydium: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (agrupa hasta ~50 LP mints por llamada).
  3. Para los mints que coincidan, la API devuelve la referencia del pool. Úsala para calcular el valor denominado en tokens de la posición:
Muestra tanto el saldo de LP como los montos desenvueltos — los usuarios piensan en tokens subyacentes, no en unidades de LP.

NFTs de posición CLMM

Las posiciones de CLMM son NFTs. El PDA PersonalPositionState de cada posición se deriva del mint del NFT. Para detectar:
  1. Enumera los NFTs del usuario. Para NFTs Metaplex heredados: filtra las cuentas de token a aquellas con oferta 1 y decimales 0.
  2. Para cada mint de NFT, intenta derivar el PDA PersonalPositionState:
  1. Decodifica vía raydium.clmm.getPositionInfo({ positionPda }) para obtener:
    • poolId → obtén el pool para resolver los mints
    • tickLower, tickUpper → muestra el rango
    • liquidity, tokensOwedA/B → calcula el valor de la posición + comisiones pendientes
    • rewardInfos → recompensas pendientes por stream
  2. Para NFTs de posición emitidos bajo Token-2022 (OpenPositionWithToken22Nft), el programa del mint del NFT es Token-2022 en lugar de SPL Token. Enumera ambos al escanear.

Apuestas en granjas

Farm v3 / v5 / v6 cada uno tienen un PDA de ledger por usuario. Derivaciones:
Para billeteras que prefieren detección completamente en cadena: itera los PDAs UserLedger posibles hasheando el usuario con una lista seleccionada de IDs de granjas “probables”. Enumerar exhaustivamente todos los IDs de granjas es impracticable (existen miles); usa la API.

Cálculo del valor de la posición

LP de CPMM / AMM v4

Luego multiplica cada uno por el precio USD del mint (desde raydium.token u un oráculo de precios).

Posición CLMM

Presenta como:
  • Valor de liquidez (precio actual)
  • Comisiones no cobradas
  • Recompensas pendientes por stream
  • Rango: [tickLower_price, tickUpper_price] con una barra visual que muestre si el precio actual está dentro del rango

Apuesta en granja

Para cálculo en cadena, refleja la contabilidad de la granja:
Asegúrate de actualizar reward_per_share_x64 con la fórmula de actualización perezosa antes de calcular (tiempo transcurrido × tasa de emisión ÷ total_apuestado).

Simulación de transacciones para vista previa

Antes de que un usuario firme, las billeteras suelen previsualizar los cambios de saldo. Usa simulateTransaction:
El parámetro accounts le pide al validador que devuelva el estado de la cuenta posterior a la simulación para las direcciones listadas. Mucho más preciso que intentar predecir el cambio de saldo únicamente por la forma de la instrucción.

Trampas de simulación

  • Los swaps de CLMM necesitan arrays de ticks válidos. Si el tamaño de entrada del usuario cruzaría hacia un array de ticks no inicializado, la simulación revierte (igual que la ejecución). Muestra esto claramente en la interfaz.
  • Comisión de prioridad. La simulación se ejecuta sin las instrucciones de presupuesto de cálculo aplicadas. Para una transacción grande que excedería el CU predeterminado de 200k, la simulación falla pero la ejecución real con un límite de CU explícito tiene éxito. Siempre establece el límite de CU en la tx simulada también.
  • Blockhash fresco. La simulación usa el blockhash actual; si la firma tarda >60s la tx se vuelve inválida. Resimula si el usuario duda.

Visualización de Token-2022

Los tokens bajo el programa Token-2022 deben etiquetarse como tales en la lista de tokens de la billetera, ya que tienen superficies de riesgo diferentes:
  • Mints de tarifa de transferencia: muestra los actuales transferFeeBasisPoints como “Tarifa de transferencia: X%” junto al saldo. Advierte al recibir — los usuarios pueden no darse cuenta de que recibirán menos de lo que el remitente envió.
  • Mints de gancho de transferencia: expón el ID del programa del gancho. Un gancho malicioso puede bloquear transferencias salientes; los usuarios deben verificar que el gancho sea el que esperan.
  • Mints no transferibles: muestra “No transferible” e inhabilita swap/envío. Estos suelen ser tokens vinculados al alma o credenciales.
  • Mints que generan interés: el saldo de la interfaz derivado de TokenAccount.amount no refleja el interés acumulado. Usa amountToUiAmount desde @solana/spl-token (que aplica el factor de escala) para el valor mostrado.

Visualización de APR de granjas

El APR mostrado a los usuarios debe combinar todos los streams de recompensas en vivo, convertidos a USD, y anualizados:
Muestra como APR: X.Y%. Si el mint de apuestas es un token de LP, también calcula el APR de tarifa base del LP subyacente y etiqueta la suma como “APR total” o “APR + comisiones”.

Referencias

Fuentes:
  • Raydium SDK v2 — ayudantes de posición/granja.
  • Endpoints de posición de usuario en api-v3.raydium.io.