> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Flujos analizados

> Suscríbete a transacciones de Solana decodificadas mediante WebSocket con filtrado del lado del servidor por programa, cuenta y nombre de instrucción.

<Note>
  Los flujos analizados están en **beta abierta**. Están disponibles en los planes de pago. Autentícate con la clave de API de tu proyecto. La API aún puede cambiar antes de su disponibilidad general.
</Note>

## ¿Qué son los flujos analizados?

Los flujos analizados son un servicio WebSocket que observa cada transacción confirmada de Solana (excepto las transacciones de voto), la decodifica y te envía las transacciones que coinciden con un filtro que tú defines. Indicas «Me interesan las instrucciones de ruta de Jupiter» o «Me interesa cualquier operación que afecte a esta cuenta», y el servidor se encarga de observar, decodificar y buscar coincidencias.

Recibes **transacciones completas y ya decodificadas**: cada instrucción con argumentos y cuentas con nombre, además de la comisión, la lista completa de claves de cuenta, un `summary` a nivel de transacción de lo que ocurrió, las transferencias de SOL y tokens, y referencias a las instrucciones exactas que coincidieron con tu filtro. Todos los datos se entregan con el nivel de confirmación **confirmed**.

## El modelo mental

Si ya conoces los detalles internos de Solana, continúa con la siguiente sección. De lo contrario, este es el modelo en el que se basa toda la API.

**Una transacción** es un mensaje firmado. Identifica a quien paga la comisión, enumera todas las cuentas que afectará y contiene una lista de instrucciones. Cuando examinas una, ves una firma (su identificador único), el slot en el que se incluyó, la comisión pagada, las claves de cuenta, si se completó correctamente o falló y las instrucciones.

**Una instrucción** es una acción: ejecutar este programa con esta entrada y usar estas cuentas. Un swap en Jupiter, una transferencia de tokens o un memo. Por lo general, una transacción contiene varias instrucciones que se ejecutan en orden.

**Los programas pueden llamar a otros programas.** Cuando Jupiter ejecuta un swap, no mueve los tokens por sí mismo. Su instrucción de ruta llama al programa de tokens para moverlos y a los programas de intercambio que mantienen la liquidez. Esas llamadas anidadas también son instrucciones y se denominan instrucciones internas (o CPI, invocaciones entre programas). Esto es importante cuando escribes un filtro: gran parte de la actividad real, como los movimientos de tokens dentro de un swap, ocurre en instrucciones internas, por lo que tu filtro coincide con ellas de forma predeterminada. Si solo quieres las instrucciones que firmó un usuario, establece `includeCpi` en false.

**Las cuentas** son los elementos on-chain con los que trabaja una instrucción: billeteras, saldos de tokens, pools y mints. Cada instrucción las incluye como una lista ordenada de direcciones, y el orden forma parte del contrato: el programa define qué significa cada posición. Por ejemplo, el programa de tokens espera primero la cuenta de la que se tomarán los tokens, luego la cuenta que los recibirá y, por último, el propietario que aprueba la transferencia.

**Los roles** asignan nombres a esas posiciones. La mayoría de los programas conocidos publican un manual legible por máquina para su interfaz, denominado IDL. El manual enumera todas las instrucciones del programa, el significado de sus campos de datos y la finalidad de cada posición de cuenta. Helius mantiene un catálogo de estos manuales para miles de programas. Con este catálogo, una simple lista de direcciones se convierte en cuentas con nombre: para una transferencia de tokens, la posición 0 se convierte en `source`, la posición 1 se convierte en `destination` y la posición 2 se convierte en `authority`. En lugar de adivinar qué significa la tercera dirección, puedes leer `{"name": "authority", "pubkey": "9xQe...", "isSigner": true}`. Estos nombres son los roles que puedes usar en los filtros.

**La decodificación** aplica la misma idea a los datos de entrada de la instrucción. Durante la transmisión, esos datos son bytes opacos. Con el manual del programa, los bytes se convierten en valores con nombre: `{"in_amount": "1000000", "slippage_bps": 50}`. No todas las instrucciones se pueden decodificar, por lo que cada una queda en uno de tres estados que puedes identificar directamente mediante sus campos:

* **Decodificada**: la instrucción contiene un objeto `decoded` con `args` e `accounts` con nombre.
* **Reconocida**: además de `decoded`, la instrucción contiene un `summary` con un `type` (como `swap`), un `description` legible para humanos y una carga útil `parsedData` estructurada, como metadatos de un swap con cantidades y mints.
* **Sin decodificar**: el programa o la instrucción no está en el catálogo, `decoded` es `null` y, en su lugar, la instrucción contiene los bytes sin procesar (`rawData`) y la lista simple de direcciones (`rawAccounts`), por lo que siempre tienes datos con los que trabajar.

Ese es todo el modelo, y tu filtro se crea directamente a partir de él:

