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

# Indexeur

> Comment des blocs entérinés deviennent des données interrogeables — le chemin de diffusion d’un nœud complet jusqu’aux surfaces REST et WebSocket.

La chaîne entérine des blocs. Les applications posent des questions du type *quelles ont été les exécutions de ce compte la semaine dernière* ou *à quoi ressemble le carnet en ce moment* — des questions auxquelles un enregistrement en forme de blocs répond mal. L’indexeur est ce qui convertit l’un en l’autre.

Sur la plupart des chaînes, l’indexeur est une infrastructure critique : la chaîne émet des événements opaques et des tiers en reconstruisent le sens, de sorte que ce que croit votre application dépend de l’indexeur auquel elle fait confiance. Ici, l’étape de reconstruction n’existe pas. Le [noyau](/fr/protocol/architecture/kernel) émet une sortie typée et attribuée — chaque changement d’état est déjà lié à la transaction qui l’a causé — si bien que l’indexeur reformate les données au lieu de les déduire.

Cela change ce à quoi sert l’indexeur. C’est une **couche de service**, pas une source de vérité. Tout ce qu’il rapporte peut être confronté à la chaîne, et un désaccord est un bug de l’indexeur plutôt qu’une question ouverte.

<h2 id="the-path">
  Le chemin
</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">réparti par âge</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œud complet</span><span className="dg-s">blocs entérinés, en flux typé</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">récent — en mémoire</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">Stockage fichiers</span><span className="dg-s">historique — durable</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">Service de données</span><span className="dg-s">présente les deux en un flux</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">Passerelle → REST · WebSocket</span><span className="dg-s">accès, quotas, routage</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">Pourquoi la séparation</span><span className="dg-s">Suivre la tête est sensible à la latence et léger ; l’historique est sensible au débit et lourd. Un rattrapage sur un chemin partagé bloquerait le flux en direct.</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">Couche de service, pas source de vérité</span><span className="dg-s">Le noyau émet une sortie typée et attribuée : l’indexeur reformate au lieu de déduire. Un désaccord avec la chaîne est un bug de l’indexeur.</span></div>
  </div>
</div>

**Un nœud complet** est l’origine. Les enregistrements de trading en sortent en flux, sous forme de données typées, plutôt que de transactions brutes à interpréter.

**Le cache et le stockage fichiers** partagent le flux selon l’âge. Les données récentes sont servies depuis la mémoire, parce que c’est ce que veut la majorité des consommateurs et que la latence compte. Les données historiques sont écrites dans un stockage fichiers durable, parce que tout garder en mémoire n’est pas une stratégie. Un consommateur qui demande quelque chose d’ancien et un consommateur qui suit la tête de chaîne sont servis depuis des endroits différents sans que ni l’un ni l’autre s’en aperçoive.

**Le service de données** présente les deux comme un flux unique. Un client demande une plage commençant n’importe où ; savoir si cette plage est servie depuis le cache, depuis les fichiers ou depuis les deux n’est pas son problème.

**La passerelle** prend en charge ce qui se joue entre un service et l’internet public : accès, quotas et routage.

**Les surfaces REST et WebSocket** sont ce que les applications utilisent réellement — données de marché, historique des ordres et des exécutions, positions, état du compte, paiements de financement et abonnements en direct. Voir la [référence de l’API](https://testnet-openapi.intention.xyz/) pour le détail au niveau des endpoints.

<h2 id="why-the-split-exists">
  Pourquoi cette séparation existe
</h2>

Un service unique qui suivrait à la fois la tête de chaîne et répondrait aux requêtes historiques ferait mal les deux. Suivre la tête est sensible à la latence et porte sur peu de données ; les requêtes historiques sont sensibles au débit et portent sur beaucoup, et un seul gros rattrapage bloquerait le chemin temps réel.

Les séparer permet d’alimenter un nouveau consommateur depuis plusieurs mois en arrière sans dégrader le flux d’un market maker qui suit la tête, et de dimensionner les deux indépendamment — ce dont ils ont besoin, car leurs profils de charge n’ont rien en commun.

<h2 id="what-it-is-safe-to-rely-on">
  Ce sur quoi on peut s’appuyer sans risque
</h2>

**Sans risque.** Tout ce que l’indexeur sert et qui dérive de blocs entérinés : exécutions, ordres, positions, paiements de financement, transferts, données de marché. Ce sont des reformatages de la sortie de la chaîne.

**Pas la même chose.** Tout ce qui n’est pas encore entériné. Un ordre accepté dans le [mempool](/fr/protocol/architecture/mempool) n’a pas été séquencé, et l’indexeur n’a rien à en dire. Une absence dans l’indexeur signifie pas-encore-entériné, pas rejeté.

**Vérifiable.** Si une réponse compte assez — un litige de règlement, un audit, un rapprochement comptable — elle peut être confrontée directement à la chaîne plutôt que prise dans l’indexeur. Faire tourner votre propre nœud complet en est la forme la plus forte, et c’est ce que devrait faire un participant qui ne peut pas se permettre de se tromper. Voir [Faire tourner un nœud](/fr/developers/run-a-node).

<Note>
  Deux consommateurs qui lisent la même plage entérinée devraient obtenir la même réponse. Si ce n’est pas le cas, l’écart se situe dans le chemin de service et constitue un bug à signaler — ce n’est pas une propriété inhérente à la lecture d’une chaîne à travers un indexeur.
</Note>

<h2 id="where-to-go-next">
  Pour aller plus loin
</h2>

<CardGroup cols={2}>
  <Card title="Modèle d’état" href="/fr/protocol/architecture/state/model">
    Ce que lit l’indexeur, et quelle représentation fait autorité.
  </Card>

  <Card title="Développeurs" href="/fr/developers/overview">
    Les surfaces REST et WebSocket, les SDK et les outils.
  </Card>

  <Card title="Faire tourner un nœud" href="/fr/developers/run-a-node">
    Vérifier vous-même contre la chaîne, et pourquoi l’ensemble est fermé.
  </Card>

  <Card title="Services de programme" href="/fr/protocol/architecture/programs">
    Ce qui consomme ce flux pour calculer l’état dérivé des comptes.
  </Card>
</CardGroup>
