¿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 transacción 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 y que incluyen 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 está disponible en todos los planes de pago. 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 con AND y se evalúan en el orden
includeSource→failed→regionInclude→signatures→accountExclude→accountRequired→accountInclude→signerExclude→signerInclude→instructions. - Las preconfirmaciones de BAM con estado desconocido ignoran el filtro
failed. Las preconfirmaciones de Helius con estado desconocido no coinciden con un filtrofailedexplícito. includeSourcedebe ser un arreglo que contenga únicamenteheliusybam. Un valor no válido devuelve el error JSON-RPC-32602(parámetros no válidos).- 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 o firmantes tiene un límite de 10,000 entradas.
signaturestiene un límite de 1,000 entradas.
El filtro obsoleto
includeBam sigue disponible por compatibilidad con versiones anteriores.
includeBam: false equivale a includeSource: ["helius"]. includeBam: true o
un campo omitido seleccionan ambas fuentes. No envíes includeBam y
includeSource juntos.Filtrado por firmante y firma
UsasignerInclude para buscar transacciones firmadas por una cuenta específica. Usa signerExclude para eliminar las transacciones firmadas por cualquiera de las cuentas indicadas. Una cuenta referenciada no cuenta como firmante.
Usa signatures cuando ya conozcas las transacciones que quieres rastrear. El filtro busca coincidencias con la primera firma de la transacción, que es la firma utilizada por los métodos RPC de Solana. El filtro no puede cambiar después de suscribirte, así que crea una suscripción nueva para rastrear firmas nuevas.
Filtrado de instrucciones
Usainstructions para buscar instrucciones de nivel superior por programa y datos de instrucción. Cada filtro de instrucciones admite estos campos:
Cada entrada
memcmp acepta codificación base58, base64 o hex. El valor predeterminado es base58. Una transacción coincide cuando una instrucción de nivel superior cumple todas las condiciones de cualquier filtro de instrucciones.
La siguiente solicitud busca instrucciones buy de pump.fun mediante su discriminador de Anchor:
memcmp por filtro de instrucciones. Cada valor memcmp debe decodificarse en 1–128 bytes. El desplazamiento final de memcmp y dataSize no deben superar los 4,096 bytes.
Resolución de tablas de consulta de direcciones (ALT)
Los filtros de cuentas no solo buscan coincidencias con las claves de cuentas estáticas de la transacción: Helius resuelve las tablas de consulta 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 una transacción utilice, incluso cuando solo aparezca detrás de una tabla de consulta. 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 encarga de la resolución antes de aplicar el filtro.
Filtrado por ubicación
UsaregionInclude para recibir solo las transacciones que se originen en regiones específicas. Pasa uno o más códigos de región; una transacción pasa 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 de región. Un código de región no reconocido devuelve el error JSON-RPC -32602 (parámetros no válidos).Contenido de la notificación
Las notificaciones se entregan como tramas WebSocket binarias (no JSON). Las preconfirmaciones de Helius y BAM comparten el mismo diseño. Cada trama utiliza un diseño de bytes empaquetados que contiene una sola transacción:
El contenido no tiene un campo de fuente. No deduzcas un origen de BAM a partir de
tx_index = 0, ya que otras fuentes también pueden informar 0.
Cómo distinguir las dos fuentes
Como no hay un campo de fuente, no puedes etiquetar un mensaje arbitrario como 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, no un campo del contenido, por lo que no se puede leer en cada mensaje.
Si necesitas que todos los mensajes de un flujo incluyan el mismo tipo de evidencia, establece includeSource: ["helius"] o includeSource: ["bam"]. Un flujo exclusivo de Helius contiene preconfirmaciones emitidas durante la ejecución del líder.
Una preconfirmación es una señal temprana, no una garantía. La transacción aún no
se ha registrado en la cadena 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 confirme el bloque. Confirma el registro mediante las comprobaciones de compromiso estándar
antes de considerarlo definitivo.
Decodificación de 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 para la versión de la transacción. Las transacciones heredadas y v0 utilizan el diseño de firmas primero que producebincode. La transacción v1 (SIMD-0385) utiliza un diseño con el mensaje primero y las firmas al final, por lo que bincode falla con contenidos v1. Usa un decodificador compatible con todas las versiones:
- Rust:
agave-transaction-viewanaliza las transacciones heredadas, v0 y v1 en el lugar, sin una copia intermedia. Esta es la opción recomendada.wincode, el serializador compatible con bincode que utilizan 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 transacciones llega a Helius por ambas fuentes, por lo que puedes recibir la misma firma dos veces y las dos copias pueden informar 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 el registro mediante las comprobaciones de compromiso estándar.Ejemplo
Cancelación de la suscripción
Para dejar de recibir notificaciones, llama apreconfUnsubscribe con el ID de suscripción devuelto por preconfSubscribe.
Precios
Preconfirmations está disponible en todos los planes de pago: Developer, Business, Professional y Enterprise. Los planes gratuitos no son elegibles. Consulta Créditos para obtener más información. Los slots sin mensajes entregados cuestan cero créditos, incluso cuando el slot tiene cobertura de preconfirmación. Cuando un slot entrega al menos un mensaje, por cada suscripciónpreconfSubscribe abierta se factura el importe mayor entre 300 créditos o 10 créditos por mensaje entregado.
Los slots sin cobertura tienen un costo de cero. Consulta Precios para conocer la elegibilidad de facturación según la fuente y la región.
Cada suscripción simultánea se factura de forma independiente cuando recibe al menos un mensaje. Cierra las suscripciones que ya no necesites con
preconfUnsubscribe. Con includeSource: ["helius"], los slots con cobertura exclusiva de BAM se excluyen de la facturación. Cuando se establece regionInclude, los slots con cobertura fuera de las regiones seleccionadas tienen un costo de cero para esa suscripción; los slots coincidentes solo se facturan cuando la suscripción recibe al menos un mensaje.
La facturación se realiza por mensaje, no por firma única. Una transacción entregada tanto por Helius como por BAM cuenta dos veces. Establece includeSource: ["helius"] si solo quieres preconfirmaciones de Helius.
Preconfirmations es un producto nuevo y los precios están sujetos a cambios.
Contenido relacionado
Preconfirmations Overview
Qué es Preconfirmations y dónde se ubica en el flujo de procesamiento del validador.
transactionSubscribe
Transmite transacciones con el nivel de compromiso confirmed y filtros avanzados.
preconfSubscribe API reference
Parámetros de solicitud, campos de filtro y estructura de las notificaciones binarias.