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

# Synchronisation d’état

> Comment un nœud qui n’a jamais vu la chaîne atteint la version courante, et comment il s’y maintient.

Un nœud qui rejoint le réseau doit répondre à deux questions : comment arriver là où la chaîne se trouve maintenant, et comment y rester. La synchronisation d’état répond aux deux, et le compromis entre les deux est explicite plutôt que caché.

<h2 id="two-modes-of-catching-up">
  Deux modes de rattrapage
</h2>

L’amorçage — atteindre la version courante en partant de rien — peut se faire de deux façons fondamentalement différentes.

**Rejouer l’historique.** Partir de la genèse et avancer, soit en exécutant à nouveau chaque transaction, soit en appliquant les sorties que l’exécution a déjà produites. On obtient un nœud qui détient tout l’historique : chaque version, chaque preuve, chaque transaction. C’est aussi lent, et cela devient plus lent chaque jour où la chaîne tourne.

**Télécharger l’état courant.** Sauter l’historique et récupérer les clés et valeurs d’état telles qu’elles sont à la dernière version, vérifiées par rapport à la racine entérinée. Le nœud est à jour en une fraction du temps, et ne sait rien de la façon dont la chaîne en est arrivée là.

<div className="dg" data-dg="state-sync">
  <div className="dg-c" style={{aspectRatio:"720 / 322"}}>
    <svg className="dg-w" viewBox="0 0 720 322" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 134.00 126.00 L 159.60 126.00" />

      <path className="dg-head dg--blue" d="M 166.00 126.00 L 159.60 130.40 L 159.60 121.60 Z" />

      <path className="dg-wire dg--sky" d="M 324.00 126.00 L 356.54 75.38" />

      <path className="dg-head dg--sky" d="M 360.00 70.00 L 360.24 77.76 L 352.84 73.00 Z" />

      <path className="dg-wire dg--yellow" d="M 324.00 126.00 L 356.54 176.62" />

      <path className="dg-head dg--yellow" d="M 360.00 182.00 L 352.84 179.00 L 360.24 174.24 Z" />

      <path className="dg-wire dg--green" d="M 568.00 70.00 L 578.66 119.74" />

      <path className="dg-head dg--green" d="M 580.00 126.00 L 574.36 120.66 L 582.96 118.82 Z" />

      <path className="dg-wire dg--green" d="M 568.00 182.00 L 578.66 132.26" />

      <path className="dg-head dg--green" d="M 580.00 126.00 L 582.96 133.18 L 574.36 131.34 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"30.4348%",width:"18.0556%",height:"17.3913%"}}><span className="dg-t">Un nouveau nœud</span></div>
    <div className="dg-b dg--yellow dg-round" style={{left:"23.6111%",top:"29.1925%",width:"20.8333%",height:"19.8758%"}}><span className="dg-t">Mode d’amorçage</span></div>
    <div className="dg-b dg--sky" style={{left:"50.5556%",top:"6.2112%",width:"27.7778%",height:"31.0559%"}}><span className="dg-t">Rejouer l’historique</span><span className="dg-s">réexécuter, ou appliquer les sorties, depuis la genèse</span><span className="dg-n">lent, et plus lent chaque jour qui passe</span></div>
    <div className="dg-b dg--yellow" style={{left:"50.5556%",top:"40.9938%",width:"27.7778%",height:"31.0559%"}}><span className="dg-t">Télécharger l’état courant</span><span className="dg-s">clés et valeurs à la dernière version, vérifiées face à la racine entérinée</span><span className="dg-n">à jour en une fraction du temps</span></div>
    <div className="dg-b dg--green" style={{left:"81.1111%",top:"25.4658%",width:"18.8889%",height:"27.3292%"}}><span className="dg-t">Version courante</span><span className="dg-s">puis en continu</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"78.2609%",width:"100.0000%",height:"18.0124%"}}><span className="dg-t">Les deux chemins ne s’équivalent pas</span><span className="dg-s">Un nœud qui a téléchargé l’état courant ne sert aucune requête historique ni ne dit comment une position en est arrivée là. Alimenter un indexeur ou un audit demande l’historique sauté.</span></div>
  </div>
