Skip to main content

O que é o Parsed Streams?

Parsed Streams é um serviço WebSocket que monitora todas as transações confirmadas da Solana (exceto transações de voto), decodifica cada uma e envia a você as transações que correspondem a um filtro definido por você. Você diz “quero instruções de rota do Jupiter” ou “quero qualquer coisa que interaja com esta conta”, e o servidor faz o monitoramento, a decodificação e a correspondência para você. Você recebe transações completas, já decodificadas: todas as instruções com argumentos e contas nomeados, além da taxa, da lista completa de chaves de contas, de um summary no nível da transação sobre o que aconteceu, das transferências de SOL e tokens e de referências às instruções exatas que corresponderam ao seu filtro. Todos os dados são entregues com o nível de compromisso confirmed.

O modelo mental

Se você já conhece os detalhes internos da Solana, pule esta seção. Caso contrário, este é o modelo no qual toda a API se baseia. Uma transação é uma mensagem assinada. Ela identifica o pagador da taxa, lista todas as contas com as quais interagirá e contém uma lista de instruções. Ao examinar uma transação, você vê: uma assinatura (seu ID exclusivo), o slot em que ela foi incluída, a taxa paga, as chaves das contas, se ela foi bem-sucedida ou falhou e as instruções. Uma instrução é uma ação: execute este programa, com esta entrada, usando estas contas. Um swap no Jupiter, uma transferência de tokens, um memorando. Uma transação geralmente contém várias instruções, que são executadas em ordem. Programas podem chamar outros programas. Quando o Jupiter executa um swap, ele não movimenta os tokens diretamente. A instrução de rota chama o programa de tokens para movimentar os tokens e os programas de corretoras que mantêm a liquidez. Essas chamadas aninhadas também são instruções, chamadas de instruções internas (ou CPIs, invocações entre programas). Isso é importante ao criar um filtro: grande parte da atividade real, como as movimentações de tokens dentro de um swap, ocorre em instruções internas. Portanto, seu filtro corresponde a elas por padrão. Se você quiser apenas as instruções assinadas por um usuário, defina includeCpi como false. Contas são os elementos on-chain com os quais uma instrução trabalha: carteiras, saldos de tokens, pools e mints. Cada instrução as inclui como uma lista ordenada de endereços, e a ordem funciona como um contrato: o programa define o significado de cada posição. O programa de tokens, por exemplo, espera primeiro a conta da qual os tokens serão retirados, depois a conta que os receberá e, por fim, o proprietário que aprova a transferência. Funções dão nomes a essas posições. A maioria dos programas conhecidos publica um manual legível por máquina para sua interface, chamado IDL. O manual lista todas as instruções do programa, o significado de seus campos de dados e a finalidade de cada posição de conta. A Helius mantém um catálogo desses manuais para milhares de programas. Com ele, uma simples lista de endereços se transforma em contas nomeadas: para uma transferência de tokens, a posição 0 se torna source, a posição 1 se torna destination e a posição 2 se torna authority. Em vez de tentar adivinhar o significado do terceiro endereço, você lê {"name": "authority", "pubkey": "9xQe...", "isSigner": true}. Esses nomes são as funções que você pode usar nos filtros. Decodificação é a mesma ideia aplicada aos dados de entrada da instrução. Durante a transmissão, esses dados são bytes opacos. Com o manual do programa, os bytes se tornam valores nomeados: {"in_amount": "1000000", "slippage_bps": 50}. Nem todas as instruções podem ser decodificadas. Portanto, cada uma fica em um dos três estados que você pode identificar diretamente pelos campos:
  • Decodificada: a instrução contém um objeto decoded com args nomeados e accounts nomeadas.
  • Reconhecida: além de decoded, a instrução contém um summary com um type (como swap), um description legível por humanos e um payload parsedData estruturado, como metadados de swap com valores e mints.
  • Não decodificada: o programa ou a instrução não está no catálogo, decoded é null e, em vez disso, a instrução contém os bytes brutos (rawData) e a lista simples de endereços (rawAccounts). Assim, você sempre tem dados com os quais trabalhar.
Esse é todo o modelo, e seu filtro é criado diretamente com base nele:
  • programs: qual programa a instrução chama
  • instructionNames: como o manual do programa chama essa ação
  • accounts.include: com quais endereços ela interage
  • accounts.roles: qual posição nomeada deve conter cada endereço
  • includeCpi e includeFailed: se instruções internas e transações com falha são consideradas
Os filtros selecionam instruções; as notificações entregam a transação completa.

Comparação

vs Enhanced WebSockets

O Enhanced WebSockets transmite transações completas ou atualizações de contas sem decodificação. Parsed Streams encontra correspondências no nível das instruções e decodifica tudo para você.

vs LaserStream gRPC

O LaserStream é um fluxo gRPC de alta capacidade que você filtra e decodifica no cliente. Parsed Streams é uma API WebSocket que filtra e decodifica no servidor.

vs Parsed Events

O Parsed Events aplica a mesma decodificação a transações históricas: analise assinaturas ou percorra o histórico de um endereço por páginas sob demanda via REST. Parsed Streams envia novas transações à medida que elas são incluídas.

Programas compatíveis

Parsed Streams decodifica mais de 3.600 programas usando suas IDLs on-chain, além de programas essenciais como SPL Token, Token-2022 e System Program por meio de decodificadores integrados. Você pode filtrar por qualquer endereço de programa. As instruções que o serviço não consegue decodificar são transmitidas como dados brutos de instrução. Alguns dos programas decodificados mais usados:
Não encontrou um programa? É provável que ele ainda esteja no catálogo. Chame describeProgram com o endereço do programa para ver suas instruções, eventos e funções das contas.

Acesso e preços

Parsed Streams está disponível de forma geral em todos os planos, incluindo o Free. Ele substitui os Enhanced Transaction Webhooks para dados de transações analisados em tempo real. Obtenha sua chave de API no painel da Helius. Cada evento entregue custa 1 crédito, a mesma tarifa dos eventos de webhook. Consulte Créditos para ver a lista completa de preços. O Parsed Streams é disponibilizado no endpoint do Gatekeeper, o mesmo host usado pelo tráfego de RPC e WebSocket da Helius. Não há um host separado para o Parsed Streams:
Autentique-se com a chave de API do seu projeto, transmitida como o parâmetro de consulta api-key (ou o cabeçalho x-api-key). A chave é verificada quando a conexão é aberta: uma chave ausente ou inválida é rejeitada com HTTP 401, e um projeto que atingiu seu limite de conexões recebe HTTP 429.

Comece agora

Quickstart

Conecte-se, envie seu primeiro filtro e leia uma notificação.

Track Jupiter Swaps

Crie e assine um filtro real usando a descoberta de programas.

Track Pump.fun Mints

Um listener seguro para reconexões que registra cada nova implantação de token da Pump.fun.

Handling Reconnects

Detecte desconexões, aumente gradualmente o intervalo entre tentativas, assine novamente e recupere os slots perdidos.