tokenAccounts do LaserStream permite que uma assinatura de transação gRPC corresponda à atividade nas contas de token associadas (ATAs) que uma carteira possui, não apenas transações onde o pubkey da carteira aparece diretamente. O mesmo filtro está disponível via WebSocket — veja Filtragem de Conta de Token (ATA) via WebSocket.
O problema: filtros de conta simples perdem transferências de token recebidas
Quando você observa uma carteira comaccountInclude: [wallet], apenas corresponde a transações onde essa pubkey de carteira aparece nas chaves de conta da transação. Um caso comum passa despercebido: quando alguém envia para a carteira um token SPL (USDC, por exemplo), a transferência toca na conta de token associada (ATA) da carteira — um endereço derivado separado — não na própria pubkey da carteira.
Portanto, uma assinatura accountInclude: [wallet] simples nunca vê transferências de token recebidas. Você teria que enumerar todas as ATAs que a carteira possui antecipadamente e adicionar cada uma ao filtro — mas as ATAs são criadas sob demanda (uma por mint), então você não pode saber o conjunto completo com antecedência.
Como funciona a expansão tokenAccounts
Defina tokenAccounts em um filtro de transação para expandir a correspondência de modo que uma carteira accountInclude também corresponda a transações que toquem uma conta de token que ela possui. A correspondência é baseada em proprietário: o LaserStream resolve as contas de token possuídas pelos seus endereços accountInclude no momento da correspondência, assim capturando qualquer conta de token que a carteira possua — incluindo as não canônicas — não apenas o endereço ATA derivado. Você nunca precisa listar as ATAs.
Assinaturas que omitem tokenAccounts se comportam exatamente como antes, portanto é seguro adicionar a um filtro existente.
Para filtrar por token em vez de carteira, consulte Filtragem por mint de token. As duas opções podem ser combinadas, então um filtro pode monitorar a atividade de uma única carteira em um único token.
Modos de expansão
tokenAccounts aceita um de três valores de string:
Comece com
"balanceChanged". Ele captura movimentações reais de fundos com uma fração do volume de "all".
Como usar no LaserStream gRPC
AdicionetokenAccounts a um filtro de transações no seu SubscribeRequest. O SDK do Helius LaserStream converte a string para o enum TokenAccountExpansionControlFlag em nível de protocolo para você (parte do yellowstone-grpc-proto 12.5.0+).
Como interpretar a correspondência
Quando uma transação corresponder por meio da expansão de ATA, a movimentação de tokens da carteira estará nos camposmeta.postTokenBalances e meta.preTokenBalances da transação. Filtre essas entradas por owner para isolar os saldos que realmente pertencem à sua carteira. Depois, calcule a diferença entre preTokenBalances e postTokenBalances no mesmo accountIndex para ver quanto cada mint movimentou. O exemplo acima mostra a etapa de filtragem; o guia de monitoramento de transações mostra o cálculo completo da diferença.
Conteúdo relacionado
Transaction Monitoring
Estratégias completas de filtragem e um exemplo executável de monitoramento de carteira por gRPC.
Token Account Filtering (WebSocket)
O mesmo campo
tokenAccounts no método transactionSubscribe do WebSocket.Subscribe Request Reference
Todos os campos de filtro de transações, incluindo
tokenAccounts.Compressed Filters
Monitore centenas de milhares de contas em um único stream.
Token Mint Filtering
Assine todas as transações de um mint de token com
matchMints.