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 este usuário tem LP? quais posições (NFTs CLMM) ele possui? em quais farms ele está fazendo stake? quanto tudo isso vale? Esta página documenta cada uma.
Detectando posições Raydium
Tokens LP clássicos (CPMM, AMM v4)
Eles parecem como qualquer outro Token SPL: a ATA do usuário mantém um saldo. Uma carteira mostra isso como apenas outro token por padrão. Para revelá-lo como uma posição Raydium LP:- Enumere as contas de token do usuário:
connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }). - 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). - Para mints que correspondem, a API retorna a referência do pool. Use-a para calcular o valor da posição denominado em tokens:
NFTs de posição CLMM
Posições CLMM são NFTs. OPersonalPositionState PDA de cada posição é derivado do mint do NFT. Para detectar:
- Enumere os NFTs do usuário. Para NFTs Metaplex legados: filtre contas de token para aquelas com supply 1 e decimals 0.
- Para cada mint de NFT, tente derivar o PDA PersonalPositionState:
-
Enumere as posições da carteira com
raydium.clmm.getOwnerPositionInfo({ programId })e faça correspondência emnftMint(não hágetPositionInfo). Cada entrada fornece:poolId→ busque o pool para resolver mintstickLower,tickUpper→ exiba o intervaloliquidity,tokensOwedA/B→ calcule o valor da posição + taxas pendentesrewardInfos→ recompensas pendentes por stream
-
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 um tem um PDA de ledger por usuário. Derivações:UserLedger possíveis fazendo hash do usuário com uma lista curada de IDs de farm “prováveis”. Enumerar todos os IDs de farm exaustivamente é impraticável (milhares existem); use a API.
Calculando o valor da posição
CPMM / AMM v4 LP
Os três módulos não compartilham uma assinatura:liquidity.getPoolInfoFromRpc recebe { poolId }, enquanto cpmm.getPoolInfoFromRpc e clmm.getPoolInfoFromRpc recebem uma string base58 posicional.
raydium.token ou um oráculo de preço).
Posição CLMM
- Valor de 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
reward_per_share_x64 com a fórmula de atualização preguiçosa antes de calcular (tempo decorrido × taxa de emissão ÷ total_staked).
Simulação de transação para visualização
Antes de um usuário assinar, carteiras geralmente visualizam as mudanças de saldo. UsesimulateTransaction:
accounts pede ao validador para retornar o estado da conta pós-simulação para 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 arrays de tick válidos. Se o tamanho de entrada do usuário cruzaria em um array de tick não inicializado, a simulação reverte (igual à execução). Superfície isso claramente na UI.
- Taxa de prioridade. A simulação é executada sem as instruções de orçamento de computação aplicadas. Para uma transação grande que excederia o padrão de 200k CU, 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 têm superfícies de risco diferentes:- Mints com taxa de transferência: exiba o
transferFeeBasisPointsatual 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 hook de transferência: superfície o ID do programa do 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 desabilite swap/envio. Estes são tipicamente tokens vinculados à alma ou credenciais.
- Mints com juros: o saldo da UI derivado de
TokenAccount.amountnão reflete juros acumulados. UseamountToUiAmountde@solana/spl-token(que aplica o fator de escala) para o valor exibido.
Exibição de APR de Farm
O APR exibido aos usuários deve combinar todos os streams de recompensa ao vivo, convertidos para USD e anualizados: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
products/clmm/ticks-and-positions— derivação de valor de posição.products/farm-staking/accounts— campos de estado do farm.algorithms/token-2022-transfer-fees— semântica de exibição para tokens com taxa de transferência.
- Raydium SDK v2 — auxiliares de posição/farm.
- Endpoints de posição do usuário em
api-v3.raydium.io.

