Visão Geral
LaserStream é um serviço gerenciado de streaming Solana gRPC. É compatível com o protocolo Yellowstone gRPC aberto — então qualquer cliente Yellowstone funciona imediatamente — e adiciona recursos de produção como reprodução histórica, failover multiponto e um ambiente totalmente gerenciado. LaserStream usa o protocolo gRPC de código aberto, garantindo que não haja bloqueio de fornecedor e a máxima compatibilidade com implementações gRPC existentes. Você pode se conectar tanto com o cliente padrão@triton-one/yellowstone-grpc quanto usar o Helius LaserStream SDK otimizado para desempenho para benefícios adicionais, incluindo maior throughput, reconexões automáticas, gerenciamento de assinaturas, tratamento de erros e mais.
LaserStream SDK é 40x mais rápido em relação a clientes Yellowstone JavaScript
Accept-Encoding com gzip ou zstd não terá efeito — as respostas são sempre retornadas sem compressão.Endpoints & Regiões
LaserStream está disponível em várias regiões ao redor do mundo. Escolha o endpoint mais próximo de sua aplicação para um desempenho ideal:Endpoints Mainnet
Endpoint Devnet
- Para apps em produção, escolha o endpoint mainnet mais próximo de seu servidor para um melhor desempenho (ex.: se implantando na Europa, use Amsterdã (
ams) ou Frankfurt (fra)) - Para testes, use:
https://laserstream-devnet-ewr.helius-rpc.com.
Truncamento de Logs
Por padrão, o LaserStream trunca mensagens de log de transação para 10 KB para melhor velocidade e desempenho. Se você precisar de logs completos, endpoints dedicados não truncados estão disponíveis — veja Truncamento de Logs.Início Rápido
Crie um Novo Projeto
Instale Dependências
tsx porque o padrão npx tsc --init no TypeScript 5.x define verbatimModuleSyntax, module: "nodenext", e types: [], que quebram uma execução rápida ts-node index.ts. tsx executa arquivos .ts sem um tsconfig.Obtenha Sua Chave API
Crie um Script de Assinatura
index.ts com o seguinte conteúdo:Substitua Sua Chave API e Escolha Sua Região
index.ts, atualize o objeto config com:- Sua chave API real do Painel Helius
- O endpoint LaserStream mais próximo da localização do seu servidor
- Para Produção (Mainnet):
- Europa: Use
fra(Frankfurt),ams(Amsterdã), oulon(Londres) - US Leste: Use
ewr(Nova York) - US Oeste: Use
slc(Salt Lake City) oulax(Los Angeles) - Ásia: Use
tyo(Tóquio) ousgp(Singapura)
- Europa: Use
- Para Desenvolvimento (Devnet):
- Use
https://laserstream-devnet-ewr.helius-rpc.com
- Use
Execute e Veja os Resultados
confirmed envolver TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA, você verá os dados no seu console.Fluxos de Trabalho Comuns
Guias passo-a-passo para os fluxos de trabalho que mais vemos. Cada guia usa ohelius-laserstream SDK com reconexão automática e reprodução histórica integrada.
Assinaturas de Conta
Monitoramento de Transações
Monitoramento de Slot & Bloco
Decodificação de Dados de Transação
transactionUpdate binárias em transações Solana legíveis.Dados de Pump AMM em Stream
Solicitação de Assinatura
Na solicitação de assinatura, você precisa incluir os seguintes parâmetros gerais:fromSlot (um número u64) no objeto principal SubscribeRequest para reproduzir dados a partir de um slot específico. A reprodução atualmente é limitada aos últimos 216.000 slots (≈24 horas); note que reproduções mais antigas que ~20 minutos retornam apenas dados finalizados.Slots
Slots
mySlotLabel) é uma etiqueta definida pelo usuário para esta configuração de filtro específica, permitindo potencialmente definir múltiplas configurações nomeadas, se necessário (embora normalmente uma seja suficiente).Accounts
Accounts
tokenAccounts) é uma etiqueta definida pelo usuário para esta configuração de filtro.Se todos os campos estiverem vazios, todas as contas serão transmitidas. Caso contrário:- Os campos operam como um E lógico.
- Os valores dentro das matrizes agem como um OU lógico (exceto dentro de
filters, que operam como um E lógico).
Transaction
Transaction
myTxSubscription) é uma etiqueta definida pelo usuário para esta configuração de filtro.Se todos os campos forem deixados vazios, todas as transações serão transmitidas. Caso contrário:- Os campos operam como um E lógico.
- Os valores dentro das matrizes são tratados como um OU lógico (exceto para
accountRequired, onde todos devem corresponder).
Block
Block
myBlockLabel) é uma etiqueta definida pelo usuário para esta configuração de filtro específico.Blocks Meta
Blocks Meta
blockmetadata) é uma etiqueta definida pelo usuário para esta assinatura. Atualmente, não há filtros disponíveis para metadados de bloco — todas as mensagens são transmitidas por padrão.Entries
Entries
entrySubscribe) é uma etiqueta definida pelo usuário para esta assinatura. Atualmente, não há filtros disponíveis para entradas; todas as entradas são transmitidas.Exemplos de Código (LaserStream SDK)
- Atualizações de Slot
- Atualizações de Conta
- Atualizações de Transação
- Blocos
- Metadados de Bloco
- Entradas
Opções de SDK
Fornecemos SDKs oficiais para várias linguagens de programação:- TypeScript: LaserStream TypeScript SDK
- Rust: LaserStream Rust SDK
- Go: LaserStream Go SDK
Solução de Problemas / FAQ
Q: Estou experenciando atraso ou desempenho lento com minha conexão LaserStream. O que poderia estar causando isso?
Q: Estou experenciando atraso ou desempenho lento com minha conexão LaserStream. O que poderia estar causando isso?
- Lentidão do Cliente JavaScript: O cliente JavaScript pode ficar para trás ao processar muitas mensagens ou consumir muita largura de banda. Considere filtrar suas assinaturas de maneira mais estreita para reduzir o volume de mensagens, mudar para o LaserStream JavaScript SDK, ou tentar usar outra linguagem.
- Largura de banda local limitada: Assinaturas pesadas podem sobrecarregar clientes com largura de banda de rede limitada. Monitore o uso da rede e considere atualizar sua conexão ou reduzir o escopo da assinatura.
-
Distância geográfica: Rotas de rede longas aumentam a latência e a perda de pacotes. Use o endpoint mais próximo de seu servidor. Para conexões de alta latência, aumente os tamanhos dos buffers de leitura de rede (pode melhorar a largura de banda em mais de 5x):
Para persistir após reinicializações, adicione ao
/etc/sysctl.conf:Aumente os tamanhos da janela de stream e conexão HTTP/2 para 64MB para evitar gargalos de controle de fluxo. Ambos são necessários — elevar apenas a janela do stream deixa a janela de nível de conexão como a restrição de ligação: - Gargalos de processamento do lado do cliente: Certifique-se de que sua lógica de processamento de mensagens esteja otimizada e não bloqueie a thread principal por longos períodos.
Q: Estou recebendo erros de conexão. O que devo verificar?
Q: Estou recebendo erros de conexão. O que devo verificar?
Q: Por que meus filtros não estão funcionando como esperado?
Q: Por que meus filtros não estão funcionando como esperado?
Q: Posso assinar vários tipos de dados (ex.: contas e transações) em uma única solicitação?
Q: Posso assinar vários tipos de dados (ex.: contas e transações) em uma única solicitação?
accounts, transactions) dentro do mesmo objeto SubscribeRequest.Q: O LaserStream suporta grupos de consumo?
Q: O LaserStream suporta grupos de consumo?
Q: Por que minhas mensagens de log de transação estão sendo cortadas?
Q: Por que minhas mensagens de log de transação estão sendo cortadas?
Q: Por que estou recebendo apenas respostas Pong sem dados de conta ou slot?
Q: Por que estou recebendo apenas respostas Pong sem dados de conta ou slot?
ping em sua solicitação inicial SubscribeRequest faz com que o LaserStream ignore silenciosamente todos os filtros de assinatura — apenas um Pong é retornado sem dados de conta, transação ou slot. Para corrigir isso, remova ping da solicitação inicial de assinatura e em vez disso envie pings separadamente via saída do stream após a assinatura ser estabelecida. Isso mantém a conexão ativa sem interferir nos seus filtros.