Skip to main content
O filtro tokenAccounts do LaserStream permite que uma assinatura de transação corresponda a atividades nas contas de token associadas (ATAs) que uma carteira possui, não apenas transações onde a pubkey da carteira aparece diretamente. Funciona da mesma forma tanto no LaserStream gRPC quanto no LaserStream WSS.

O problema: filtros de conta simples perdem transferências de token recebidas

Quando você observa uma carteira com accountInclude: [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.

Modos de Expansão

tokenAccounts aceita um dos três valores de string: Comece com "balanceChanged". Captura movimento real de fundos com uma fração do volume de "all".

Use no LaserStream gRPC

Adicione tokenAccounts a um filtro de transação no seu SubscribeRequest. O Helius LaserStream SDK converte a string para o enum de nível de wire TokenAccountExpansionControlFlag para você (parte do yellowstone-grpc-proto 12.5.0+).
Veja o Guia de Monitoramento de Transação para um exemplo mais completo que diferencia saldos antes e depois, e a referência de Pedido de Inscrição para cada campo de filtro de transação.

Use no LaserStream WebSocket

O mesmo campo está disponível no método transactionSubscribe WebSocket — uma extensão Helius ao padrão API WebSocket do Solana. Um valor inválido retorna o erro JSON-RPC -32602: Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all.

Lendo o que correspondeu

Uma vez que uma transação corresponda via expansão ATA, o movimento de token da carteira vive no meta.postTokenBalances e meta.preTokenBalances da transação. Filtre essas entradas por owner para isolar os saldos que sua carteira realmente possui, e depois diferencie preTokenBalances contra postTokenBalances no mesmo accountIndex para ver quanto cada mint se moveu. Os exemplos acima mostram a etapa de filtragem; o Guia de Monitoramento de Transação mostra a diferença completa.

Relacionado

Monitoramento de Transação

Estratégias completas de filtragem e um exemplo executável de observação de carteira sobre gRPC.

transactionSubscribe (WebSocket)

O mesmo campo tokenAccounts no método WebSocket transactionSubscribe.

Referência de Pedido de Inscrição

Cada campo de filtro de transação, incluindo tokenAccounts.

Filtros Compactados

Acompanhe centenas de milhares de contas em um fluxo.