¿Qué es preconfSubscribe?
preconfSubscribe es un método WebSocket de Helius que transmite Preconfirmations: transacciones entregadas antes de que se recopilen en entradas y se fragmenten. Es la señal de transacciones con menor latencia que ofrece Helius. Una suscripción entrega tanto las preconfirmaciones de Helius, emitidas en el instante en que el líder ejecuta la transacción e incluyendo su estado de ejecución, como las preconfirmaciones de BAM de validadores que ejecutan el cliente Block Assembly Marketplace de Jito, emitidas cuando el validador se compromete a ejecutar la transacción. El acceso requiere un plan Professional o superior. Consulta Precios.
El flujo no es continuo. La cobertura aumenta según la proporción de participación
que reenvía datos a Helius o ejecuta BAM, por lo que habrá slots sin mensajes. Gestiona
estas interrupciones adecuadamente. Consulta Cobertura.
preconfSubscribe se sirve desde wss://beta.helius-rpc.com, el endpoint de Gatekeeper de Helius, en lugar de mainnet.helius-rpc.com. Autentícate con tu clave de API como parámetro de consulta.
El nombre de host
beta hace referencia al despliegue de Gatekeeper,
no al nivel de madurez de Preconfirmations. Preconfirmations se lanza primero en el
endpoint de Gatekeeper, que se convertirá en el endpoint estándar a medida que Helius
migre el tráfico a Gatekeeper.Suscribirse
Envía una solicitud JSON-RPC con el métodopreconfSubscribe. El servidor responde con un ID de suscripción y luego transmite una notificación por cada transacción. Pasa un filtro opcional como primer elemento de params para recibir solo las transacciones que coincidan. Omite params para recibir el flujo completo de Helius y BAM.
Respuesta de suscripción
result: es el ID de suscripción que usarás para cancelar la suscripción. Después de esta confirmación, las notificaciones se transmiten como tramas binarias (consulta más abajo).
Filtrado
De forma predeterminada,preconfSubscribe transmite todas las transacciones de ambas fuentes. Para limitar el flujo, pasa un objeto de filtro como primer elemento de params. El filtrado se realiza en el servidor, por lo que solo pagas y recibes las transacciones que te interesan.
params) coincide con todas las transacciones de ambas fuentes.
Reglas de filtrado:
- Todos los predicados se combinan mediante AND y se evalúan en el orden
includeBam→failed→regionInclude→accountExclude→accountRequired→accountInclude. - Las preconfirmaciones con estado desconocido ignoran el filtro de estado
failedy se entregan si coinciden con los filtros de fuente, región y cuenta. - Las cuentas son claves públicas codificadas en base58. Un valor no válido devuelve el error JSON-RPC
-32602(parámetros no válidos). - Cada lista de cuentas tiene un límite de 500 entradas.
Resolución de tablas de búsqueda de direcciones (ALT)
Los filtros de cuentas no solo coinciden con las claves de cuentas estáticas de la transacción. Helius resuelve las tablas de búsqueda de direcciones v0 en el servidor, por lo queaccountInclude, accountExclude e accountRequired también coinciden con las cuentas que una transacción carga mediante una ALT.
Esto significa que puedes filtrar por cualquier cuenta que toque una transacción, incluso cuando solo aparezca detrás de una tabla de búsqueda. No necesitas mantener asignaciones de ALT ni resolver las tablas por tu cuenta. Solo pasa la clave pública de la cuenta y Helius se encargará de resolverla antes de aplicar el filtro.
Filtrado por ubicación
UsaregionInclude para recibir solo transacciones que se originen en regiones específicas. Pasa uno o más códigos de región. Una transacción supera el filtro cuando su región de origen coincide con cualquiera de ellos.
sgp e dal.
Códigos de región válidos:
Cuando se establece
regionInclude, se descartan las transacciones que no incluyen información sobre la región. Un código de región no reconocido devuelve el error JSON-RPC -32602 (parámetros no válidos).Carga útil de la notificación
Las notificaciones se entregan como tramas WebSocket binarias (no JSON). Las preconfirmaciones de Helius y BAM comparten la misma estructura. Cada trama tiene una estructura de bytes compacta que contiene una sola transacción:
La carga útil no tiene un campo de fuente. No deduzcas un origen de BAM a partir de
tx_index = 0, ya que las preconfirmaciones de Helius pueden incluir los mismos valores.
Distinguir las dos fuentes
Como no hay un campo de fuente, no puedes etiquetar un mensaje cualquiera como procedente de Helius o BAM. El bytestatus proporciona un clasificador unidireccional:
statuses0o1: el mensaje es una preconfirmación de Helius y la transacción se ejecutó. BAM nunca informa estos valores.statuses2: la fuente es ambigua. Puede ser una preconfirmación de BAM o una preconfirmación de Helius cuyo estado de ejecución no estaba disponible.
regionInclude es un filtro de suscripción y no un campo de la carga útil, por lo que no puede leerse en cada mensaje.
Si necesitas que todos los mensajes de un flujo incluyan el mismo tipo de evidencia, configura includeBam: false. Así solo quedan las preconfirmaciones de Helius, todas emitidas cuando el líder ejecuta la transacción. No existe un filtro exclusivo para BAM.
Una preconfirmación es una señal temprana, no una garantía. La transacción aún no
se ha incorporado onchain y todavía podría descartarse. Además, el estado de ejecución de una preconfirmación de Helius
refleja el resultado local del líder, que no es definitivo hasta que
se confirma el bloque. Confirma la inclusión mediante comprobaciones de compromiso estándar
antes de considerarla definitiva.
Decodificar la transacción
Los bytes de la transacción se reenvían exactamente como los serializó el validador, con la codificación de transmisión estándar correspondiente a la versión de la transacción. Las transacciones heredadas y v0 usan la estructura con las firmas al principio que generabincode. La transacción v1 (SIMD-0385) usa una estructura con el mensaje al principio y las firmas al final, por lo que bincode falla con cargas útiles v1. Usa un decodificador compatible con todas las versiones:
- Rust:
agave-transaction-viewanaliza las transacciones heredadas, v0 y v1 directamente, sin una copia intermedia. Esta es la opción recomendada.wincode, el serializador compatible con bincode que usan los SDK actuales de Solana, también decodifica v1 enVersionedTransaction. - JavaScript / TypeScript: asegúrate de que la versión de tu biblioteca sea compatible con la transacción v1. Las implementaciones anteriores de
VersionedTransaction.deserializesolo admiten transacciones heredadas y v0. Usa@solana/kit8.0+ o@solana/web3.jsv3. Consulta Compatibilidad con transacciones v1.
Notificaciones duplicadas
Las preconfirmaciones de Helius y BAM se desduplican por fuente, no entre fuentes. Una pequeña proporción de las transacciones llega a Helius por ambas vías, por lo que puedes recibir dos veces la misma firma, y las dos copias pueden indicar slots diferentes. Desduplica por firma en el cliente y haz que las acciones activadas por transacciones sean idempotentes, para que una segunda notificación no ejecute dos veces la misma acción. Confirma la ejecución y la inclusión mediante comprobaciones de compromiso estándar.Ejemplo
Cancelar la suscripción
Para dejar de recibir notificaciones, llama apreconfUnsubscribe con el ID de suscripción devuelto por preconfSubscribe.
Precios
Preconfirmations requiere un plan Professional o superior y cuesta 10 créditos por mensaje —un mensaje por transacción transmitida—, que se facturan con cargo a tu plan. Consulta Créditos para obtener más información. La facturación se realiza por mensaje, no por firma única. Una transacción entregada tanto por Helius como por BAM cuenta dos veces. ConfiguraincludeBam: false si solo quieres preconfirmaciones de Helius.
Preconfirmations es un producto nuevo y los precios están sujetos a cambios.
Contenido relacionado
Preconfirmations Overview
Qué son las Preconfirmations y dónde se ubican en el flujo de procesamiento del validador.
transactionSubscribe
Transmite transacciones con nivel de compromiso confirmado mediante filtros avanzados.
preconfSubscribe API reference
Parámetros de solicitud, campos de filtro y estructura de la notificación binaria.