Início Rápido
1
Get Access
Parsed Streams está disponível em todos os planos por 1 crédito por evento entregue. Obtenha sua chave de API no Painel da Helius e conecte-se ao endpoint do Gatekeeper em
wss://beta.helius-rpc.com, o mesmo host usado pelo tráfego de RPC e WebSocket da Helius.Autentique-se com a chave de API do seu projeto, passada como o parâmetro de consulta api-key (ou o cabeçalho x-api-key).2
Conectar
wscat
3
Inscrever-se com um Filtro
Envie A resposta
parsedTransactionSubscribe com um filtro e opções opcionais:result é um inteiro id de assinatura:4
Leia uma Notificação
Cada transação correspondente chega como um
parsedTransactionNotification, já decodificado, com matchedIndexes apontando para as instruções que seu filtro atingiu. Veja Notificações para o formato completo.5
Cancelar Assinatura
Guias
Acompanhe Trocas Jupiter
Use
describeProgram para construir um filtro confiável antes de assinar.Acompanhe Mints do Pump.fun
Um ouvinte seguro para reconexões que registra cada novo deploy de token Pump.fun.
Lidando com Reconexões
Sobreviva a timeouts de inatividade e implantações, depois recupere exatamente o que perdeu.
Referência do Protocolo
Streams Analisados usa JSON-RPC 2.0 sobre uma única conexão WebSocket. Cada solicitação recebe uma resposta com o mesmoid. Uma assinatura então envia mensagens parsedTransactionNotification até você cancelar a assinatura ou desconectar.
Inscrever-se
EnvieparsedTransactionSubscribe com um filtro e opções opcionais. A resposta result é um inteiro id de assinatura.
Request
Response
Campos de Filtro
Pelo menos um deprograms ou accounts.include é necessário. Os campos que você define se combinam com E: uma instrução deve satisfazer todos eles para corresponder.
string[]
IDs dos Programas para corresponder (endereços base58, não nomes). Uma instrução corresponde se seu programa estiver nesta lista. OU dentro da lista.
string[]
Nomes de instruções decodificadas, como
route. Correspondido exatamente primeiro, depois com uma diferença insensível a maiúsculas e separadores, então sharedAccountsRoute também corresponde ao nome da rede shared_accounts_route. OU dentro da lista. Apenas instruções cujo nome o catálogo pôde identificar podem corresponder, então pegue nomes de describeProgram.string[]
Endereços de contas. Uma instrução corresponde se algum destes aparecer em sua lista de contas. OU dentro da lista. Funciona para todas as instruções, decodificadas ou não. O ID do programa em si não conta como uma conta aqui.
object
Um mapa do nome do papel da conta decodificado para o endereço, como
{ "user_transfer_authority": "<pubkey>" }. Cada entrada deve ser válida (E entre entradas), e a instrução deve estar decodificada para que isso se aplique. Nomes de papéis correspondem exatamente, sem distinção de maiúsculas, então copie-os de describeProgram em vez de adivinhar.boolean
padrão:"false"
Incluir instruções de transações falhadas.
boolean
padrão:"true"
Instruções internas (CPI) são elegíveis para corresponder. Defina
false para corresponder apenas a instruções de nível superior.-32602 em vez de ignorados silenciosamente, então erros de digitação falham ruidosamente em vez de não corresponder a nada.
Opções
O segundo parâmetro é opcional.string
padrão:"confirmed"
Apenas
confirmed é suportado.string
padrão:"full"
O que cada notificação carrega.
full: a transação inteira, cada instrução, além de matchedIndexes apontando para os acertos do filtro. matched: apenas as instruções que corresponderam, sem lista de índice. raw: apenas instruções correspondidas, cada uma reduzida à sua posição, programId, e blob base58 data, sem campos decodificados e sem matriz accountKeys. Use matched quando a largura de banda for mais importante que o contexto (cargas completas são, em média, aproximadamente três vezes o tamanho), e raw quando você decodificar dados de instrução por conta própria e só precisar dos bytes.Notificações
Uma notificação por transação correspondente por assinatura. Com o padrãodetails: "full":
transactioné o contexto completo.feeestá em lamports.accountKeysé a lista completa de chaves, incluindo as chaves carregadas de tabelas de consulta de endereços, na mesma ordem em que a cadeia as informa.feePayeré sempreaccountKeys[0].errorcontém o erro da transação como JSON estruturado, por exemplo,{"InstructionError": [2, {"Custom": 6001}]}, quandostatusé"error".summarytem o mesmo formato em todos os lugares em que aparece: umtype(comoswapoutransfer), umdescriptionlegível por humanos e um payloadparsedDataestruturado quando o parser reconhece a ação — para um swap: o protocolo, os valores e os mints.transaction.summaryidentifica a ação principal da transação; cada instrução reconhecida contém seu própriosummarycom o mesmo formato. Para coletar todos os swaps de uma transação, percorrainstructionse leiasummary.parsedDataquandosummary.typefor"swap".- Os valores dos swaps são informados pela plataforma.
in_amount,actual_out_amounte os valores dos swaps internos emparsedDatasão os valores informados pela plataforma, não o que a carteira do usuário realmente enviou ou recebeu. Eles não consideram taxas de transferência do Token-2022 nem outras deduções aplicadas fora do swap. Para saber o valor exato recebido, compare os saldos da conta de tokens do usuário antes e depois da transação. nativeTransfersetokenTransferslistam as movimentações de SOL e tokens que o parser extraiu de toda a transação, no mesmo formato retornado pela Parsed Events API. Assim, os consumidores do stream e da API podem compartilhar o código de processamento. Ambos estão sempre presentes, mas podem estar vazios.instructionscontém todas as instruções da transação na ordem de execução: cada instrução de nível superior seguida por suas instruções internas. Cada entrada contém sua própria posição:instructionIndexindica a qual instrução de nível superior ela pertence (começando em 0),innerInstructionIndexindica sua posição entre as chamadas internas dessa instrução (nullsignifica que é a própria instrução de nível superior) estackHeightindica a profundidade da chamada (1 para o nível superior). Use esses valores, não a posição no array.matchedIndexessão índices eminstructionsque indicam quais instruções realmente corresponderam ao seu filtro. As demais estão presentes para fornecer contexto. Comdetails: "matched", o array contém apenas as correspondências, ematchedIndexesnão está presente.- Os nomes de
decodedusam snake_case (in_amount,user_transfer_authority), conforme publicados na IDL do programa. Os argumentos inteiros geralmente são strings ("1000000"), pois valores u64 não cabem nos números do JavaScript. blockTimeatualmente é semprenull. Não dependa dele.- Espere uma combinação de instruções decodificadas e não decodificadas em uma mesma transação: um swap totalmente decodificado pode aparecer ao lado de um memo não reconhecido. Faça a ramificação com base em
decoded: quando ele fornull, a instrução conterárawData(bytes em base58) erawAccounts(lista simples de chaves públicas), de modo que você sempre tenha algo com que trabalhar.
details: "raw" o value reduz-se a meta da transação e blobs. accountKeys, nativeTransfers, tokenTransfers, matchedIndexes, e todos os campos decodificados estão ausentes (a transação summary ainda está incluída); cada instrução correspondida é sua posição, seu programa e seus bytes data em base58, exatamente como aparecem na cadeia (presentes mesmo para instruções que o catálogo poderia ter decodificado):
Cancelar Assinatura
true se a assinatura existia e era sua. As notificações param imediatamente. Fechar a conexão remove todas as suas assinaturas.
Descoberta
A falha mais comum com esse tipo de API é um filtro válido que não corresponde a nada, geralmente por usar um nome de instrução ou função presumido.describeProgram evita isso retornando os nomes exatos usados pelo mecanismo de correspondência. No momento, ele está disponível apenas em wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>. Portanto, envie-o por uma conexão separada das suas assinaturas:
Request
Response
jupiter, e uma busca por nome pode resolver para a mais antiga). Se você fizer a busca por nome, verifique se result.id é o programa que você pretende assinar.
Fluxo recomendado: describeProgram para obter os nomes exatos de instrução e papel, construa o filtro com esses nomes, depois assine. O guia Acompanhe Trocas Jupiter percorre isso do início ao fim.
Limites
Erros
Erros seguem JSON-RPC 2.0:{ "error": { "code": <int>, "message": "<text>" }, "id": <id> }. Mensagens dizem exatamente o que estava errado e onde.
Conexões também podem fechar com um código de fechamento WebSocket — veja Lidando com Reconexões para o que cada um significa e como se recuperar.