getTokenAccountsByOwner se usa para recuperar todas las cuentas de tokens SPL que pertenecen a una clave pública específica. Es un método fundamental para las billeteras y aplicaciones que necesitan mostrar los tokens de un usuario o interactuar con sus distintas cuentas de tokens.
Debes filtrar la consulta por un mint de token específico o un programId (por ejemplo, el programa de tokens SPL o el programa Token-2022).
Para billeteras con portafolios de tokens extensos, considera usar getTokenAccountsByOwnerV2, que admite paginación basada en cursor con tamaños de página configurables de hasta 10,000 cuentas por solicitud.
Casos de uso comunes
- Mostrar el portafolio del usuario: Obtén todas las cuentas de tokens (y, por lo tanto, sus saldos) de la dirección de billetera de un usuario para mostrar su portafolio completo de tokens.
- Lógica de la aplicación: Identifica la cuenta de un token específico del usuario para un mint determinado antes de iniciar una transferencia u otra interacción.
- Verificación: Comprueba qué cuentas de tokens posee un propietario para un tipo de token determinado.
- Indexación de titulares de tokens: Aunque es menos eficiente para la indexación global que otros métodos, puede usarse para encontrar cuentas de un conjunto conocido de propietarios.
Parámetros de la solicitud
-
ownerPubkey(string, obligatorio): La clave pública codificada en base 58 del propietario cuyas cuentas de tokens quieres recuperar. -
filter(object, obligatorio): Un objeto JSON que debe especificarmintoprogramId:mint(string): La clave pública codificada en base 58 de un mint de token específico. Si se proporciona, solo se devolverán las cuentas de este mint que pertenezcan aownerPubkey.programId(string): La clave pública codificada en base 58 del programa de tokens que controla las cuentas. Los valores comunes son:- Programa de tokens SPL:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Programa Token-2022:
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
- Programa de tokens SPL:
-
options(object, opcional): Un objeto de configuración opcional que puede incluir:commitment(string, opcional): Especifica el nivel de compromiso.encoding(string, opcional): La codificación de los datos de la cuenta. Se recomienda ampliamente"jsonParsed". Otras opciones:"base64","base64+zstd". El valor predeterminado es"base64".dataSlice(object, opcional): Permite recuperar una sección específica de los datos de la cuenta (offset: usize,length: usize). Solo está disponible para las codificacionesbase58,base64obase64+zstd.minContextSlot(u64, opcional): El slot mínimo para la consulta.
Estructura de la respuesta
El camporesult.value de la respuesta JSON-RPC es un arreglo de objetos. Cada objeto corresponde a una cuenta de tokens SPL que pertenece a ownerPubkey y coincide con filter.
Cada objeto del arreglo value contiene:
pubkey(string): La clave pública codificada en base 58 de la propia cuenta de tokens.account(object): Información detallada sobre la cuenta de tokens:lamports(u64): Saldo en lamports para la exención del alquiler.owner(string): El programa propietario (por ejemplo, la clave pública del programa de tokens).data: Datos de la cuenta. Si se usa la codificación"jsonParsed", contiene:program(string): Por ejemplo,"spl-token".parsed: Un objeto con información estructurada:info: Detalles como:mint(string): La dirección del mint del token.owner(string): El propietario de la cuenta de tokens (debe coincidir conownerPubkeyde la solicitud).tokenAmount(object): El saldo de tokens (amount,decimals,uiAmount,uiAmountString).state(string): Estado de la cuenta de tokens (por ejemplo,"initialized").isNative(boolean): Indica si la cuenta contiene SOL envuelto.delegate(string, opcional): La dirección del delegado, si se configuró uno.delegatedAmount(object, opcional): La cantidad delegada, si se configuró un delegado.
type(string): Por ejemplo,"account".
executable(boolean): Indica si la cuenta es ejecutable.rentEpoch(u64): Próxima época en la que vence el alquiler.space(u64, si no esjsonParsed): Longitud de los datos sin procesar de la cuenta, en bytes.
jsonParsed y filtrada por programId):
Ejemplos de código
Consejos para desarrolladores
- Requisito del filtro: Debes proporcionar
mintoprogramIden el filtro. No es posible consultar todas las cuentas de tokens de un propietario para todos los tipos de tokens sin uno de estos filtros principales. - Cuentas de tokens asociadas: Este método devolverá todas las cuentas de tokens que pertenezcan a la clave pública, incluidas las cuentas de tokens asociadas (ATA) estándar y cualquier otra cuenta de tokens SPL que pueda poseer (por ejemplo, de implementaciones de billeteras antiguas o configuraciones personalizadas).
- Codificación: Se recomienda ampliamente usar
"jsonParsed"para la opciónencoding. Esta codificación decodifica los datos binarios de la cuenta en una estructura JSON más fácil de usar. - Rendimiento: Si un propietario tiene una cantidad muy grande de cuentas de tokens (en especial cuando solo se filtra por
programId), la respuesta puede ser grande. En esos casos, usagetTokenAccountsByOwnerV2, que ofrece paginación integrada. - Token-2022 (extensiones de tokens): Si trabajas con tokens creados mediante el programa Token-2022 (que admite extensiones como comisiones por transferencia, intereses, etc.), asegúrate de usar el
programIdcorrecto:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
getTokenAccountsByOwner para que puedas recuperar de forma eficiente la información de las cuentas de tokens de cualquier dirección de Solana.
Paginación para portafolios de tokens grandes
Para billeteras con una gran cantidad de tokens, usagetTokenAccountsByOwnerV2, que ofrece:
- Paginación basada en cursor: Define
limit(1-10,000) y usapaginationKeypara navegar por los resultados - Actualizaciones incrementales: Usa
changedSinceSlotpara obtener solo las cuentas de tokens modificadas desde un slot específico - Mejor rendimiento: Evita tiempos de espera agotados y permite rastrear portafolios en tiempo real
- Comportamiento de la paginación: El final de la paginación solo se indica cuando no se devuelve ninguna cuenta de tokens. Es posible que se devuelvan menos cuentas que el límite debido al filtrado; continúa con la paginación hasta que
paginationKeysea null
Métodos relacionados
getTokenAccountsByOwnerV2
Versión paginada con navegación basada en cursor para portafolios grandes
getTokenAccountBalance
Obtén el saldo de una cuenta de tokens específica