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
-
ownerPubkey(string, obrigatório): A chave pública codificada em base-58 do proprietário da conta cuja contas de tokens você deseja recuperar. -
filter(objeto, obrigatório): Um objeto JSON que deve especificarmintouprogramId: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 porownerPubkeyserã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
- SPL Token Program:
-
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çõesbase58,base64, oubase64+zstd.minContextSlot(u64, opcional): O slot mínimo para a consulta.
Estrutura de Resposta
O camporesult.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 aoownerPubkeyda 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ãojsonParsed): Comprimento dos dados brutos da conta em bytes.
jsonParsed, filtrado por programId):
Exemplos de Código
Dicas para Desenvolvedores
- Requisito de Filtro: Você deve fornecer
mintouprogramIdno 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çãoencodingé 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 ogetTokenAccountsByOwnerV2que 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
programIdcorreto:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
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, usegetTokenAccountsByOwnerV2 que oferece:
- Paginação baseada em cursor: Defina
limit(1-10.000) e usepaginationKeypara navegar pelos resultados - Atualizações incrementais: Use
changedSinceSlotpara 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
paginationKeyseja 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