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

# IntentionBFT

> Le consensus : comment un séquencement et un vecteur de prix certifié sont entérinés ensemble, et comment le réseau est agencé.

IntentionBFT est le protocole de consensus d’Intention — un protocole BFT de la famille HotStuff, étendu pour l’infrastructure financière. La sûreté tient sans condition sous le seuil de fautes ; la vivacité tient une fois le réseau stabilisé.

Le consensus fait ici deux choses que celui d’une chaîne généraliste ne fait pas : il entérine un **séquencement** comme objet de première classe, et il entérine un **vecteur de prix certifié** dans le même événement. Tout ce que le [noyau](/fr/protocol/architecture/kernel) peut garantir de l’exécution repose sur le fait que les deux sont arrêtés avant qu’elle ne commence.

<h2 id="model">
  Le modèle
</h2>

IntentionBFT tolère un adversaire byzantin contrôlant jusqu’à un tiers de la mise totale. La mise honnête dépasse donc toujours les deux tiers, et le quorum standard est n’importe quel ensemble de validateurs dont la mise cumulée dépasse les deux tiers — ce que ces pages appellent un **quorum $2f+1$ pondéré par la mise**. Le réseau est partiellement synchrone : avant un point de stabilisation, les délais sont arbitraires ; après, les délais entre validateurs honnêtes sont bornés.

