Skip to main content
O método RPC getTokenAccountsByOwner é usado para recuperar todas as contas SPL Token possuídas por uma chave pública específica. Este é um método fundamental para carteiras e aplicações que precisam exibir as posses de tokens de um usuário ou interagir com suas várias contas de tokens. Você deve filtrar a consulta por um token específico mint ou um programId (por exemplo, o SPL Token Program ou Token-2022 Program). Para carteiras com amplos portfólios de tokens, considere usar o getTokenAccountsByOwnerV2 que oferece suporte a paginação baseada em cursor com tamanhos de página configuráveis até 10.000 contas por requisição.

Casos de Uso Comuns

  • Exibição de Portfólio do Usuário: Obtenção de todas as contas de tokens (e, portanto, saldos) para o endereço de carteira de um usuário para mostrar seu portfólio completo de tokens.
  • Lógica de Aplicação: Identificação de uma conta de token específica de um usuário para um determinado mint antes de iniciar uma transferência ou outra interação.
  • Verificação: Verificação de quais contas de tokens um proprietário possui para um determinado tipo de token.
  • Indexação de Detentores de Tokens: Embora menos eficiente para indexação global do que outros métodos, pode ser usada para encontrar contas para um conjunto conhecido de proprietários.

Parâmetros de Requisição

  1. ownerPubkey (string, obrigatório): A chave pública codificada em base-58 do proprietário da conta cuja contas de tokens você deseja recuperar.
  2. filter (objeto, obrigatório): Um objeto JSON que deve especificar mint ou programId:
    • mint (string): A chave pública codificada em base-58 de um mint de token específico. Se fornecido, apenas contas de token para este mint possuídas por ownerPubkey serão retornadas.
    • programId (string): A chave pública codificada em base-58 do Programa de Tokens que governa as contas. Valores comuns são:
      • SPL Token Program: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
      • Token-2022 Program: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  3. options (objeto, opcional): Um objeto de configuração opcional que pode incluir:
    • commitment (string, opcional): Especifica o nível de compromisso.
    • encoding (string, opcional): A codificação para dados da conta. "jsonParsed" é altamente recomendada. Outras opções: "base64", "base64+zstd". O padrão é "base64".
    • dataSlice (objeto, opcional): Para recuperar um segmento específico dos dados da conta (offset: usize, length: usize). Apenas para codificações base58, base64, ou base64+zstd.
    • minContextSlot (u64, opcional): O slot mínimo para a consulta.

Estrutura de Resposta

O campo result.value na resposta JSON-RPC é um array de objetos. Cada objeto corresponde a uma conta SPL Token possuída por ownerPubkey e que corresponde ao filter. Cada objeto no array value contém:
  • pubkey (string): A chave pública codificada em base-58 da própria conta de token.
  • account (objeto): Informações detalhadas sobre a conta de token:
    • lamports (u64): Saldo de Lamport para isenção de aluguel.
    • owner (string): O programa proprietário (por exemplo, a chave pública do Programa de Tokens).
    • data: Dados da conta. Se a codificação "jsonParsed" for usada, isto contém:
      • program (string): por exemplo, "spl-token".
      • parsed: Um objeto com informações estruturadas:
        • info: Detalhes como:
          • mint (string): O endereço do mint do token.
          • owner (string): O proprietário da conta de token (isso deve corresponder ao ownerPubkey da requisição).
          • tokenAmount (objeto): O saldo de tokens (amount, decimals, uiAmount, uiAmountString).
          • state (string): Estado da conta de token (por exemplo, "initialized").
          • isNative (booleano): Se a conta possui SOL encapsulado.
          • delegate (string, opcional): O endereço do delegado, se houver.
          • delegatedAmount (objeto, opcional): O valor delegado se um delegado estiver definido.
        • type (string): por exemplo, "account".
    • executable (booleano): Se a conta é executável.
    • rentEpoch (u64): Próxima época de vencimento do aluguel.
    • space (u64, se não jsonParsed): Comprimento dos dados brutos da conta em bytes.
Exemplo de Resposta (com codificação jsonParsed, filtrado por programId):

Exemplos de Código

Dicas para Desenvolvedores

  • Requisito de Filtro: Você deve fornecer mint ou programId no filtro. Não é possível consultar todas as contas de token para um proprietário em todos os tipos de token sem um desses filtros principais.
  • Contas de Tokens Associados: Este método retornará todas as contas de token possuídas pela chave pública, incluindo Contas de Tokens Associadas padrão (ATAs) e quaisquer outras contas SPL de token que possam possuir (por exemplo, de implementações de carteiras mais antigas ou configurações personalizadas).
  • Codificação: Usar "jsonParsed" para a opção encoding é altamente recomendado. Ele decodifica os dados binários da conta em uma estrutura JSON mais utilizável.
  • Desempenho: Se um proprietário tiver um número muito grande de contas de token (especialmente ao filtrar apenas por programId), a resposta poderá ser grande. Para esses casos, use o getTokenAccountsByOwnerV2 que oferece suporte embutido para paginação.
  • Token-2022 (Extensões de Token): Se estiver trabalhando com tokens criados usando o programa Token-2022 (que suporta extensões como taxas de transferência, juros, etc.), certifique-se de usar o programId correto: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
Este guia fornece uma compreensão completa do método RPC getTokenAccountsByOwner, permitindo que você recupere informações de contas de tokens de forma eficiente para qualquer endereço Solana.

Paginação para Grandes Portfólios de Tokens

Para carteiras com extensas posses de tokens, use getTokenAccountsByOwnerV2 que oferece:
  • Paginação baseada em cursor: Defina limit (1-10.000) e use paginationKey para navegar pelos resultados
  • Atualizações incrementais: Use changedSinceSlot para buscar apenas contas de tokens modificadas desde um slot específico
  • Melhor desempenho: Evita timeouts e permite rastreamento em tempo real do portfólio
  • Comportamento de paginação: O fim da paginação é indicado apenas quando nenhuma conta de token é retornada. Menos contas que o limite podem ser retornadas devido a filtragem - continue a paginação até que paginationKey seja nulo

Métodos Relacionados

getTokenAccountsByOwnerV2

Versão paginada com navegação baseada em cursor para grandes portfólios

getTokenAccountBalance

Obtenha o saldo de uma conta de token específica