Skip to main content
El método RPC 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

  1. ownerPubkey (string, obligatorio): La clave pública codificada en base 58 del propietario cuyas cuentas de tokens quieres recuperar.
  2. filter (object, obligatorio): Un objeto JSON que debe especificar mint o programId:
    • 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 a ownerPubkey.
    • 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
  3. 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 codificaciones base58, base64 o base64+zstd.
    • minContextSlot (u64, opcional): El slot mínimo para la consulta.

Estructura de la respuesta

El campo result.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 con ownerPubkey de 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 es jsonParsed): Longitud de los datos sin procesar de la cuenta, en bytes.
Ejemplo de respuesta (con codificación jsonParsed y filtrada por programId):

Ejemplos de código

Consejos para desarrolladores

  • Requisito del filtro: Debes proporcionar mint o programId en 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ón encoding. 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, usa getTokenAccountsByOwnerV2, 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 programId correcto: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
Esta guía proporciona una comprensión completa del método RPC 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, usa getTokenAccountsByOwnerV2, que ofrece:
  • Paginación basada en cursor: Define limit (1-10,000) y usa paginationKey para navegar por los resultados
  • Actualizaciones incrementales: Usa changedSinceSlot para 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 paginationKey sea 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