* `programs`: a qué programa llama la instrucción
* `instructionNames`: cómo denomina esa acción el manual del programa
* `accounts.include`: qué direcciones afecta
* `accounts.roles`: qué dirección debe ocupar cada posición con nombre
* `includeCpi` e `includeFailed`: si se incluyen las instrucciones internas y las transacciones fallidas

**Los filtros seleccionan instrucciones; las notificaciones entregan la transacción completa.**

### Comparación

<CardGroup cols={2}>
  <Card title="vs Enhanced WebSockets" icon="bolt">
    Los [WebSockets mejorados](/docs/es/rpc/websocket) transmiten transacciones completas o actualizaciones de cuentas sin decodificarlas. Los flujos analizados buscan coincidencias a nivel de instrucción y decodifican todo por ti.
  </Card>

  <Card title="vs LaserStream gRPC" icon="server">
    [LaserStream](/docs/es/laserstream) es un flujo continuo de datos gRPC de alto rendimiento que filtras y decodificas en el cliente. Los flujos analizados son una API WebSocket que filtra y decodifica en el servidor.
  </Card>

  <Card title="vs Parsed Events" icon="clock-rotate-left">
    Los [eventos analizados](/docs/es/parsed-events) aplican la misma decodificación a transacciones históricas: analiza firmas o recorre por páginas el historial de una dirección bajo demanda mediante REST y GraphQL. Los flujos analizados envían las transacciones nuevas conforme se registran.
  </Card>
</CardGroup>

## Programas compatibles

Los flujos analizados decodifican **más de 3,600 programas** a partir de sus IDL on-chain, además de programas principales como SPL Token, Token-2022 y System Program mediante decodificadores integrados. Puedes filtrar por la dirección de *cualquier* programa. Las instrucciones que el servicio no puede decodificar se transmiten como datos de instrucción sin procesar.

Estos son algunos de los programas decodificados más utilizados:

<AccordionGroup>
  <Accordion title="DEXs & AMMs" icon="arrow-right-arrow-left">
    | Programa              | Dirección                                      |
    | --------------------- | ---------------------------------------------- |
    | Jupiter Aggregator v6 | `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4`  |
    | Raydium CLMM          | `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` |
    | Raydium CPMM          | `CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C` |
    | Orca Whirlpool        | `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc`  |
    | Meteora DLMM          | `LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo`  |
    | Meteora Pools         | `Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB` |
    | Lifinity v2           | `2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c` |
  </Accordion>

  <Accordion title="Launchpads" icon="rocket">
    | Programa | Dirección                                     |
    | -------- | --------------------------------------------- |
    | Pump.fun | `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` |
    | PumpSwap | `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA` |
  </Accordion>

  <Accordion title="Lending & Perps" icon="building-columns">
    | Programa       | Dirección                                     |
    | -------------- | --------------------------------------------- |
    | marginfi v2    | `MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA` |
    | Kamino Lending | `KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD` |
  </Accordion>

  <Accordion title="NFTs & Compression" icon="image">
    | Programa                  | Dirección                                      |
    | ------------------------- | ---------------------------------------------- |
    | Metaplex Bubblegum (cNFT) | `BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY` |
  </Accordion>
</AccordionGroup>

<Tip>
  ¿No ves un programa? Es probable que aún esté en el catálogo. Llama a [`describeProgram`](/docs/es/parsed-streams/quickstart#descubrimiento) con su dirección para consultar sus instrucciones, eventos y roles de cuenta.
</Tip>

## Acceso

Los flujos analizados están en beta abierta y disponibles en los planes de pago. Obtén tu clave de API en el [panel de Helius](https://dashboard.helius.dev).

Conéctate al endpoint beta:

```text theme={"system"}
wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>
```

Autentícate con la clave de API de tu proyecto. Pásala como parámetro de consulta `api-key` (o mediante el encabezado `x-api-key`). La clave se verifica cuando se abre la conexión: si falta o no es válida, la solicitud se rechaza con HTTP 401; si el proyecto alcanzó su límite de conexiones, recibe HTTP 429.

## Primeros pasos

<CardGroup cols={2}>
  <Card title="Quickstart" icon="bolt" href="/docs/es/parsed-streams/quickstart">
    Conéctate, envía tu primer filtro y lee una notificación.
  </Card>

  <Card title="Track Jupiter Swaps" icon="arrow-right-arrow-left" href="/docs/es/parsed-streams/guides/track-jupiter-swaps">
    Crea y suscribe un filtro real mediante la detección de programas.
  </Card>

  <Card title="Track Pump.fun Mints" icon="rocket" href="/docs/es/parsed-streams/guides/track-pumpfun-mints">
    Un listener resistente a reconexiones que registra cada nuevo despliegue de tokens de Pump.fun.
  </Card>

  <Card title="Handling Reconnects" icon="rotate" href="/docs/es/parsed-streams/guides/handling-reconnects">
    Detecta desconexiones, aumenta progresivamente el tiempo de espera, vuelve a suscribirte y recupera los slots omitidos.
  </Card>
</CardGroup>
