NUEVO: Helius adquiere Light Protocol
Presentamos los filtros tokenAccount para getTransactionsForAddress
Blog/Actualizaciones

Presentamos los filtros de cuentas de tokens para gTFA

CofundadorNick Pennie en XNick Pennie en LinkedIn
3 min de lectura

En octubre pasado, lanzamos getTransactionsForAddress, una nueva llamada RPC de Solana para consultar datos históricos que combina getSignaturesForAddress y getTransaction en un solo método.

Hoy nos complace anunciar que getTransactionsForAddress (gTFA) ya puede consultar el historial de transferencias de tokens de una wallet con una sola llamada RPC. 

La nueva función tokenAccounts permite incluir las transacciones de las cuentas de tokens asociadas de la wallet. Antes, gTFA y su predecesor, getSignaturesForAddress, las omitían.

Antes, los desarrolladores tenían que consultar getTokenAccountsByOwner y luego getSignaturesForAddress para cada cuenta de tokens. 

Esto era lento y costoso, y a menudo requería cientos de llamadas RPC adicionales.

Ahora solo necesitas una llamada a getTransactionsForAddress con tokenAccounts.

El problema

En Solana, tu wallet no almacena tokens directamente.

En su lugar, tu wallet es propietaria de cuentas de tokens asociadas (ATA), y esas cuentas almacenan tus tokens. 

Por ejemplo, cuando alguien te envía USDC, este llega a tu cuenta de tokens USDC en lugar de a la dirección principal de tu wallet.

Esto genera un gran problema al consultar el historial de transacciones de una wallet:

Cuando llamas a getSignaturesForAddress en una wallet, solo obtienes las transacciones que hacen referencia directa a la dirección de esa wallet.

Las transferencias de tokens que interactúan con tus cuentas de tokens, pero no mencionan tu wallet, simplemente no aparecen.

La solución alternativa

Hasta hoy, los desarrolladores tenían que implementar una solución alternativa tediosa:

  1. Llamar a getTokenAccountsByOwner para obtener las cuentas de tokens de una wallet
  2. Llamar a getSignaturesForAddress para la propia wallet
  3. Llamar a getSignaturesForAddress para cada cuenta de tokens
  4. Combinar todos los resultados
  5. Eliminar duplicados (muchas transacciones afectan a varias cuentas)
  6. Ordenar cronológicamente

Este enfoque presenta varios problemas:

1. El rendimiento es lento

Una wallet con 50 cuentas de tokens requiere más de 51 llamadas RPC solo para crear un historial completo. Los traders profesionales, los usuarios frecuentes de DeFi o quienes operan con memecoins por diversión pueden tener cientos de cuentas de tokens.

2. La paginación es ineficiente

¿Quieres las 20 transacciones más recientes? No puedes limitarte a obtener 20 de cada fuente y combinarlas. Tienes que obtenerlo todo, eliminar duplicados, ordenar los resultados y solo entonces tomar las primeras 20 transacciones. 

No existe una forma eficiente de paginar sin obtener datos de más.

3. Los costos de RPC se acumulan

Cada llamada RPC implica una sobrecarga. Multiplicarla por más de 100 llamadas por solicitud de usuario se vuelve costoso rápidamente, sobre todo a gran escala.

La solución

Con el nuevo filtro tokenAccounts, puedes obtener el historial completo de una wallet en una sola solicitud RPC:

Código
{
    "jsonrpc": "2.0",
    "id": "helius-example",
    "method": "getTransactionsForAddress",
    "params": [
        "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
        {
            "filters": {
                "tokenAccounts": "all"
            },
            "sortOrder": "asc",
            "limit": 100
        }
    ]
}

Eso es todo. Una llamada. Historial completo.

Opciones de filtrado

El filtro tokenAccounts ofrece tres opciones: none, balanceChanged y all.

none (predeterminado)

Cuando el filtro tokenAccounts se establece en none, las transacciones deben hacer referencia a la dirección de la wallet.

balanceChanged (recomendado)

Cuando se aplica balanceChanged, las transacciones hacen referencia a la dirección de la wallet o modifican el saldo de una cuenta de tokens propiedad de la wallet.

all

Establecer tokenAccounts en all exige que las transacciones hagan referencia a la dirección de la wallet o a una cuenta de tokens propiedad de la wallet.

Casos de uso

Esta nueva función es esencial para:

  • Wallets que muestran el historial completo de transacciones
  • Rastreadores de portafolios que necesitan registrar cada movimiento de tokens
  • Software tributario que calcula ganancias y pérdidas de todos los tokens
  • Paneles de análisis que muestran la actividad de los usuarios

Comienza ahora

La función tokenAccounts ya está disponible.

Solo agrega tokenAccounts: balanceChanged (o all) a tu objeto de filtros y listo.

¿Aún no usas getTransactionsForAddress?

Consulta nuestra documentación y nuestros SDK para obtener más información y comenzar.

Suscríbete a Helius

Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos