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

# Modello di stato

> Che cosa costituisce lo stato della catena, come viene indirizzato e versionato, e quale delle tre rappresentazioni fa fede.

In un motore di negoziazione tre cose diverse si chiamano tutte «stato», e confonderle è il modo in cui i sistemi finiscono per dare risposte che dipendono da chi interroghi. Questa pagina le separa e dice quale fa fede.

<h2 id="three-representations">
  Tre rappresentazioni
</h2>

<div className="dg" data-dg="state-model">
  <div className="dg-c" style={{aspectRatio:"720 / 288"}}>
    <svg className="dg-w" viewBox="0 0 720 288" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 215.00 90.00 L 243.60 90.00" />

      <path className="dg-head dg--blue" d="M 250.00 90.00 L 243.60 94.40 L 243.60 85.60 Z" />

      <path className="dg-wire dg--green" d="M 470.00 90.00 L 498.60 90.00" />

      <path className="dg-head dg--green" d="M 505.00 90.00 L 498.60 94.40 L 498.60 85.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 615.00 145.00 L 615.00 176.00 L 105.00 176.00 L 105.00 151.40" />

      <path className="dg-head dg--green" d="M 105.00 145.00 L 109.40 151.40 L 100.60 151.40 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">Stato del motore</span><span className="dg-s">mercati · conti · posizioni · book · stanza di compensazione</span><span className="dg-n">dura tra i blocchi · una ricostruzione</span></div>
    <div className="dg-b dg--yellow dg-dashed" style={{left:"35.4167%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">Working set del blocco</span><span className="dg-s">prezzi mark · conti toccati · esecuzioni · output</span><span className="dg-n">dura un solo blocco · un giornale</span></div>
    <div className="dg-b dg--green" style={{left:"70.8333%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">Stato della catena</span><span className="dg-s">chiave-valore versionato, autenticato da Merkle</span><span className="dg-n">fa fede</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"72.9167%",width:"100.0000%",height:"23.6111%"}}><span className="dg-t">Il guasto che previene</span><span className="dg-s">Un motore la cui vista in memoria si è discostata da ciò che è stato consolidato continua a servire risposte, e ognuna è sbagliata in un modo che salta fuori solo al regolamento.</span></div>
    <div className="dg-lbl" style={{left:"50.0000%",top:"61.1111%",width:"45.8333%",whiteSpace:"normal"}}>lo stato del motore deve essere derivabile dal registro consolidato, mai il contrario</div>
  </div>
</div>

**Lo stato del motore** è ciò che il [kernel](/it/protocol/architecture/kernel) tiene fra un blocco e l'altro: metadati dei mercati, conti, posizioni, book degli ordini, stato degli strumenti, stato della stanza di compensazione. È la rappresentazione di lavoro, disposta per gli schemi di accesso che matching e compensazione hanno davvero, non per l'archiviazione.

**Il working set del blocco** esiste solo mentre un blocco viene eseguito: i prezzi mark fissati all'inizio, quali conti e quali ordini sono stati toccati, le esecuzioni prodotte, gli output in costruzione. È un giornale di ciò che è successo durante questo blocco.

**Lo stato della catena** è il risultato consolidato: voci chiave-valore versionate, autenticate da una struttura di Merkle, durevoli e rieseguibili. È ciò che un nodo sincronizza, ciò contro cui si fa una prova, e ciò che legge un [indexer](/it/protocol/architecture/indexer).

**Fa fede lo stato della catena.** Il working set del blocco è un giornale usato per costruire output deterministico, non una fonte di verità. Lo stato del motore è una ricostruzione dello stato della catena ottimizzata per l'esecuzione: deve essere derivabile dal registro consolidato, mai il contrario.

Invertire i due è un guasto preciso e riconoscibile: un motore la cui vista in memoria si è discostata da ciò che è stato consolidato continuerà a servire risposte, e ognuna sarà sbagliata in un modo che salta fuori solo al regolamento.

<h2 id="keys">
  Chiavi
</h2>

Lo stato della catena è indirizzato per chiave. Lo stato di negoziazione è raggruppato in namespace con un nome e una versione esplicita: per esempio la configurazione delle commissioni, l'indice dei contratti perpetui, la tabella dei livelli di leva, l'elenco dei ruoli amministrativi.

Il suffisso di versione non è un ornamento. Quando cambia la forma di una configurazione, questa passa a una nuova versione della propria chiave, e la chiave precedente viene conservata perché lo stato scritto con il vecchio schema resti leggibile durante la migrazione. Un lettore che cabla nel codice una versione e non ricontrolla mai leggerà in silenzio una configurazione superata dopo una migrazione; un lettore che risolve la chiave corrente no.

<Note>
  Per questo la configurazione va letta dalla catena e non fissata nel codice del client. Il [servizio dei livelli commissionali](/it/protocol/architecture/programs) rilegge a ogni ciclo la configurazione delle commissioni in vigore esattamente per questo motivo: una tabella dei livelli cablata dentro un client è una tabella che prima o poi non coinciderà con quella che la rete applica.
</Note>

<h2 id="versions">
  Versioni
</h2>

Ogni blocco consolidato fa avanzare una versione. I valori di stato sono memorizzati insieme alla versione in cui sono stati scritti: l'archivio non è soltanto «lo stato corrente», ma «lo stato a qualsiasi versione».

È questa proprietà a rendere possibili più cose insieme:

* **Le prove** possono essere prodotte contro una versione specifica e non solo contro il presente.
* **Il replay** può partire da qualsiasi versione, non solo dal genesis.
* **Le letture** possono essere storiche: un indexer che ricostruisce la storia di una posizione chiede versioni vecchie, non scorre un log.
* **Il pruning** diventa una decisione di policy su quanto indietro conservare, invece di un limite strutturale.

<h2 id="what-ends-up-committed">
  Che cosa finisce consolidato
</h2>

L'esecuzione del kernel produce due cose per blocco. Ogni transazione porta con sé scritture ed eventi propri, che le restano legati. Gli effetti che non appartengono a nessuna singola transazione utente — flussi di funding, movimenti del fondo assicurativo, contatori a livello di blocco — vanno su un canale di sistema dedicato.

Fra i due non si perde nulla. Non esiste un effetto di esecuzione dentro il kernel che manchi sia dall'output di una transazione sia dal canale di sistema. È questa completezza a permettere di trattare il registro consolidato come la storia intera e non come un suo riassunto, ed è la ragione per cui un evento può essere ricondotto alla transazione che lo ha causato anche quando il matching è stato eseguito a lotti.

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

<CardGroup cols={2}>
  <Card title="Archiviazione e prove" href="/it/protocol/architecture/state/storage">
    Come lo stato consolidato è archiviato fisicamente, autenticato e sottoposto a pruning.
  </Card>

  <Card title="Sincronizzazione dello stato" href="/it/protocol/architecture/state/sync">
    Come un nodo che non ha mai visto la catena riesce a mettersi in pari.
  </Card>

  <Card title="IntentionKernel" href="/it/protocol/architecture/kernel">
    Dove risiedono lo stato del motore e il working set del blocco.
  </Card>

  <Card title="Indexer" href="/it/protocol/architecture/indexer">
    Trasformare lo stato consolidato in qualcosa di interrogabile.
  </Card>
</CardGroup>
