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 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.
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
AdicionetokenAccounts 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+).
Use no LaserStream WebSocket
O mesmo campo está disponível no métodotransactionSubscribe 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 nometa.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.