<div className="dg" data-dg="bft-prices">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-wire" d="M 163.00 78.00 L 176.60 78.00" />

      <path className="dg-head" d="M 183.00 78.00 L 176.60 82.40 L 176.60 73.60 Z" />

      <path className="dg-wire" d="M 350.00 78.00 L 363.60 78.00" />

      <path className="dg-head" d="M 370.00 78.00 L 363.60 82.40 L 363.60 73.60 Z" />

      <path className="dg-wire" d="M 537.00 78.00 L 550.60 78.00" />

      <path className="dg-head" d="M 557.00 78.00 L 550.60 82.40 L 550.60 73.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Sidecar oracle</span><span className="dg-s">un par validateur</span></div>
    <div className="dg-b dg--blue" style={{left:"25.9722%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Le validateur valide et signe</span><span className="dg-s">fraîcheur comprise, face à des seuils configurés</span></div>
    <div className="dg-b dg--blue" style={{left:"51.9444%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Gossip entre validateurs</span><span className="dg-s">message du réseau de consensus</span></div>
    <div className="dg-b dg--green" style={{left:"77.9167%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Prix certifiés</span><span className="dg-s">par epoch et tour</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"48.4277%",width:"100.0000%",height:"21.3836%"}}><span className="dg-t">La disponibilité du prix conditionne les blocs</span><span className="dg-s">Un validateur n’est éligible pour proposer un bloc que s’il présente des observations de prix valides pour le tour courant — les signatures qui entérinent les transactions entérinent donc aussi les prix contre lesquels elles se règlent.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"75.4717%",width:"100.0000%",height:"19.4969%"}}><span className="dg-t">Ce que cela n’affirme pas</span><span className="dg-s">Cela lie le prix à la transaction ; cela ne rend pas le prix juste — le consensus certifie qu’un quorum de validateurs a soumis ces observations à ce tour, rien de plus.</span></div>
  </div>
</div>

Chaque tour a un leader désigné. À l’intérieur d’un tour, une proposition collecte des agrégats de signatures $2f+1$ successifs, et les phases s’enchaînent en pipeline sur des tours adjacents, si bien qu’un bloc atteint la finalité — le moment où il devient irréversible — en deux allers-retours réseau dans le cas courant. Sous réactivité optimiste, la progression est bornée par le délai réel des messages ; la temporisation du pacemaker ne s’engage que si le réseau est adverse ou partitionné.

<h2 id="committing-an-ordering">
  Entériner un séquencement
</h2>

La séquence des transactions à l’intérieur d’un bloc est promue au rang d’objet entériné par le consensus, plutôt que laissée comme un sous-produit de l’exécution. Le hash du bloc couvre la charge utile ordonnée, si bien que tout réordonnancement postérieur au consensus invalide les signatures qui l’ont entérinée.

L’effet : une fois un bloc finalisé, un quorum $2f+1$ pondéré par la mise a signé un engagement sur ce séquencement exact, et aucun validateur honnête n’aura signé un autre séquencement des mêmes transactions dans le même tour. Combiné à une exécution séquentielle suivant cette séquence entérinée, c’est ce qui fait passer le rejeu déterministe d’une convention d’implémentation à une propriété que n’importe qui peut vérifier.

<Note>
  La latitude du leader à l’intérieur d’une même proposition — quels lots disponibles inclure et comment les agencer — reste une surface résiduelle, atténuée par la réputation des leaders et par le fait qu’un leader ne peut produire aucun bloc sans observations de prix valides. Des constructions d’équité de séquencement plus fortes sont suivies comme candidates à une évolution future.
</Note>

<h2 id="batch-availability">
  Disponibilité des lots
</h2>

Dans un protocole naïf, un leader propose un bloc dont la charge utile porte toutes les transactions du tour, ce qui couple la taille des messages de consensus au débit. IntentionBFT sépare la diffusion des données du séquencement.

Les validateurs diffusent en continu des lots de transactions en arrière-plan. Chaque lot est accusé de réception jusqu’à ce que son émetteur puisse prouver une disponibilité $2f+1$ pondérée par la mise ; ce n’est qu’alors qu’une proposition peut le référencer — par empreinte, non par contenu. Les messages de consensus restent petits quel que soit le débit, et un bloc entériné est toujours rejouable, parce qu’aucun bloc ne peut référencer des données que seule une minorité byzantine détenait.

<h2 id="certifying-prices">
  Certifier les prix
</h2>

Les validateurs sont aussi des observateurs de prix, et un bloc porte les prix contre lesquels il a été exécuté.

<div className="dg" data-dg="bft-topology">
  <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-soft" d="M 215.00 95.00 L 215.00 99.00" />

      <path className="dg-wire dg-soft" d="M 215.00 167.00 L 215.00 171.00" />

      <path className="dg-wire dg-soft" d="M 215.00 239.00 L 215.00 243.00" />
    </svg>

    <div className="dg-b dg--blue dg-left" style={{left:"0.0000%",top:"9.3168%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Validateurs</span><span className="dg-s">consensus · mempool · sidecar oracle · noyau · stockage</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"9.3168%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Les seuls participants qui votent</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"31.6770%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Nœuds complets de validateur</span><span className="dg-s">suivent et exécutent les blocs entérinés, sans voter</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"31.6770%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Isolation — ils absorbent lectures publiques et connexions de pairs pour que les validateurs ne soient pas exposés à l’internet ouvert</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"54.0373%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Nœuds complets publics</span><span className="dg-s">ouverts à tous ; suivent, exécutent, servent les lectures</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"54.0373%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">L’étage ouvert</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"0.0000%",top:"76.3975%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Clients</span><span className="dg-s">interfaces · agents · market makers · indexeurs</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"76.3975%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Ils se connectent aux nœuds complets, jamais aux validateurs. Qui veut la vue la plus complète et rapide fait tourner le sien.</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"59.7222%"}}><div className="dg-n">Quatre étages, en partant du consensus</div></div>
    <div className="dg-free" style={{left:"63.6111%",top:"0.0000%",width:"36.3889%"}}><div className="dg-n">Pourquoi cet étage</div></div>
  </div>
</div>

Chaque validateur fait tourner son propre [sidecar oracle](/fr/protocol/architecture/oracle), qui collecte les données des plateformes et produit un prix d’indice par instrument. Le validateur récupère ce prix, le valide — y compris sa fraîcheur par rapport à des seuils configurés —, le signe et diffuse par gossip la soumission signée aux autres validateurs, comme message du réseau de consensus. Les prix certifiés sont assemblés par epoch (époque) et par tour, puis portés dans le bloc, de sorte que les signatures qui entérinent les transactions entérinent aussi les prix contre lesquels ces transactions se règlent.

Un validateur n’est éligible pour proposer un bloc que s’il peut présenter des observations de prix valides pour le tour courant. La disponibilité des prix est donc une condition préalable à la production de blocs, et non une entrée que l’exécution espère trouver.

<Warning>
  Cela lie le prix à la transaction ; cela ne rend pas le prix correct. Le consensus certifie qu’un quorum de validateurs a soumis ces observations à ce tour. La justesse des plateformes sous-jacentes est une autre question, traitée par les règles d’agrégation de la page [Oracle](/fr/protocol/architecture/oracle) et encadrée par les [avertissements sur les risques](/fr/protocol/security/risks).
</Warning>

<h2 id="leader-reputation">
  Réputation des leaders
</h2>

Les leaders sont désignés tour par tour par une rotation déterministe pondérée par la mise, étendue par une heuristique de réputation sur une fenêtre glissante. Un validateur dont les propositions échouent de façon répétée — signe d’indisponibilité ou de comportement adverse — est rétrogradé dans les désignations suivantes et ses créneaux sont redistribués à des validateurs récemment réactifs, de sorte qu’un validateur indisponible n’enraye pas la progression en revendiquant la conduite de ses créneaux attribués.

Comme les observations de prix conditionnent l’éligibilité à proposer, la réputation doit aussi éviter de concentrer la conduite chez les validateurs disposant de la meilleure connectivité aux données de marché. Une exigence de diversité des sources — des observations tirées de plusieurs plateformes indépendantes par instrument — ferme ce chemin.

<h2 id="epochs-and-reconfiguration">
  Epochs et reconfiguration
</h2>

Le temps est organisé en epochs. À l’intérieur d’un epoch, l’ensemble des validateurs et la plupart des paramètres sont constants. Aux frontières d’epoch, ils peuvent changer par une reconfiguration autorisée par la gouvernance : changements de l’ensemble des validateurs, changements de paramètres de consensus, mises à jour des paramètres de risque et actions d’urgence. Les transitions sont atomiques — chaque validateur honnête voit la même transition à la même hauteur de bloc.

<h2 id="network-topology">
  Topologie du réseau
</h2>

<div className="dg" data-dg="bft-round">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-rule dg-dash" d="M 90 40 L 90 266" />

      <path className="dg-rule dg-dash" d="M 360 40 L 360 266" />

      <path className="dg-rule dg-dash" d="M 630 40 L 630 266" />

      <path className="dg-wire dg--blue" d="M 94.00 64.00 L 349.60 64.00" />

      <path className="dg-head dg--blue" d="M 356.00 64.00 L 349.60 68.40 L 349.60 59.60 Z" />

      <path className="dg-wire dg--sky" d="M 364.00 92.00 L 414.00 92.00 L 414.00 114.00 L 374.40 114.00" />

      <path className="dg-head dg--sky" d="M 368.00 114.00 L 374.40 109.60 L 374.40 118.40 Z" />

      <path className="dg-wire dg--sky dg-dash" d="M 356.00 146.00 L 100.40 146.00" />

      <path className="dg-head dg--sky" d="M 94.00 146.00 L 100.40 141.60 L 100.40 150.40 Z" />

      <path className="dg-wire dg--blue" d="M 94.00 218.00 L 349.60 218.00" />

      <path className="dg-head dg--blue" d="M 356.00 218.00 L 349.60 222.40 L 349.60 213.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 364.00 254.00 L 619.60 254.00" />

      <path className="dg-head dg--green" d="M 626.00 254.00 L 619.60 258.40 L 619.60 249.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Leader</span></div>
    <div className="dg-b dg--sky" style={{left:"39.7222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Validateurs</span></div>
    <div className="dg-b dg--green" style={{left:"77.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Chaîne</span></div>
    <div className="dg-b dg-dashed dg-tight dg-solid" style={{left:"14.4444%",top:"52.2013%",width:"33.6111%",height:"8.1761%"}}><span className="dg-s">Agrégat 2f+1 pondéré par la mise</span></div>
    <div className="dg-b dg--green" style={{left:"68.8889%",top:"86.7925%",width:"31.1111%",height:"11.9497%"}}><span className="dg-s">Séquencement et prix immuables</span></div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"15.0943%",width:"34.4444%",whiteSpace:"normal"}}>Propose un bloc — empreintes de lots et prix certifiés</div>
    <div className="dg-lbl" style={{left:"72.7778%",top:"32.3899%",width:"26.3889%",whiteSpace:"normal"}}>Vérifient disponibilité, séquencement, prix</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"40.8805%"}}>Vote</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"63.5220%"}}>Certifie le tour</div>
    <div className="dg-lbl" style={{left:"68.7500%",top:"74.8428%"}}>Entérinent</div>
  </div>
</div>

**Les validateurs** participent au consensus. Chacun fait tourner la pile complète : consensus, mempool, un sidecar oracle, l’exécution du noyau et le stockage. Ce sont les seuls participants qui votent.

**Les nœuds complets de validateur** se placent directement derrière les validateurs. Ils suivent les blocs entérinés et les exécutent, mais ne votent pas. Leur rôle est l’isolation — ils absorbent le trafic de lecture public et les connexions de pairs pour que les validateurs ne soient pas directement exposés à l’internet ouvert.

**Les nœuds complets publics** forment l’étage ouvert. N’importe qui peut en faire tourner un. Ils suivent la chaîne, exécutent les blocs entérinés, servent les lectures et alimentent les systèmes en aval.

**Les clients** — interfaces, agents de trading, market makers, indexeurs — se connectent à des nœuds complets plutôt qu’à des validateurs. Un client qui a besoin de la vue la plus complète et de la latence la plus faible fait tourner son propre nœud complet plutôt que de dépendre de celui d’un autre.

Les nœuds qui rejoignent le réseau ne rejouent pas depuis la genèse par défaut ; voir [synchronisation d’état](/fr/protocol/architecture/state/sync) pour la façon dont un nouveau nœud rattrape son retard.

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

<CardGroup cols={2}>
  <Card title="Mempool" href="/fr/protocol/architecture/mempool">
    Ce qui atteint le consensus, dans quelle séquence, et ce qui est écarté.
  </Card>

  <Card title="IntentionKernel" href="/fr/protocol/architecture/kernel">
    Ce qu’il advient d’un bloc une fois son séquencement et ses prix entérinés.
  </Card>

  <Card title="Oracle" href="/fr/protocol/architecture/oracle">
    Comment un prix d’indice est produit avant qu’un validateur ne le signe.
  </Card>

  <Card title="Faire tourner un nœud" href="/fr/developers/run-a-node">
    Pourquoi l’ensemble des validateurs est fermé, et comment demander à le rejoindre.
  </Card>
</CardGroup>
