Mir ist aufgefallen, dass bitcoind
unverifizierte 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 .dat
und.ldb
gespeicherten Daten in .bitcoin/blocks/
und .bitcoin/blocks/index
trotzdem 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 -reindex
die gesamte Blockchain zu beschädigen? Würde -reindex
sie sogar entfernen?
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.dat
Datei 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
.
Klaris