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

# Indexador

> Cómo los bloques confirmados se convierten en datos consultables: la ruta de streaming desde un nodo completo hasta las superficies REST y WebSocket.

La cadena confirma bloques. Las aplicaciones hacen preguntas como *cuáles fueron las ejecuciones de esta cuenta la semana pasada* o *qué aspecto tiene el libro ahora mismo*, preguntas que un registro con forma de bloque responde mal. El indexador es lo que convierte lo uno en lo otro.

En la mayoría de las cadenas el indexador es crítico para la infraestructura: la cadena emite eventos opacos y terceros reconstruyen el significado a partir de ellos, de modo que lo que tu aplicación cree depende de en qué indexador confía. Aquí el paso de reconstrucción no existe. El [kernel](/es/protocol/architecture/kernel) emite salida tipada y atribuida, con cada cambio de estado ya ligado a la transacción que lo causó, así que el indexador remodela los datos en lugar de inferirlos.

Eso cambia para qué sirve el indexador. Es una **capa de servicio**, no una fuente de verdad. Todo lo que reporta se puede comprobar contra la cadena, y una discrepancia es un fallo del indexador y no una cuestión abierta.

<h2 id="the-path">
  La ruta
</h2>

<div className="dg" data-dg="indexer-path">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-wire dg--blue dg-soft" d="M 123.00 102.00 L 155.98 75.97" />

      <path className="dg-head dg--blue" d="M 161.00 72.00 L 158.70 79.42 L 153.25 72.51 Z" />

      <path className="dg-wire dg--blue dg-soft" d="M 123.00 102.00 L 156.23 131.73" />

      <path className="dg-head dg--blue" d="M 161.00 136.00 L 153.30 135.01 L 159.16 128.45 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 349.00 72.00 L 381.98 98.03" />

      <path className="dg-head dg--sky" d="M 387.00 102.00 L 379.25 101.49 L 384.70 94.58 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 349.00 136.00 L 382.23 106.27" />

      <path className="dg-head dg--sky" d="M 387.00 102.00 L 385.16 109.55 L 379.30 102.99 Z" />

      <path className="dg-wire dg--green" d="M 536.00 102.00 L 551.60 102.00" />

      <path className="dg-head dg--green" d="M 558.00 102.00 L 551.60 106.40 L 551.60 97.60 Z" />
    </svg>

    <div className="dg-band" style={{left:"20.8333%",top:"8.1761%",width:"29.1667%",height:"47.7987%"}}><span className="dg-cap">por antigüedad</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"19.4969%",width:"16.3889%",height:"25.1572%"}}><span className="dg-t">Nodo completo</span><span className="dg-s">bloques confirmados como registros tipados</span></div>
    <div className="dg-b dg--sky" style={{left:"23.0556%",top:"14.4654%",width:"24.7222%",height:"16.3522%"}}><span className="dg-t">Caché</span><span className="dg-s">reciente — en memoria</span></div>
    <div className="dg-b dg--sky" style={{left:"23.0556%",top:"34.5912%",width:"24.7222%",height:"16.3522%"}}><span className="dg-t">Almacén de ficheros</span><span className="dg-s">histórico — duradero</span></div>
    <div className="dg-b dg--sky" style={{left:"54.4444%",top:"19.4969%",width:"19.4444%",height:"25.1572%"}}><span className="dg-t">Servicio de datos</span><span className="dg-s">ambos como un solo flujo</span></div>
    <div className="dg-b dg--green" style={{left:"78.0556%",top:"19.4969%",width:"21.9444%",height:"25.1572%"}}><span className="dg-t">Pasarela → REST · WebSocket</span><span className="dg-s">acceso, cuotas, enrutamiento</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"67.2956%",width:"48.8889%",height:"27.6730%"}}><span className="dg-t">Por qué se separan</span><span className="dg-s">Seguir la cabeza es sensible a la latencia y ligero; las consultas históricas, al rendimiento y pesadas. Un relleno por la ruta compartida atascaría la ruta en vivo.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"51.1111%",top:"67.2956%",width:"48.8889%",height:"27.6730%"}}><span className="dg-t">Capa de servicio, no fuente de verdad</span><span className="dg-s">El kernel emite salida tipada y atribuida, así que el indexador remodela en lugar de inferir. Una discrepancia con la cadena es un fallo del indexador.</span></div>
  </div>
