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

> Konsens: wie eine Reihenfolge und ein zertifizierter Preisvektor gemeinsam festgeschrieben werden und wie das Netzwerk aufgebaut ist.

IntentionBFT ist das Konsensprotokoll von Intention – ein BFT-Protokoll aus der HotStuff-Familie, erweitert für Finanzinfrastruktur. Safety gilt unterhalb der Fehlerschwelle bedingungslos; Liveness gilt, sobald sich das Netzwerk stabilisiert hat.

Der Konsens leistet hier zwei Dinge, die der Konsens einer Allzweck-Chain nicht leistet: Er schreibt eine **Reihenfolge** als eigenständiges Objekt fest, und er schreibt im selben Ereignis einen **zertifizierten Preisvektor** fest. Alles, was der [Kernel](/de/protocol/architecture/kernel) über die Ausführung garantieren kann, hängt daran, dass beides feststeht, bevor die Ausführung beginnt.

<h2 id="model">
  Modell
</h2>

IntentionBFT toleriert einen byzantinischen Angreifer, der bis zu einem Drittel des gesamten Stakes kontrolliert. Der ehrliche Stake liegt damit immer über zwei Dritteln, und das Standard-Quorum ist jede Menge von Validatoren, deren gemeinsamer Stake zwei Drittel überschreitet – auf diesen Seiten **stake-gewichtetes Quorum von $2f+1$** genannt. Das Netzwerk ist partiell synchron: Vor einem Stabilisierungspunkt sind Verzögerungen beliebig, danach sind Verzögerungen zwischen ehrlichen Validatoren beschränkt.

<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">Oracle-Sidecar</span><span className="dg-s">je Validator</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">Der Validator prüft und signiert</span><span className="dg-s">samt Aktualität gegen konfigurierte Schwellen</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 zwischen Validatoren</span><span className="dg-s">als Nachricht im Konsensnetz</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">Zertifizierte Preise</span><span className="dg-s">je Epoche und Runde</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">Preisverfügbarkeit begrenzt die Blockproduktion</span><span className="dg-s">Ein Validator darf nur dann einen Block vorschlagen, wenn er gültige Preisbeobachtungen für die aktuelle Runde vorweisen kann – dieselben Signaturen, die die Transaktionen festschreiben, schreiben also auch die Preise fest, gegen die sie abgerechnet werden.</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">Was das nicht behauptet</span><span className="dg-s">Es bindet den Preis an die Transaktion. Korrekt wird der Preis dadurch nicht – der Konsens bezeugt, dass ein Quorum von Validatoren diese Beobachtungen in dieser Runde eingereicht hat, mehr nicht.</span></div>
  </div>
</div>

Jede Runde hat einen festgelegten Leader. Innerhalb einer Runde sammelt ein Vorschlag aufeinanderfolgende Signaturaggregate über $2f+1$, und die Phasen benachbarter Runden laufen überlappend, sodass ein Block im Normalfall nach zwei Netzwerk-Roundtrips endgültig ist. Unter optimistic responsiveness wird der Fortschritt allein durch die tatsächliche Nachrichtenlaufzeit begrenzt; das Backoff des Pacemakers greift nur, wenn das Netzwerk feindlich oder partitioniert ist.

<h2 id="committing-an-ordering">
  Eine Reihenfolge festschreiben
</h2>

Die Transaktionsreihenfolge innerhalb eines Blocks wird zu einem konsensbestätigten Objekt erhoben, statt ein Nebenprodukt der Ausführung zu bleiben. Der Block-Hash deckt die geordnete Nutzlast ab, sodass jede Umsortierung nach dem Konsens die Signaturen ungültig macht, die sie festgeschrieben haben.

Die Wirkung: Sobald ein Block endgültig ist, hat ein stake-gewichtetes Quorum von $2f+1$ eine Festlegung auf genau diese Reihenfolge signiert, und kein ehrlicher Validator wird in derselben Runde eine abweichende Reihenfolge derselben Transaktionen signiert haben. Zusammen mit der sequenziellen Ausführung über diese festgeschriebene Reihenfolge macht das aus dem deterministischen Replay statt einer Implementierungskonvention eine Eigenschaft, die jeder prüfen kann.

