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

# Zustandssynchronisation

> Wie eine Node, die die Chain nie gesehen hat, zur aktuellen Version aufschließt und wie sie dort bleibt.

Eine Node, die dem Netzwerk beitritt, muss zwei Fragen beantworten: Wie komme ich dahin, wo die Chain jetzt steht, und wie bleibe ich dort? Die Zustandssynchronisation beantwortet beides, und der Zielkonflikt dazwischen ist ausdrücklich benannt statt versteckt.

<h2 id="two-modes-of-catching-up">
  Zwei Wege, um aufzuschließen
</h2>

Das Bootstrapping – von null auf die aktuelle Version zu kommen – geht auf zwei grundsätzlich verschiedene Arten.

**Die Historie erneut durchlaufen.** Bei Genesis beginnen und sich nach vorn arbeiten, entweder indem jede Transaktion erneut ausgeführt wird oder indem die Ausgaben angewendet werden, die die Ausführung bereits erzeugt hat. Das Ergebnis ist eine Node mit der gesamten Historie: jede Version, jeder Beweis, jede Transaktion. Es ist außerdem langsam, und es wird mit jedem Tag langsamer, den die Chain läuft.

**Den aktuellen Zustand herunterladen.** Die Historie überspringen und die Zustandsschlüssel und -werte so abrufen, wie sie bei der neuesten Version stehen, geprüft gegen die festgeschriebene Wurzel. Die Node ist in einem Bruchteil der Zeit aktuell – und weiß nichts darüber, wie die Chain dorthin gekommen ist.

<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">Eine neue Node</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">Bootstrapping-Modus</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">Historie durchlaufen</span><span className="dg-s">ab Genesis neu ausführen oder Ausgaben anwenden</span><span className="dg-n">langsam, und täglich langsamer</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">Zustand herunterladen</span><span className="dg-s">Schlüssel und Werte bei der neuesten Version, geprüft gegen die festgeschriebene Wurzel</span><span className="dg-n">aktuell in einem Bruchteil der Zeit</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">Aktuelle Version</span><span className="dg-s">laufender Sync</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">Die beiden Wege sind nicht gleichwertig</span><span className="dg-s">Eine Node, die den Zustand heruntergeladen hat, kann keine historischen Abfragen bedienen und nicht sagen, wie eine Position dorthin kam. Wer einen Indexer oder ein Audit bedient, braucht genau die übersprungene Historie.</span></div>
  </div>
</div>

Innerhalb des Replay-Pfads gibt es eine weitere Wahl – Transaktionen neu ausführen, die gespeicherten Ausgaben anwenden oder die Node an jeder Stelle das Schnellere wählen lassen. Die Neuausführung ist die stärkere Prüfung, weil sie das Ergebnis reproduziert, statt einem aufgezeichneten zu vertrauen; das Anwenden der Ausgaben ist schneller. Den gemischten Modus gibt es, weil die richtige Antwort davon abhängt, wie weit die Node zurückliegt.

<Note>
  Das ist eine operative Entscheidung und keine Voreinstellung, die man ungeprüft übernimmt. Eine Node, die den aktuellen Zustand heruntergeladen hat, kann weder historische Abfragen bedienen noch beantworten, wie eine Position dorthin gekommen ist, wo sie steht – sie hat keine Historie zu lesen. Eine Node, die einen [Indexer](/de/protocol/architecture/indexer) oder einen Prüfprozess bedient, braucht genau die Historie, die sie übersprungen hat.
</Note>

<h2 id="staying-current">
  Aktuell bleiben
</h2>

Ist die aktuelle Version erreicht, hält eine Node Schritt, indem sie festgeschriebene Blöcke konsumiert, sobald sie eintreffen – wieder entweder durch Ausführen der Transaktionen oder durch Anwenden der Ausgaben, mit derselben Abwägung zwischen Prüftiefe und Geschwindigkeit.

Der Unterschied zum Bootstrapping: Der Abstand ist klein und konstant statt groß und schrumpfend. Eine Node, die weit genug zurückfällt, geht wieder in den Bootstrapping-Pfad, statt einen beliebig großen Abstand schrittweise schließen zu wollen.

<h2 id="how-data-moves">
  Wie die Daten fließen
</h2>

Beim Sync bittet nicht einfach eine Node eine andere um einen Bereich von Blöcken. Der Ablauf ist in Schichten getrennt, damit kein einzelner Peer zur Abhängigkeit wird und kein einzelner Ausfall den Fortschritt anhält.

| Schicht               | Aufgabe                                                                                           |
| --------------------- | ------------------------------------------------------------------------------------------------- |
| **Storage-Service**   | Liefert Daten an andere Nodes: Transaktionen, Ausgaben, Zustandswerte und die zugehörigen Beweise |
| **Data-Client**       | Wählt Peers, verfolgt, wer was hat, sendet Anfragen und behandelt die fehlgeschlagenen            |
| **Streaming-Service** | Macht aus „bring mich von hier nach dort“ einen geordneten Strom geprüfter Chunks                 |
| **Driver**            | Entscheidet, was die Node als Nächstes braucht, und wendet an, was eintrifft                      |

Die Konsequenz, die man verstanden haben sollte: Eine synchronisierende Node vertraut keinem Peer. Jeder Chunk kommt mit einem Beweis gegen eine Wurzel, die das Netzwerk festgeschrieben hat, und ein Peer, der Inkonsistentes liefert, wird abgelehnt statt geglaubt. Die Peer-Auswahl ist eine Performance-Entscheidung, keine Vertrauensentscheidung.

<h2 id="verification">
  Verifikation
</h2>

Nichts in der Zustandssynchronisation wird akzeptiert, weil es von einem bestimmten Absender kommt.

Zustandswerte werden gegen den festgeschriebenen State-Root geprüft. Transaktionen und Ausgaben werden gegen die Akkumulatoren geprüft. Eine Node, die das Bootstrapping abschließt, hat einen Zustand, dessen Wurzel zu dem passt, was ein Quorum von Validatoren signiert hat – und genau das macht den schnellen Weg sicher: Wer den aktuellen Zustand herunterlädt, überspringt die Historie, nicht aber die Verifikation.

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

<CardGroup cols={2}>
  <Card title="Speicherung und Beweise" href="/de/protocol/architecture/state/storage">
    Die Strukturen, die Sync überprüfbar machen.
  </Card>

  <Card title="Node betreiben" href="/de/developers/run-a-node">
    Node-Rollen und wie man sich für den Betrieb einer Node meldet.
  </Card>

  <Card title="Netzwerktopologie" href="/de/protocol/architecture/intention-bft">
    Mit welcher Node-Stufe ein synchronisierender Peer spricht.
  </Card>

  <Card title="Indexer" href="/de/protocol/architecture/indexer">
    Was die Historie beantwortet, was der aktuelle Zustand nicht kann.
  </Card>
</CardGroup>