</div>

À l’intérieur du chemin de rejeu, un autre choix se présente — réexécuter les transactions, appliquer les sorties stockées, ou laisser le nœud prendre à chaque instant la plus rapide des deux. Réexécuter est la vérification la plus forte, puisqu’elle reproduit le résultat au lieu de faire confiance à un résultat enregistré ; appliquer les sorties est plus rapide. Le mode mixte existe parce que la bonne réponse change selon le retard du nœud.

<Note>
  C’est une décision opérationnelle, pas un réglage par défaut à accepter sans réfléchir. Un nœud qui a téléchargé l’état courant ne peut ni servir de requêtes historiques, ni dire comment une position en est arrivée là — il n’a pas d’historique à lire. Un nœud qui sert un [indexeur](/fr/protocol/architecture/indexer) ou un processus d’audit a besoin de l’historique qu’il a sauté.
</Note>

<h2 id="staying-current">
  Rester à jour
</h2>

Une fois à la version courante, un nœud se maintient en consommant les blocs entérinés à mesure qu’ils arrivent — là encore soit en exécutant les transactions, soit en appliquant les sorties, avec le même compromis entre force de vérification et vitesse.

La différence avec l’amorçage, c’est que l’écart est petit et constant plutôt que grand et décroissant. Un nœud qui prend suffisamment de retard repasse par le chemin d’amorçage au lieu d’essayer de combler un écart arbitraire par petits pas.

<h2 id="how-data-moves">
  Comment les données circulent
</h2>

La synchronisation n’est pas un nœud qui demande à un autre une plage de blocs. Elle se décompose en couches, pour qu’aucun pair ne soit une dépendance et qu’aucune défaillance isolée ne bloque la progression.

| Couche                   | Rôle                                                                                                    |
| ------------------------ | ------------------------------------------------------------------------------------------------------- |
| **Service de stockage**  | Sert des données aux autres nœuds : transactions, sorties, valeurs d’état, et les preuves qui vont avec |
| **Client de données**    | Choisit les pairs, suit qui détient quoi, envoie les requêtes et traite celles qui échouent             |
| **Service de streaming** | Transforme « amène-moi d’ici à là » en un flux ordonné de fragments vérifiés                            |
| **Pilote**               | Décide de ce dont le nœud a besoin ensuite et applique ce qui arrive                                    |

La conséquence qu’il faut comprendre : un nœud en cours de synchronisation ne fait pas confiance à un pair. Chaque fragment arrive accompagné d’une preuve qui le rattache à une racine entérinée par le réseau, et un pair qui sert quelque chose d’incohérent est rejeté plutôt que cru. Le choix des pairs est une décision de performance, pas une décision de confiance.

<h2 id="verification">
  Vérification
</h2>

Rien dans la synchronisation d’état n’est accepté sur la seule foi de son expéditeur.

Les valeurs d’état sont vérifiées par rapport à la racine d’état entérinée ; les transactions et les sorties, par rapport aux accumulateurs. Un nœud qui termine son amorçage détient un état dont la racine correspond à ce qu’un quorum de validateurs a signé — c’est ce qui rend le chemin rapide sûr : télécharger l’état courant saute l’historique, mais ne saute pas la vérification.

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

<CardGroup cols={2}>
  <Card title="Stockage et preuves" href="/fr/protocol/architecture/state/storage">
    Les structures qui rendent la synchronisation vérifiable.
  </Card>

  <Card title="Faire tourner un nœud" href="/fr/developers/run-a-node">
    Les rôles de nœud, et comment demander à en opérer un.
  </Card>

  <Card title="Topologie du réseau" href="/fr/protocol/architecture/intention-bft">
    À quel palier de nœud parle un pair en cours de synchronisation.
  </Card>

  <Card title="Indexeur" href="/fr/protocol/architecture/indexer">
    Ce à quoi l’historique répond et que l’état courant ne peut pas.
  </Card>
</CardGroup>
