> ## 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.

# Indexer

> Come i blocchi confermati diventano dati interrogabili — il percorso in streaming da un full node alle interfacce REST e WebSocket.

La catena conferma blocchi. Le applicazioni pongono domande come *quali sono state le esecuzioni di questo conto la settimana scorsa* o *com'è fatto il book in questo momento*: domande a cui un archivio a forma di blocchi risponde male. L'indexer è ciò che converte l'uno nell'altro.

Sulla maggior parte delle catene l'indexer è un'infrastruttura critica: la catena emette eventi opachi e sono terze parti a ricostruirne il significato, quindi ciò che la tua applicazione crede dipende dall'indexer di cui si fida. Qui il passo di ricostruzione non esiste. Il [kernel](/it/protocol/architecture/kernel) emette output tipizzato e attribuito — ogni cambiamento di stato è già legato alla transazione che lo ha causato — quindi l'indexer rimodella i dati invece di inferirli.

Questo cambia a che cosa serve l'indexer. È un **livello di servizio dei dati**, non una fonte di verità. Tutto ciò che riporta può essere verificato contro la catena, e una discordanza è un bug dell'indexer, non una questione aperta.

<h2 id="the-path">
  Il percorso
</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">diviso per età</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">Full node</span><span className="dg-s">blocchi confermati come record tipizzati</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">Cache</span><span className="dg-s">recenti — in 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">File store</span><span className="dg-s">storici — durevoli</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">Servizio dati</span><span className="dg-s">entrambi come un unico stream</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">Gateway → REST · WebSocket</span><span className="dg-s">accesso, quote, routing</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">Perché la separazione</span><span className="dg-s">Seguire la testa è leggero e sensibile alla latenza; le interrogazioni storiche sono pesanti e legate al throughput. Un backfill sullo stesso percorso fermerebbe il live.</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">Livello di servizio, non fonte di verità</span><span className="dg-s">Il kernel emette output tipizzato e attribuito, così l'indexer rimodella invece di inferire. Una discordanza con la catena è un bug dell'indexer.</span></div>
  </div>
</div>

**Il full node** è l'origine. I record di trading escono da lì in streaming come dati tipizzati, non come transazioni grezze da interpretare.

**Cache e file store** dividono lo stream per età. I dati recenti vengono serviti dalla memoria, perché è quello che vuole la maggior parte dei consumatori e la latenza conta. I dati storici vengono scritti su archiviazione durevole su file, perché tenere tutto in memoria non è una strategia. Un consumatore che chiede qualcosa di vecchio e uno che segue la testa della catena vengono serviti da posti diversi senza che nessuno dei due se ne accorga.

**Il servizio dati** presenta entrambi come un unico stream. Un client chiede un intervallo che parte da dove vuole; se quell'intervallo venga servito dalla cache, dai file o da entrambi non è un problema del client.

**Il gateway** gestisce ciò che sta tra un servizio e la rete pubblica: accesso, quote e instradamento.

**Le interfacce REST e WebSocket** sono ciò che le applicazioni usano davvero: dati di mercato, storico di ordini ed esecuzioni, posizioni, stato del conto, pagamenti di funding e sottoscrizioni in tempo reale. Vedi il [riferimento API](https://testnet-openapi.intention.xyz/) per il dettaglio a livello di endpoint.

<h2 id="why-the-split-exists">
  Perché esiste la separazione
</h2>

Un unico servizio che seguisse la testa della catena e insieme rispondesse alle interrogazioni storiche non farebbe bene né l'una né l'altra cosa. Seguire la testa è sensibile alla latenza e leggero; le interrogazioni storiche sono sensibili al throughput e pesanti, e un solo backfill di grandi dimensioni manderebbe in stallo il percorso live.

Separarli significa che ricostruire lo storico di un nuovo consumatore a partire da mesi fa non degrada il feed di un market maker che segue la testa, e i due possono essere scalati in modo indipendente — cosa di cui hanno bisogno, perché i loro profili di carico non hanno nulla in comune.

<h2 id="what-it-is-safe-to-rely-on">
  Su che cosa ci si può appoggiare
</h2>

**Sicuro.** Tutto ciò che l'indexer serve derivandolo da blocchi confermati: esecuzioni, ordini, posizioni, pagamenti di funding, trasferimenti, dati di mercato. Sono rimodellati a partire dall'output della catena.

**Non è la stessa cosa.** Tutto ciò che non è ancora confermato. Un ordine accettato nel [mempool](/it/protocol/architecture/mempool) non è stato ordinato, e l'indexer non ha nulla da dire al riguardo. L'assenza dall'indexer significa non ancora confermato, non rifiutato.

**Verificabile.** Se una risposta conta abbastanza — una contestazione sul regolamento, un audit, una riconciliazione contabile — può essere verificata direttamente contro la catena invece di essere presa dall'indexer. Gestire un full node proprio è la forma più forte di questa verifica, ed è ciò che dovrebbe fare un partecipante che non può permettersi di sbagliare. Vedi [Gestire un nodo](/it/developers/run-a-node).

<Note>
  Due consumatori che leggono lo stesso intervallo confermato devono ottenere la stessa risposta. Se così non è, la discrepanza sta nel percorso di erogazione ed è un bug da segnalare, non una proprietà intrinseca della lettura di una catena tramite un indexer.
</Note>

<h2 id="where-to-go-next">
  Dove proseguire
</h2>

<CardGroup cols={2}>
  <Card title="Modello di stato" href="/it/protocol/architecture/state/model">
    Che cosa legge l'indexer e quale rappresentazione fa fede.
  </Card>

  <Card title="Sviluppatori" href="/it/developers/overview">
    Interfacce REST e WebSocket, SDK e strumenti.
  </Card>

  <Card title="Gestire un nodo" href="/it/developers/run-a-node">
    Verificare da solo contro la catena, e perché il set è chiuso.
  </Card>

  <Card title="Servizi di programma" href="/it/protocol/architecture/programs">
    Che cosa consuma questo stream per calcolare lo stato derivato dei conti.
  </Card>
</CardGroup>
