Skip to main content
O filtro 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 com accountInclude: [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 na meta.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.