<Note>
  Der Ermessensspielraum des Leaders innerhalb eines einzelnen Vorschlags – welche verfügbaren Batches er aufnimmt und wie er sie anordnet – bleibt eine Restangriffsfläche. Gedämpft wird sie durch die Leader-Reputation und dadurch, dass ein Leader ohne gültige Preisbeobachtungen überhaupt keinen Block erzeugen kann. Stärkere Fair-Ordering-Konstruktionen sind als möglicher künftiger Upgrade-Schritt vorgemerkt.
</Note>

<h2 id="batch-availability">
  Verfügbarkeit von Batches
</h2>

In einem naiven Protokoll schlägt ein Leader einen Block vor, dessen Nutzlast alle Transaktionen der Runde enthält – damit hängt die Größe der Konsensnachrichten am Durchsatz. IntentionBFT trennt die Datenverbreitung von der Reihenfolge.

Validatoren verbreiten laufend im Hintergrund Transaktions-Batches. Jeder Batch wird quittiert, bis sein Urheber eine stake-gewichtete Verfügbarkeit von $2f+1$ nachweisen kann; erst dann darf ein Vorschlag ihn referenzieren – über den Digest, nicht über den Inhalt. Konsensnachrichten bleiben unabhängig vom Durchsatz klein, und ein festgeschriebener Block ist immer erneut ausführbar, weil kein Block Daten referenzieren kann, die allein eine byzantinische Minderheit vorgehalten hat.

<h2 id="certifying-prices">
  Preise zertifizieren
</h2>

Validatoren sind zugleich Preisbeobachter, und ein Block führt die Preise mit, gegen die er ausgeführt wurde.

<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">Validatoren</span><span className="dg-s">Konsens · Mempool · Oracle-Sidecar · Kernel · Speicher</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">Die einzigen Teilnehmer, die abstimmen</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">Validator-Full-Nodes</span><span className="dg-s">folgen festgeschriebenen Blöcken und führen sie aus; stimmen nicht ab</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">Abschirmung – sie fangen öffentlichen Lese-Traffic und Peer-Verbindungen ab, damit Validatoren nicht direkt am offenen Internet hängen</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">Öffentliche Full Nodes</span><span className="dg-s">jeder kann eine betreiben; folgen, ausführen, Lesezugriffe bedienen</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">Die offene Stufe</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">Front-Ends · Handelsagenten · Market Maker · Indexer</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">Sie verbinden sich mit Full Nodes, nie mit Validatoren. Wer die vollständigste Sicht bei geringster Latenz braucht, betreibt eine eigene.</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"59.7222%"}}><div className="dg-n">Vier Stufen, vom Konsens nach außen</div></div>
    <div className="dg-free" style={{left:"63.6111%",top:"0.0000%",width:"36.3889%"}}><div className="dg-n">Wozu die Stufe da ist</div></div>
  </div>
</div>

Jeder Validator betreibt seinen eigenen [Oracle-Sidecar](/de/protocol/architecture/oracle), der Daten von Handelsplätzen sammelt und daraus je Instrument einen Indexpreis erzeugt. Der Validator holt sich diesen Preis, prüft ihn – einschließlich der Aktualität gegen konfigurierte Schwellen –, signiert ihn und verteilt die signierte Einreichung per Gossip als Konsensnachricht an die anderen Validatoren. Zertifizierte Preise werden je Epoche und Runde zusammengestellt und im Block mitgeführt, sodass dieselben Signaturen, die die Transaktionen festschreiben, auch die Preise festschreiben, gegen die diese Transaktionen abgerechnet werden.

Ein Validator darf nur dann einen Block vorschlagen, wenn er gültige Preisbeobachtungen für die aktuelle Runde vorweisen kann. Preisverfügbarkeit ist damit eine Voraussetzung der Blockproduktion und keine Eingabe, auf die die Ausführung nur hofft.

<Warning>
  Das bindet den Preis an die Transaktion; korrekt wird der Preis dadurch nicht. Der Konsens bezeugt, dass ein Quorum von Validatoren in dieser Runde diese Beobachtungen eingereicht hat. Ob die zugrunde liegenden Handelsplätze zutreffend waren, ist eine andere Frage – behandelt von den Aggregationsregeln auf der Seite [Oracle](/de/protocol/architecture/oracle) und begrenzt durch die [Risikohinweise](/de/protocol/security/risks).
</Warning>

## Leader-Reputation

