matchMints do LaserStream permite que uma assinatura de transações gRPC faça correspondência com os mints de token nos saldos de token anteriores/posteriores de uma transação, além das chaves de conta.
Coloque um mint em accountInclude, defina matchMints: true e você receberá todas as transações que envolvem esse token: transferências, swaps, emissões, queimas e encerramentos de contas.
matchMints está disponível apenas no LaserStream gRPC. Ainda não está disponível no LaserStream WebSocket.O problema: filtros de conta simples não detectam a maioria das transferências de tokens
Ao monitorar um token comaccountInclude: [mint], você só encontra transações em que a chave pública do mint aparece nas chaves de conta da transação.
Uma instrução SPL Transfer clássica nunca referencia o mint. Ela informa apenas a conta de token de origem, a conta de token de destino e o proprietário. Por isso, um filtro de conta simples não detecta a operação mais comum de qualquer token.
Somente instruções que passam o mint diretamente geram uma correspondência, como MintTo, Burn, TransferChecked e swaps cujas contas de programa incluem o mint. A única solução alternativa era transmitir todas as transações e inspecionar por conta própria os saldos de token de cada uma.
Como matchMints funciona
Defina matchMints: true em um filtro de transações e o LaserStream criará um conjunto de mints com base em preTokenBalances e postTokenBalances da transação.
As listas accountInclude, accountExclude e accountRequired são então comparadas com ambos: as chaves de conta e esse conjunto de mints. Um mint atende ao critério se qualquer conta de token dele aparecer em uma das listas de saldos, independentemente de o saldo ter sido alterado.
A flag é opcional, e os filtros que a omitem continuam funcionando exatamente como antes. Assim, você pode adicioná-la a uma assinatura existente sem alterar o que essa assinatura já recebe. Mints SPL e Token-2022 funcionam porque ambos os programas preenchem os saldos de token anteriores/posteriores.
Semântica
O restante da lógica do filtro permanece inalterado:
- Os predicados dentro de um mesmo filtro nomeado continuam combinados com AND (
vote,failed,signaturee as listas de contas). - Vários filtros nomeados continuam combinados com OR.
- Os valores dentro de uma lista são combinados com OR (exceto em
accountRequired, em que todos devem corresponder). - Uma transação sem saldos de token volta a usar a correspondência somente por chaves.
matchMintsnunca adiciona transações sem atividade de token. matchMintsisoladamente não restringe o stream. Você ainda precisa de pelo menos uma chave ou um mint em uma lista de contas (ou outro predicado restritivo) para que o filtro seja aceito.
O LaserStream faz a correspondência de mints pela chave pública exata. Não há um modo de “apenas saldo alterado” para mints, diferentemente de
tokenAccounts: "balanceChanged".Use no LaserStream gRPC
AdicionematchMints: true a um filtro de transações em seu SubscribeRequest e coloque o mint em accountInclude. Este exemplo transmite todas as transações de USDC na mainnet:
- TypeScript
- Rust
- Go
Requer
helius-laserstream 0.8.5 ou posterior. O campo também é aceito como match_mints.laserstream-core-proto 11.3.0 ou posterior, ou o .proto incluído no repositório do SDK).
match_mints é o campo 32 de SubscribeRequestFilterTransactions. Clientes gerados com base no proto Triton upstream descartam silenciosamente o campo desconhecido. Portanto, a flag não terá efeito até você gerar o cliente novamente.
Consulte a referência de Subscribe Request para ver todos os campos de filtro de transações.
Combine com tokenAccounts para monitorar um token de uma carteira
matchMints pode ser combinado com a expansão de tokenAccounts. Assim, um único filtro pode fazer a correspondência por proprietários de carteiras e mints ao mesmo tempo.
Este exemplo transmite todas as alterações no saldo de USDC de uma carteira:
accountInclude junto com tokenAccounts encontra transações em que os saldos de token da carteira foram alterados. accountRequired junto com matchMints restringe os resultados àquelas que envolvem USDC.
Como identificar o que correspondeu
Quando uma transação corresponder por meio de um mint, procure o mint emmeta.preTokenBalances[].mint e meta.postTokenBalances[].mint. Em transferências simples, o mint geralmente não aparece nas chaves de conta. Portanto, não o procure nelas.
Compare preTokenBalances com postTokenBalances no mesmo accountIndex para ver quanto do token foi movimentado e entre quais proprietários.
O guia de monitoramento de transações aborda em detalhes a estrutura das transações.
Limites e observações
- Os mints ficam nas mesmas listas
accountInclude,accountExcludeeaccountRequiredque as chaves de conta. Portanto, eles contam para os mesmos limites por lista do plano. Não há um limite separado para mints. - O custo da correspondência não aumenta com o número de mints listados. O desempenho é o mesmo com 100 ou 100.000 mints, e os assinantes que não definem a flag não têm nenhum custo adicional.
- A reprodução histórica respeita
matchMints. Portanto, uma assinatura de reprodução retorna as mesmas transações que o stream em tempo real retornaria. - Se você anexar um filtro compactado (cuckoo) a uma assinatura de transações,
matchMintstambém verifica o conjunto de mints no filtro, além das chaves de conta. matchMintsestá disponível em todas as regiões do LaserStream gRPC, na mainnet e na devnet. No momento, não está disponível no LaserStream WebSocket.- Versões mínimas do SDK: JavaScript/TypeScript
helius-laserstream0.8.5, Rusthelius-laserstream0.6.4, Gogo/v0.3.0.
Relacionados
Token Account (ATA) Filtering
Encontre transações que envolvem as contas de token pertencentes a uma carteira
Transaction Monitoring
Estratégias completas de filtragem e exemplos executáveis por gRPC
Subscribe Request Reference
Todos os campos de filtro de transações, incluindo
matchMintsHistorical Replay
Preencha retroativamente até 24 horas de atividade de tokens com o mesmo filtro