</div>

**Un nodo completo** es el origen. Los registros de trading salen de él en streaming como datos tipados, no como transacciones en bruto que haya que interpretar.

**La caché y el almacén de ficheros** dividen el flujo por antigüedad. Los datos recientes se sirven desde memoria, porque es lo que quiere la mayoría de los consumidores y la latencia importa. Los datos históricos se escriben en almacenamiento duradero en ficheros, porque retenerlo todo en memoria no es una estrategia. Un consumidor que pide algo antiguo y otro que sigue la cabeza de la cadena se sirven desde sitios distintos sin que ninguno lo note.

**El servicio de datos** presenta ambos como un único flujo. Un cliente pide un rango que empieza en cualquier punto; si ese rango se sirve desde la caché, desde los ficheros o desde ambos no es problema del cliente.

**La pasarela** se ocupa de lo que corresponde entre un servicio y la internet pública: acceso, cuotas y enrutamiento.

**Las superficies REST y WebSocket** son lo que usan de verdad las aplicaciones: datos de mercado, historial de órdenes y ejecuciones, posiciones, estado de la cuenta, pagos de financiación y suscripciones en vivo. Consulta la [referencia de la API](https://testnet-openapi.intention.xyz/) para el detalle a nivel de endpoint.

<h2 id="why-the-split-exists">
  Por qué existe la separación
</h2>

Un único servicio que siguiera la cabeza de la cadena y a la vez respondiera consultas históricas no haría bien ninguna de las dos cosas. Seguir la cabeza es sensible a la latencia y ligero; las consultas históricas son sensibles al rendimiento y pesadas, y un solo relleno histórico grande atascaría la ruta en vivo.

Separarlos significa que rellenar el histórico de un consumidor nuevo desde hace meses no degrada el feed de un market maker que sigue la cabeza, y que ambos se pueden escalar de forma independiente, cosa que necesitan porque sus perfiles de carga no tienen nada en común.

<h2 id="what-it-is-safe-to-rely-on">
  De qué es seguro depender
</h2>

**Seguro.** Todo lo que sirve el indexador y se deriva de bloques confirmados: ejecuciones, órdenes, posiciones, pagos de financiación, transferencias, datos de mercado. Son una remodelación de la salida de la cadena.

**No es lo mismo.** Todo lo que aún no está confirmado. Una orden aceptada en el [mempool](/es/protocol/architecture/mempool) no ha sido ordenada, y el indexador no tiene nada que decir sobre ella. Que algo falte en el indexador significa que todavía no está confirmado, no que haya sido rechazado.

**Verificable.** Si una respuesta importa lo suficiente (una disputa de compensación, una auditoría, una conciliación contable), se puede comprobar directamente contra la cadena en vez de tomarla del indexador. Ejecutar tu propio nodo completo es la forma más fuerte de hacerlo, y es lo que debería hacer un participante que no se puede permitir equivocarse. Consulta [Ejecutar un nodo](/es/developers/run-a-node).

<Note>
  Dos consumidores que lean el mismo rango confirmado deberían obtener la misma respuesta. Si no es así, la discrepancia está en la ruta de servicio y es un fallo que hay que reportar, no una propiedad inherente a leer una cadena a través de un indexador.
</Note>

<h2 id="where-to-go-next">
  Qué leer a continuación
</h2>

<CardGroup cols={2}>
  <Card title="Modelo de estado" href="/es/protocol/architecture/state/model">
    Qué está leyendo el indexador y qué representación es la autoritativa.
  </Card>

  <Card title="Desarrolladores" href="/es/developers/overview">
    Superficies REST y WebSocket, SDK y herramientas.
  </Card>

  <Card title="Ejecutar un nodo" href="/es/developers/run-a-node">
    Verificar tú mismo contra la cadena, y por qué el conjunto es cerrado.
  </Card>

  <Card title="Servicios de programa" href="/es/protocol/architecture/programs">
    Qué consume este flujo para calcular el estado derivado de las cuentas.
  </Card>
</CardGroup>
