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

> Como os blocos confirmados se tornam dados consultáveis — o caminho de streaming de um nó completo até às superfícies REST e WebSocket.

A cadeia confirma blocos. As aplicações fazem perguntas como *quais foram as execuções desta conta na semana passada* e *que aspeto tem o livro neste momento* — perguntas a que um registo com forma de bloco responde mal. O indexador é o que converte uma coisa na outra.

Na maioria das cadeias, o indexador é crítico para a infraestrutura: a cadeia emite eventos opacos e terceiros reconstroem o significado a partir deles, pelo que aquilo em que uma aplicação acredita depende do indexador em que confia. Aqui o passo de reconstrução não existe. O [kernel](/pt/protocol/architecture/kernel) emite saída tipada e atribuída — cada alteração de estado já ligada à transação que a causou — pelo que o indexador remodela os dados em vez de os inferir.

Isso muda aquilo para que o indexador serve. É uma **camada de serviço**, não uma fonte de verdade. Tudo o que reporta pode ser verificado contra a cadeia, e uma divergência é um bug do indexador e não uma questão em aberto.

<h2 id="the-path">
  O caminho
</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">divisão por idade</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">Nó completo</span><span className="dg-s">blocos confirmados, em registos 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">Cache</span><span className="dg-s">recentes — da memória</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">Ficheiros</span><span className="dg-s">históricos — duráveis</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">Serviço de dados</span><span className="dg-s">apresenta ambos num só 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">acesso, quotas, rotas</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">Porque a divisão existe</span><span className="dg-s">Seguir a cabeça é sensível à latência e leve; as consultas históricas são sensíveis ao débito e pesadas. Um preenchimento num caminho partilhado bloquearia o feed em direto.</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">Camada de serviço, não fonte de verdade</span><span className="dg-s">O kernel emite saída tipada e atribuída, pelo que o indexador remodela em vez de inferir. Uma divergência com a cadeia é um bug do indexador.</span></div>
  </div>
</div>

**Um nó completo** é a origem. Os registos de negociação saem dele em streaming como dados tipados, e não como transações em bruto que exigem interpretação.

**A cache e o armazenamento em ficheiros** dividem o stream por idade. Os dados recentes são servidos a partir de memória, porque é o que a maioria dos consumidores quer e a latência conta. Os dados históricos são escritos em armazenamento de ficheiros durável, porque manter tudo em memória não é uma estratégia. Um consumidor que peça algo antigo e um consumidor que siga a cabeça da cadeia são servidos a partir de sítios diferentes sem que nenhum dê por isso.

**O serviço de dados** apresenta ambos como um único stream. Um cliente pede um intervalo com início em qualquer ponto; se esse intervalo é servido a partir da cache, dos ficheiros ou de ambos não é problema do cliente.

**O gateway** trata das preocupações que ficam entre um serviço e a internet pública: acesso, quotas e encaminhamento.

**As superfícies REST e WebSocket** são o que as aplicações realmente usam — dados de mercado, histórico de ordens e de execuções, posições, estado da conta, pagamentos de funding e subscrições em tempo real. Ver a [referência da API](https://testnet-openapi.intention.xyz/) para o detalhe ao nível dos endpoints.

<h2 id="why-the-split-exists">
  Porque a divisão existe
</h2>

Um único serviço que seguisse a cabeça da cadeia e ao mesmo tempo respondesse a consultas históricas não faria bem nenhuma das duas coisas. Seguir a cabeça é sensível à latência e leve; as consultas históricas são sensíveis ao débito e pesadas, e um único preenchimento histórico grande bloquearia o caminho em tempo real.

Separá-los significa que preencher o histórico de um novo consumidor desde há meses não degrada o feed de um market maker que segue a cabeça, e que os dois podem ser escalados de forma independente — o que precisam de ser, porque os seus perfis de carga não têm nada em comum.

<h2 id="what-it-is-safe-to-rely-on">
  Em que é seguro confiar
</h2>

**Seguro.** Tudo o que o indexador serve e que deriva de blocos confirmados: execuções, ordens, posições, pagamentos de funding, transferências, dados de mercado. Isto é remodelado a partir da saída da cadeia.

**Não é a mesma coisa.** Tudo o que ainda não foi confirmado. Uma ordem aceite no [mempool](/pt/protocol/architecture/mempool) não foi ordenada, e o indexador não tem nada a dizer sobre ela. A ausência do indexador significa ainda-não-confirmada, não rejeitada.

**Verificável.** Se uma resposta for suficientemente importante — um litígio de liquidação financeira, uma auditoria, uma reconciliação contabilística — pode ser verificada diretamente contra a cadeia em vez de ser aceite do indexador. Operar um nó completo próprio é a forma mais forte de o fazer, e é o que deve fazer quem não pode correr o risco de estar errado. Ver [Operar um nó](/pt/developers/run-a-node).

<Note>
  Dois consumidores que leiam o mesmo intervalo confirmado devem obter a mesma resposta. Se não obtiverem, a discrepância está no caminho de serviço e é um bug a reportar — não uma propriedade inerente a ler uma cadeia através de um indexador.
</Note>

<h2 id="where-to-go-next">
  Para onde ir a seguir
</h2>

<CardGroup cols={2}>
  <Card title="Modelo de estado" href="/pt/protocol/architecture/state/model">
    O que o indexador está a ler e qual é a representação que vale.
  </Card>

  <Card title="Programadores" href="/pt/developers/overview">
    Superfícies REST e WebSocket, SDKs e ferramentas.
  </Card>

  <Card title="Operar um nó" href="/pt/developers/run-a-node">
    Verificar diretamente contra a cadeia, e porque o conjunto é fechado.
  </Card>

  <Card title="Serviços de programa" href="/pt/protocol/architecture/programs">
    O que consome este stream para calcular estado de conta derivado.
  </Card>
</CardGroup>