Leader werden Runde für Runde durch deterministische, stake-gewichtete Rotation bestimmt, ergänzt um eine Reputationsheuristik über ein gleitendes Fenster. Ein Validator mit wiederholt gescheiterten Vorschlägen – ein Hinweis auf Nichtverfügbarkeit oder feindliches Verhalten – wird bei späteren Auswahlen zurückgestuft, und seine Slots werden an zuletzt reaktionsfähige Validatoren verteilt. So blockiert ein nicht verfügbarer Validator den Fortschritt nicht dadurch, dass er die Führung in den ihm zugewiesenen Slots beansprucht.

Weil Preisbeobachtungen darüber entscheiden, wer überhaupt vorschlagen darf, muss die Reputation zugleich verhindern, dass sich die Führung bei den Validatoren mit der besten Marktdatenanbindung konzentriert. Eine Anforderung an die Quellenvielfalt – Beobachtungen aus mehreren unabhängigen Quellen je Instrument – schließt diesen Weg.

<h2 id="epochs-and-reconfiguration">
  Epochen und Rekonfiguration
</h2>

Die Zeit ist in Epochen (Epochs) gegliedert. Innerhalb einer Epoche sind das Validatorenset und die meisten Parameter konstant. An Epochengrenzen können sie sich durch eine von der Governance autorisierte Rekonfiguration ändern: Änderungen am Validatorenset, Änderungen der Konsensparameter, Aktualisierungen der Risikoparameter und Notfallmaßnahmen. Übergänge sind atomar – jeder ehrliche Validator sieht denselben Übergang auf derselben Blockhöhe.

<h2 id="network-topology">
  Netzwerktopologie
</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">Validatoren</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">Chain</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">stake-gewichtetes 2f+1-Aggregat</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">Reihenfolge und Preise sind jetzt unveränderlich</span></div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"15.0943%",width:"34.4444%",whiteSpace:"normal"}}>Block vorschlagen – Batch-Digests und zertifizierte Preise</div>
    <div className="dg-lbl" style={{left:"72.7778%",top:"32.3899%",width:"26.3889%",whiteSpace:"normal"}}>Verfügbarkeit, Reihenfolge und Preise prüfen</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"40.8805%"}}>Abstimmen</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"63.5220%"}}>Runde zertifizieren</div>
    <div className="dg-lbl" style={{left:"68.7500%",top:"74.8428%"}}>Festschreiben</div>
  </div>
</div>

**Validatoren** nehmen am Konsens teil. Jeder betreibt den vollständigen Stack: Konsens, Mempool, einen Oracle-Sidecar, Kernel-Ausführung und Speicher. Sie sind die einzigen Teilnehmer, die abstimmen.

**Validator-Full-Nodes** sitzen unmittelbar hinter den Validatoren. Sie folgen festgeschriebenen Blöcken und führen sie aus, stimmen aber nicht ab. Ihr Zweck ist Abschirmung – sie fangen öffentlichen Lese-Traffic und Peer-Verbindungen ab, damit Validatoren nicht direkt am offenen Internet hängen.

**Öffentliche Full Nodes** sind die offene Stufe. Jeder kann eine betreiben. Sie folgen der Chain, führen festgeschriebene Blöcke aus, beantworten Leseanfragen und beliefern nachgelagerte Systeme.

**Clients** – Front-Ends, Handelsagenten, Market Maker, Indexer – verbinden sich mit Full Nodes, nicht mit Validatoren. Ein Client, der die vollständigste Sicht bei geringster Latenz braucht, betreibt eine eigene Full Node, statt sich auf die eines anderen zu verlassen.

Nodes, die dem Netzwerk beitreten, führen standardmäßig nicht die gesamte Chain ab dem Genesis-Block erneut aus; wie eine neue Node aufholt, steht unter [State Sync](/de/protocol/architecture/state/sync).

<h2 id="where-to-go-next">
  Wie es weitergeht
</h2>

<CardGroup cols={2}>
  <Card title="Mempool" href="/de/protocol/architecture/mempool">
    Was den Konsens erreicht, in welcher Reihenfolge, und was verworfen wird.
  </Card>

  <Card title="IntentionKernel" href="/de/protocol/architecture/kernel">
    Was mit einem Block geschieht, sobald Reihenfolge und Preise festgeschrieben sind.
  </Card>

  <Card title="Oracle" href="/de/protocol/architecture/oracle">
    Wie ein Indexpreis entsteht, bevor ein Validator ihn signiert.
  </Card>

  <Card title="Node betreiben" href="/de/developers/run-a-node">
    Warum das Validatorenset geschlossen ist und wie man nach einem Beitritt fragt.
  </Card>
</CardGroup>
