tokenAccounts no método WebSocket transactionSubscribe permite que uma assinatura corresponda a atividades nas contas de token associadas (ATAs) que uma carteira possui, não apenas transações onde a chave pública da carteira aparece diretamente. O mesmo filtro está disponível via gRPC — veja Filtragem de Conta de Token (ATA) para a versão gRPC.
O problema: filtros de conta comuns perdem transferências de token recebidas
Quando você vigia uma carteira comaccountInclude: [wallet], você apenas corresponde a transações onde essa chave pública da carteira aparece nas chaves de conta da transação. Um caso comum é perdido: quando alguém envia um token SPL (como USDC) para a carteira, a transferência toca na conta de token associada (ATA) da carteira — um endereço derivado por programa separado — não na própria chave pública da carteira.
Portanto, uma assinatura plain accountInclude: [wallet] nunca vê transferências de token recebidas. Você teria que enumerar cada ATA que a carteira possui antecipadamente e adicionar cada uma delas ao filtro — mas 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 na assinatura para expandir a correspondência para que uma carteira accountInclude também corresponda a transações que tocam 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, então captura qualquer conta de token que a carteira possui — incluindo as não canônicas — não apenas o endereço ATA derivado. Você nunca precisa listar as ATAs você mesmo.
Assinaturas que omitem tokenAccounts se comportam exatamente como antes, então é seguro adicionar a um filtro existente.
Modos de expansão
tokenAccounts assume um de três valores string:
Comece com
"balanceChanged". Ele captura o movimento real de fundos a uma fração do volume de "all".
Use em transactionSubscribe
tokenAccounts é uma extensão Helius para a API WebSocket padrão do Solana. Um valor inválido retorna um erro JSON-RPC -32602: Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all.
Lendo o que foi correspondido
Uma vez que uma transação corresponde via expansão ATA, o movimento de token da carteira está presente nameta.postTokenBalances e meta.preTokenBalances da transação. Filtre essas entradas por owner para isolar os saldos que sua carteira realmente possui, então compare preTokenBalances contra postTokenBalances na mesma accountIndex para ver quanto cada mint moveu. O exemplo acima mostra a etapa de filtragem.
Relacionado
transactionSubscribe
Todos os filtros e opções de
transactionSubscribe, incluindo tokenAccounts.Filtragem de Contas de Token (gRPC)
A mesma expansão
tokenAccounts nos filtros de transação gRPC do LaserStream.Filtragem notifyOn
Pule atualizações de conta sem operação em
accountSubscribe e programSubscribe.Início Rápido do WebSocket
Conecte-se ao LaserStream WebSocket e transmita seus primeiros eventos.