O que é preconfSubscribe?
preconfSubscribe é um método WebSocket da Helius que transmite Preconfirmations — transações entregues antes de serem coletadas em entradas e fragmentadas em shreds. É o sinal de transação de menor latência oferecido pela Helius. Uma única assinatura entrega tanto as preconfirmações da Helius, emitidas no instante em que o líder executa a transação e contendo o status de execução, quanto as preconfirmações do BAM de validadores que executam o cliente Block Assembly Marketplace da Jito, emitidas quando o validador se compromete a executar a transação. O acesso está disponível em todos os planos pagos — consulte Preços.
A transmissão não é contínua. A cobertura escala com a participação de stake
encaminhando para o Helius ou executando BAM, portanto, espere slots sem mensagens — lide
com essas lacunas com graça. Veja Cobertura.
preconfSubscribe é servido a partir de wss://beta.helius-rpc.com — o endpoint Gatekeeper da Helius — em vez de mainnet.helius-rpc.com. Autentique-se com sua chave API como um parâmetro de consulta.
O hostname
beta refere-se à implementação do Gatekeeper,
não à maturidade das Pré-confirmations. Pré-confirmations são lançadas no
endpoint Gatekeeper primeiro; ele se tornará o endpoint padrão à medida que a Helius
migrar o tráfego para o Gatekeeper.Inscrever-se
Envie uma solicitação JSON-RPC com o métodopreconfSubscribe. O servidor responde com um ID de inscrição e, em seguida, transmite uma notificação para cada transação. Passe um filtro opcional como o primeiro elemento params para receber apenas transações correspondentes; omita params para receber o fluxo completo de ambos, Helius e BAM.
Resposta da Inscrição
result — é o ID da inscrição que você usa para cancelar a inscrição. Após essa confirmação, as notificações são transmitidas como quadros binários (veja abaixo).
Filtragem
Por padrão,preconfSubscribe transmite todas as transações de ambas as fontes. Para restringir o fluxo, passe um objeto de filtro como o primeiro elemento de params. A filtragem acontece no lado do servidor, então você só paga e recebe as transações de seu interesse.
params) corresponde a todas as transações de ambas as fontes.
Regras de filtro:
- Todos os predicados são combinados com AND e avaliados na ordem
includeSource→failed→regionInclude→signatures→accountExclude→accountRequired→accountInclude→signerExclude→signerInclude→instructions. - As pré-confirmações do BAM com status desconhecido ignoram o filtro
failed. As pré-confirmações da Helius com status desconhecido não correspondem a um filtrofailedexplícito. includeSourcedeve ser um array contendo apenasheliusebam. Um valor inválido retorna o erro JSON-RPC-32602(parâmetros inválidos).- As contas são chaves públicas codificadas em base58. Um valor inválido retorna o erro JSON-RPC
-32602(parâmetros inválidos). - Cada lista de contas ou signatários é limitada a 10.000 entradas.
signaturesé limitado a 1.000 entradas.
O filtro obsoleto
includeBam continua disponível para compatibilidade com versões anteriores.
includeBam: false equivale a includeSource: ["helius"]. includeBam: true ou
um campo omitido seleciona ambas as fontes. Não envie includeBam e
includeSource juntos.Filtragem por signatário e assinatura
UsesignerInclude para encontrar transações assinadas por uma conta específica. Use signerExclude para remover transações assinadas por qualquer conta listada. Uma conta referenciada não é considerada um signatário.
Use signatures quando você já souber quais transações deseja rastrear. O filtro corresponde à primeira assinatura da transação, que é a assinatura usada pelos métodos RPC da Solana. O filtro não pode ser alterado após a assinatura do fluxo, portanto, crie uma nova assinatura para rastrear novas assinaturas de transação.
Filtragem de instruções
Useinstructions para encontrar instruções de nível superior por programa e dados da instrução. Cada filtro de instrução aceita estes campos:
Cada entrada
memcmp aceita codificação base58, base64 ou hex. O padrão é base58. Uma transação corresponde quando uma instrução de nível superior atende a todas as condições de qualquer filtro de instrução.
A solicitação a seguir encontra instruções buy da pump.fun pelo discriminador Anchor correspondente:
memcmp por filtro de instrução. Cada valor memcmp deve ser decodificado em 1–128 bytes. Um deslocamento final de memcmp e dataSize não podem exceder 4.096 bytes.
Resolução da tabela de pesquisa de endereços (ALT)
Os filtros de conta correspondem a mais do que as chaves de conta estáticas da transação — a Helius resolve as tabelas de pesquisa de endereços v0 no lado do servidor. Portanto,accountInclude, accountExclude e accountRequired também correspondem a contas que uma transação carrega por meio de uma ALT.
Isso significa que você pode filtrar por qualquer conta acessada por uma transação, mesmo quando ela aparece apenas por trás de uma tabela de pesquisa — não é necessário manter mapeamentos de ALT nem resolver tabelas por conta própria. Basta passar a chave pública da conta, e a Helius fará a resolução antes de aplicar o filtro.
Filtragem por localização
UseregionInclude para receber apenas transações originadas em regiões específicas. Passe um ou mais códigos de região; uma transação passa pelo filtro quando sua região de origem corresponde a qualquer um deles.
sgp e dal.
Códigos de região válidos:
Quando
regionInclude está definido, as transações que não contêm informações de região são descartadas. Um código de região não reconhecido retorna o erro JSON-RPC -32602 (parâmetros inválidos).Payload da notificação
As notificações são entregues como quadros WebSocket binários (não como JSON). As pré-confirmações da Helius e do BAM compartilham o mesmo layout. Cada quadro é um layout de bytes compactado que transporta uma única transação:
O payload não tem um campo de fonte. Não deduza uma origem no BAM com base em
tx_index = 0, pois outras fontes também podem informar 0.
Como distinguir as duas fontes
Como não há um campo de fonte, você não pode classificar uma mensagem arbitrária como Helius ou BAM. O bytestatus fornece um classificador unidirecional:
statusé0ou1— a mensagem é uma pré-confirmação da Helius, e a transação foi executada. O BAM nunca informa esses valores.statusé2— a fonte é ambígua: pode ser uma pré-confirmação do BAM ou uma pré-confirmação da Helius cujo status de execução estava indisponível.
regionInclude é um filtro de assinatura do fluxo, não um campo do payload, e não pode ser lido em cada mensagem.
Se você precisar que todas as mensagens em um fluxo contenham o mesmo tipo de evidência, defina includeSource: ["helius"] ou includeSource: ["bam"]. Um fluxo exclusivo da Helius contém pré-confirmações emitidas durante a execução pelo líder.
Uma pré-confirmação é um sinal antecipado, não uma garantia. A transação ainda não
foi registrada on-chain e pode ser descartada — e o status de execução de uma pré-confirmação da Helius
reflete o resultado local do líder, que não é definitivo até que
o bloco seja confirmado. Confirme o registro por meio das verificações de compromisso padrão
antes de tratá-lo como definitivo.
Como decodificar a transação
Os bytes da transação são encaminhados exatamente como o validador os serializou, na codificação de transmissão padrão da versão da transação. As transações legadas e v0 usam o layout com assinaturas primeiro produzido porbincode. A transação v1 (SIMD-0385) usa um layout com a mensagem primeiro e as assinaturas no final. Por isso, bincode falha em payloads v1. Use um decodificador compatível com todas as versões:
- Rust:
agave-transaction-viewanalisa transações legadas, v0 e v1 no local, sem uma cópia intermediária. Esta é a opção recomendada.wincode, o serializador compatível com bincode usado pelos SDKs atuais da Solana, também decodifica v1 emVersionedTransaction. - JavaScript / TypeScript: verifique se a versão da sua biblioteca é compatível com a transação v1. Implementações mais antigas de
VersionedTransaction.deserializeaceitam apenas transações legadas e v0. Use@solana/kit8.0+ ou@solana/web3.jsv3. Consulte Compatibilidade com a transação v1.
Notificações duplicadas
As pré-confirmações da Helius e do BAM são desduplicadas por fonte, não entre fontes. Uma pequena parcela das transações chega à Helius por ambas, portanto, você pode receber a mesma assinatura duas vezes, e as duas cópias podem informar slots diferentes. Faça a desduplicação por assinatura no cliente e torne idempotentes as ações acionadas por transações, para que uma segunda notificação não dispare a mesma ação duas vezes. Confirme a execução e o registro por meio das verificações de compromisso padrão.Exemplo
Como cancelar a assinatura
Para parar de receber notificações, chamepreconfUnsubscribe com o ID da assinatura retornado por preconfSubscribe.
Preços
As Preconfirmations estão disponíveis em todos os planos pagos: Developer, Business, Professional e Enterprise. Planos gratuitos não são elegíveis. Consulte Créditos para obter detalhes. Slots sem nenhuma mensagem entregue custam zero crédito, mesmo quando o slot tem cobertura de preconfirmação. Quando um slot entrega pelo menos uma mensagem, cada assinaturapreconfSubscribe aberta é cobrada pelo maior valor entre 300 créditos ou 10 créditos por mensagem entregue.
Slots sem cobertura têm custo zero. Consulte Preços para conhecer os critérios de cobrança por origem e região.
Cada assinatura simultânea é cobrada de forma independente quando recebe pelo menos uma mensagem. Feche as assinaturas de que você não precisa mais com
preconfUnsubscribe. Com includeSource: ["helius"], slots cobertos somente pelo BAM são excluídos da cobrança. Quando regionInclude está definido, slots cobertos fora das regiões selecionadas têm custo zero para essa assinatura; slots correspondentes são cobrados somente quando a assinatura recebe pelo menos uma mensagem.
A cobrança é feita por mensagem, não por assinatura de transação única. Uma transação entregue pela Helius e pelo BAM é contabilizada duas vezes. Defina includeSource: ["helius"] se você quiser apenas pré-confirmações da Helius.
Preconfirmations é um produto novo, e os preços estão sujeitos a alterações.
Relacionados
Preconfirmations Overview
O que são Preconfirmations e onde elas se encontram no pipeline do validador.
transactionSubscribe
Transmita transações com compromisso confirmado usando filtros avançados.
preconfSubscribe API reference
Parâmetros da solicitação, campos de filtro e estrutura da notificação binária.