Saltar al contenido principal
Usa Sender Max (propina mín.: 0.001 SOL) para actuar según las Preconfirmations. Una preconfirmación solo resulta útil si tu transacción se incluye primero. Sender Max es la forma más rápida de lograrlo. Desarrolla sobre Sender Max desde el principio para aprovechar al máximo las Preconfirmations.

¿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étodo preconfSubscribe. 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

Guarda 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.
Todos los campos son opcionales. Si falta un campo, significa que ese predicado «no tiene restricciones», por lo que un filtro vacío (o la ausencia de 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 filtro failed explícito.
  • includeSource debe ser un arreglo que contenga únicamente helius y bam. 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. signatures tiene 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.
Para recibir solo preconfirmaciones de Helius:

Filtrado por firmante y firma

Usa signerInclude 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

Usa instructions 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:
El filtro solo comprueba las instrucciones de nivel superior. No puede buscar instrucciones invocadas mediante una invocación entre programas (CPI), ya que esas instrucciones no existen antes de la ejecución. Puedes proporcionar hasta 16 filtros de instrucciones y cuatro entradas 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 que accountInclude, 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

Usa regionInclude 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.
La región de origen depende de la fuente. Para las preconfirmaciones de Helius, es la región de Helius que recibió la transacción. Para las preconfirmaciones de BAM, es el endpoint regional de BAM que emitió la preconfirmación, no el lugar donde Helius la recibió. Los endpoints de BAM en Singapur y Dallas se asignan a 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 byte status proporciona un clasificador unidireccional:
  • status es 0 o 1 — el mensaje es una preconfirmación de Helius y la transacción se ejecutó. BAM nunca informa estos valores.
  • status es 2 — 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.
Ningún otro campo permite distinguirlas. El ID de secuencia y la posición del paquete de BAM no se incluyen en este flujo, por lo que no hay metadatos de ordenamiento de BAM que puedas usar como clave. Además, 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.
Lee y comprueba siempre primero el byte version. Actualmente es 1. Si Helius necesita actualizar el formato del contenido, la versión aumentará. Crea una bifurcación en función de ella para que tu decodificador siga funcionando entre cambios del esquema.
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 produce bincode. 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-view analiza 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 en VersionedTransaction.
  • JavaScript / TypeScript: asegúrate de que la versión de tu biblioteca sea compatible con la transacción v1. Las implementaciones anteriores de VersionedTransaction.deserialize solo admiten transacciones heredadas y v0. Usa @solana/kit 8.0+ o @solana/web3.js v3. 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 a preconfUnsubscribe 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ón preconfSubscribe 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.
Para controlar los costos, consolida los filtros de cuentas en una sola suscripción cuando sea práctico, usa regionInclude para limitar la facturación a las regiones que necesites, establece includeSource: ["helius"] cuando no necesites BAM y monitorea los créditos en el panel 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.