Skip to main content
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
Carteiras que integram Raydium normalmente precisam responder quatro perguntas por usuário: em quais pools o usuário tem participação como LP? quais posições (NFTs CLMM) ele detém? em quais farms ele está com stake? qual é o valor total? Esta página documenta cada um desses aspectos.

Detectando posições Raydium

LP tokens clássicos (CPMM, AMM v4)

Parecem qualquer outro SPL Token: a ATA do usuário contém um saldo. Uma carteira exibe isso como apenas outro token por padrão. Para revelar como uma posição Raydium LP:
  1. Enumere as contas de token do usuário: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. Para cada mint, verifique a lista de mints do Raydium: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (agrupe até ~50 LP mints por chamada).
  3. Para mints que correspondem, a API retorna a referência do pool. Use-a para calcular o valor da posição em termos de tokens:
Exiba tanto o saldo de LP quanto os valores desembrulhados — usuários pensam em tokens subjacentes, não em unidades de LP.

NFTs de posição CLMM

Posições CLMM são NFTs. Cada PersonalPositionState PDA de uma posição é derivado do mint do NFT. Para detectar:
  1. Enumere os NFTs do usuário. Para NFTs Metaplex legados: filtre contas de token para aquelas com supply 1 e decimals 0.
  2. Para cada mint de NFT, tente derivar a PDA PersonalPositionState:
  1. Decodifique via raydium.clmm.getPositionInfo({ positionPda }) para obter:
    • poolId → busque o pool para resolver mints
    • tickLower, tickUpper → exiba o intervalo
    • liquidity, tokensOwedA/B → calcule o valor da posição + taxas pendentes
    • rewardInfos → recompensas pendentes por stream
  2. Para NFTs de posição emitidos sob Token-2022 (OpenPositionWithToken22Nft), o programa do mint do NFT é Token-2022 em vez de SPL Token. Enumere ambos ao fazer a varredura.

Stakes em farms

Farm v3 / v5 / v6 cada uma possuem uma PDA de ledger por usuário. Derivações:
Para carteiras que preferem detecção totalmente on-chain: itere possíveis PDAs UserLedger fazendo hash do usuário com uma lista curada de IDs de farms “prováveis”. Enumerar todos os IDs de farms exaustivamente é impraticável (existem milhares); use a API.

Calculando o valor da posição

LP CPMM / AMM v4

Então multiplique cada um pelo preço em USD do mint (de raydium.token ou um oráculo de preços).

Posição CLMM

Renderize como:
  • Valor da liquidez (preço atual)
  • Taxas não coletadas
  • Recompensas pendentes por stream
  • Intervalo: [tickLower_price, tickUpper_price] com uma barra visual mostrando se o preço atual está dentro do intervalo

Stake em farm

Para cálculo on-chain, espelhe a contabilidade da farm:
Certifique-se de atualizar reward_per_share_x64 com a fórmula de lazy-update antes de calcular (tempo decorrido × taxa de emissão ÷ total_staked).

Simulação de transação para pré-visualização

Antes de um usuário assinar, carteiras normalmente fazem pré-visualização das mudanças de saldo. Use simulateTransaction:
O parâmetro accounts solicita ao validador que retorne o estado da conta pós-simulação para os endereços listados. Muito mais preciso do que tentar prever a mudança de saldo apenas pela forma da instrução.

Armadilhas de simulação

  • Swaps CLMM precisam de tick arrays válidos. Se o tamanho de entrada do usuário atravessaria um tick array não inicializado, a simulação reverte (como na execução). Superficialize isso claramente na interface.
  • Taxa de prioridade. A simulação é executada sem as instruções do orçamento de computação aplicadas. Para uma transação grande que ultrapassaria os 200k CU padrão, a simulação falha, mas a execução real com um limite de CU explícito funciona. Sempre defina o limite de CU na tx simulada também.
  • Blockhash fresco. A simulação usa o blockhash atual; se a assinatura levar >60s, a tx se torna inválida. Re-simule se o usuário hesitar.

Exibição Token-2022

Tokens sob o programa Token-2022 devem ser rotulados como tal na lista de tokens da carteira, pois possuem superfícies de risco diferentes:
  • Mints com taxa de transferência: exiba o transferFeeBasisPoints atual como “Taxa de transferência: X%” ao lado do saldo. Avise ao receber — usuários podem não perceber que receberão menos do que o remetente enviou.
  • Mints com transfer-hook: superficialize a ID do programa de hook. Um hook malicioso pode bloquear transferências de saída; usuários devem verificar se o hook é o que esperam.
  • Mints não transferíveis: exiba “Não transferível” e desative swap/envio. Normalmente são tokens vinculados à alma ou credenciais.
  • Mints com juros: o saldo da interface derivado de TokenAccount.amount não reflete juros acumulados. Use amountToUiAmount de @solana/spl-token (que aplica o fator de escala) para o valor exibido.

Exibição de APR em farms

O APR exibido aos usuários deve combinar todos os streams de recompensas ao vivo, convertidos para USD e anualizados:
Exiba como APR: X.Y%. Se o mint de staking for um token LP, também calcule o APR de taxa base do LP subjacente e rotule a soma como “APR Total” ou “APR + taxas”.

Referências

Fontes:
  • SDK Raydium v2 — auxiliares de posição/farm.
  • Endpoints de posição de usuário em api-v3.raydium.io.