Catchain-Komponente

Catchain ist ein Kommunikationsprotokoll zwischen Validatoren. Es implementiert nicht den Konsensalgorithmus selbst, sondern bereitet Daten für die Entscheidung einer übergeordneten Komponente vor: validator-session . Catchain-Schlüsselaufgaben sind:

  • Einrichten eines Netzwerk-Overlays auf der Oberseite von ADNL für die Kommunikation zwischen Validatoren;
  • Einrichten und Aktualisieren einer periodisch aktualisierten Liste der Nachbarknotenliste, die für direkte Kommunikationen innerhalb des Overlays verwendet wird;
  • Empfangen von Blöcken von anderen Validierern und Zurücksenden von Entscheidungen des aktuellen Validierers;
  • Steuern von Blockabhängigkeiten;
  • Verwalten einer internen Datenbank, die Ergebnisse der aktuellen Catchain-Sitzung speichert, Wiederherstellen des Catchain-Sitzungsstatus nach einem Neustart des Validators;
  • Gabeln erkennen und Validatoren beschuldigen;
  • Aufrechterhaltung des Konsensalgorithmus.

Im Allgemeinen bietet die Catchain-Komponente einen Betriebsrahmen für andere Komponenten des Konsens der Validierungssitzung.

Catchain-Initialisierung in einem Knoten

Die Catchain-Sitzung beginnt mit der Erstellung des CatchainObjekts, das das ReceiverObjekt erstellt Receiverkonfiguriert ein ADNL-Overlay für die Kommunikation mit anderen Validatoren. Dann beginnt der Empfänger mit dem Lesen von Blöcken aus einer RocksDB-Datenbank (siehe ReceiverImpl::read_db_fromund ReceiverImpl::read_block_from_dbfür die Details). Oben befindet sich immer ein Block mit Hash=0, der als Startblock für das Herunterladen von Blockvorgängern und Abhängigkeiten verwendet wird. Nach dem Lesen der Datenbank werden die Hauptverarbeitungsschleifen gestartet, die aus der Vorverarbeitung jedes einzelnen Blocks ( CatchainProcessor::send_preprocess) und der Verarbeitung von Blöcken (CatchainProcessor::send_process). Vorverarbeitung bedeutet das Wiederherstellen eines Konsenszustands für jeden Block basierend auf Inkrementen, die er enthält. Verarbeitung bedeutet das Zusammenführen mehrerer Konsensuszustände (aus Gründen der Netzwerkleistung) und das Erstellen eines neuen Konsensblocks basierend darauf zum Senden an andere Validatoren. Der Konsensalgorithmus initiiert die Generierung neuer Blockkandidaten zur weiteren Genehmigung. Wenn ein neuer Kandidat auftaucht, wird der Block an die Catchain gesendet. Wenn keine Blöcke vorhanden sind, wartet ein Validator auf Blöcke von anderen Validatoren in der Catchain.

Комментарии