Bitcoin Core LevelDB Index speichert gegabelte Blöcke

Mir ist aufgefallen, dass bitcoindunverifizierte Blöcke, die es erhält, dauerhaft gespeichert werden, selbst wenn sie sich als kleine Blockchain-Forks herausstellen, die wahrscheinlich durch die relativ gleichzeitige Entdeckung von zwei Blöcken gleicher Höhe entstehen. Dies stellt kein Problem für die Funktionalität von Bitcoin Core dar, da sicherlich ein Prozess in die Quelle geschrieben ist, der solche kleinen Gabeln ignoriert, aber es ist merkwürdig für mich, dass die Daten in den in den Dateien .datund.ldb gespeicherten Daten in .bitcoin/blocks/und .bitcoin/blocks/indextrotzdem bestehen bleiben. Gibt es eine Möglichkeit, diese ungültigen Blöcke, die zu kleinen Forks in der Blockchain gehören, zu löschen, ohne -reindexdie gesamte Blockchain zu beschädigen? Würde -reindexsie sogar entfernen?

Das hat einen vernachlässigbaren Einfluss. Weniger als 1 % der Blöcke sind veraltet.

Antworten (2)

Sie werden aufbewahrt, weil es kompliziert ist, sie zu entfernen (es würde ein Umschreiben der Blockspeicherdateien erfordern), und es gibt kaum Kosten für ihre Aufbewahrung (sie machen nur einen kleinen Bruchteil der Gesamtmenge aus). Außerdem möchten wir in der Nähe der Spitze Gabeln zur Verfügung haben, um schnell umorganisieren zu können, wenn eine davon zur Hauptkette wird.

Technisch gesehen ist das Verzeichnis $DATADIR/blocks für Bitcoin Core keine Darstellung der Blockchain. Es ist ein Speicher aller gültigen Blöcke, die wir jemals heruntergeladen haben. Welche von ihnen am Ende als Hauptkette angesehen werden, ist ein anderes Thema und wird unabhängig behandelt.

Beachten Sie auch, dass im Beschneidungsmodus alle alten Blöcke entfernt werden - einschließlich dieser kleinen Gabeln.

Ich kann mir keinen bequemen Weg vorstellen, dies zu tun.

Die einzige Methode, die mir in den Sinn kommt, ist, selbst eine bootstrap.datDatei von Ihrem eigenen aktuellen Knoten zu erstellen, dann Bitcoin Core zu beenden und alle relevanten db-Dateien manuell zu löschen, bevor Sie aus der bootstrap.dat.

Werden diese kleinen Gabeln "Waisenkinder" genannt? Wie kommt es, dass sie nur erscheinen, wenn Sie tatsächlich einen Knoten ausgeführt haben? Liegt es daran, dass Knoten verwaiste Blöcke nicht erneut übertragen, sondern auf unbestimmte Zeit speichern?