Skip to main content
El filtro tokenAccounts de LaserStream permite que una suscripción de transacciones gRPC detecte actividad en las cuentas de tokens asociadas (ATA) que posee una billetera, no solo transacciones en las que aparece directamente la clave pública de la billetera. El mismo filtro está disponible mediante WebSocket; consulta Filtrado de cuentas de tokens (ATA) mediante WebSocket.

El problema: los filtros de cuentas simples omiten las transferencias de tokens entrantes

Cuando supervisas una billetera con accountInclude: [wallet], solo detectas 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 queda fuera: cuando alguien envía un token SPL (USDC, por ejemplo) a la billetera, la transferencia interactúa con la cuenta de tokens asociada (ATA) de la billetera —una dirección independiente derivada por un programa—, no con la clave pública de la billetera. Por lo tanto, una suscripción simple con accountInclude: [wallet] nunca detecta 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), así que no puedes conocer el conjunto completo con anticipación.

Cómo funciona la expansión tokenAccounts

Configura tokenAccounts en un filtro de transacciones para ampliar la coincidencia, de modo que una billetera incluida en accountInclude también coincida con las transacciones que interactúan con una cuenta de tokens que posee. La coincidencia se basa en el propietario: LaserStream identifica, en el momento de la coincidencia, las cuentas de tokens que poseen tus direcciones de accountInclude. Así, detecta cualquier cuenta de tokens que posea la billetera, incluidas las no canónicas, 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. Para buscar coincidencias por token en lugar de por billetera, consulta Filtrado por mint de token. Las dos opciones se pueden combinar, por lo que un solo filtro puede supervisar la actividad de una billetera específica en un token específico.

Modos de expansión

tokenAccounts acepta uno de tres valores de cadena: Comienza con "balanceChanged". Captura movimientos reales de fondos con una fracción del volumen de "all".

Úsalo en LaserStream gRPC

Agrega tokenAccounts a un filtro de transacciones en tu SubscribeRequest. El SDK de Helius LaserStream convierte por ti la cadena en la enumeración TokenAccountExpansionControlFlag del protocolo (incluida en yellowstone-grpc-proto 12.5.0 o posterior).
Consulta la guía de supervisión de transacciones para ver un ejemplo más completo que compara los saldos anteriores y posteriores, y la referencia de solicitudes de suscripción para conocer todos los campos de filtro de transacciones.

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 campos meta.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ó de cada mint. El ejemplo anterior muestra el paso de filtrado; la guía de supervisión de transacciones muestra la comparación completa.

Contenido relacionado

Transaction Monitoring

Estrategias completas de filtrado y un ejemplo ejecutable para supervisar una billetera mediante gRPC.

Token Account Filtering (WebSocket)

El mismo campo tokenAccounts en el método transactionSubscribe de WebSocket.

Subscribe Request Reference

Todos los campos de filtro de transacciones, incluido tokenAccounts.

Compressed Filters

Supervisa cientos de miles de cuentas en un solo flujo.

Token Mint Filtering

Suscríbete a todas las transacciones de un mint de token con matchMints.