tokenAccounts del método WebSocket transactionSubscribe permite que una suscripción detecte actividad en las cuentas de tokens asociadas (ATA) que posee una billetera, no solo transacciones donde aparece directamente la clave pública de la billetera. El mismo filtro está disponible mediante gRPC. Consulta Filtrado de cuentas de tokens (ATA) para ver la versión de gRPC.
El problema: los filtros de cuentas simples omiten las transferencias de tokens entrantes
Cuando supervisas una billetera conaccountInclude: [wallet], solo detectas las transacciones en las que la clave pública de esa billetera aparece entre las claves de cuenta de la transacción. Un caso común pasa inadvertido: cuando alguien envía un token SPL (por ejemplo, USDC) a la billetera, la transferencia interactúa con la cuenta de tokens asociada (ATA) de la billetera —una dirección independiente derivada por el programa—, no con la propia clave pública de la billetera.
Por lo tanto, una suscripción simple con accountInclude: [wallet] nunca detecta las transferencias de tokens entrantes. Tendrías que enumerar de antemano todas las ATA que posee la billetera y agregar cada una al filtro. Sin embargo, las ATA se crean bajo demanda (una por cada mint), por lo que no puedes conocer el conjunto completo con anticipación.
Cómo funciona la expansión de tokenAccounts
Configura tokenAccounts en la suscripción para ampliar las coincidencias, de modo que una billetera indicada en accountInclude también detecte transacciones que interactúan con una cuenta de tokens que posee. La coincidencia se basa en el propietario: LaserStream resuelve, en el momento de buscar coincidencias, las cuentas de tokens que poseen tus direcciones de accountInclude. De este modo, detecta cualquier cuenta de tokens que posea la billetera, incluidas las no canónicas, y no solo la dirección ATA derivada. Nunca tienes que enumerar las ATA por tu cuenta.
Las suscripciones que omiten tokenAccounts se comportan exactamente igual que antes, por lo que puedes agregarlo de forma segura a un filtro existente.
Modos de expansión
tokenAccounts acepta uno de estos tres valores de cadena:
Comienza con
"balanceChanged". Captura movimientos reales de fondos con una fracción del volumen de "all".
Úsalo en transactionSubscribe
tokenAccounts es una extensión de Helius para la API WebSocket estándar de Solana. Un valor no válido devuelve el error JSON-RPC -32602: Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all.
Cómo interpretar la coincidencia
Cuando una transacción coincide mediante la expansión de ATA, el movimiento de tokens de la billetera aparece en los camposmeta.postTokenBalances e meta.preTokenBalances de la transacción. Filtra esas entradas por owner para aislar los saldos que realmente posee tu billetera. Luego, compara preTokenBalances con postTokenBalances en el mismo accountIndex para ver cuánto se movió cada mint. El ejemplo anterior muestra el paso de filtrado.
Contenido relacionado
transactionSubscribe
Todos los filtros y opciones de
transactionSubscribe, incluido tokenAccounts.Token Account Filtering (gRPC)
La misma expansión de
tokenAccounts en los filtros de transacciones de LaserStream mediante gRPC.WebSocket Quickstart
Conéctate a LaserStream WebSocket y transmite tus primeros eventos.