Bitcoin ABC, wenn die Fed-Bitcoin-Core-Chain mit dem 1. August um 6:23 Uhr 2017 synchronisiert wird, dann friert sie ein

Ich habe Bitcoin ABC installiert, bitcoin.conf so eingestellt, dass es auf eine Kopie meines Verzeichnisses von Bitcoin Core zeigt, und es mit dem Netzwerk synchronisieren lassen. Alles war gut, bis es an der Gabelung einfror (1. August 2017, 6:23 Uhr). Der Client reagiert, aber mein Fortschritt rührt sich nicht und die "Geschätzte verbleibende Zeit bis zur Synchronisierung" bleibt bei "Berechnung ...". Zuerst dachte ich, ich hätte eine Art Netzwerkfehler, aber das scheint nicht der Fall zu sein Fall. Ich habe 8 aktive Verbindungen. Warum wird es nicht über diesen Punkt hinausgehen und die Post-Fork-Transaktionen herunterladen?

Bitcoin ABC, v0.16.2.0-unk auf Ubuntu 17.10 (Mate).

Was meinst du mit "meine Kette von Bitcoin Core füttern"? Haben Sie den Blöcke-Ordner von Bitcoin Core kopiert? Oder haben Sie das gesamte Datenverzeichnis kopiert? Oder verbinden Sie es nur mit einer Bitcoin Core-Instanz? In jedem Fall ist diese Zeit die Zeit der Gabelung, sodass Bitcoin-Blöcke für Bitcoin ABC nicht mehr gültig sind und vom Bitcoin Cash-Netzwerk synchronisiert werden müssen.
Ich habe das gesamte Verzeichnis kopiert, außer dass ich ihm eine leere Brieftasche gegeben habe, die ich dann nur mit einer Bitcoin ABC-Instanz verbunden habe, die auf einem anderen Computer ausgeführt wird. Meine Frage ist, warum es nach dem Fork nicht weitergeht und das Bitcoin Cash-Netzwerk synchronisiert.

Antworten (1)

Sie haben auch den gesamten Kettenstatus kopiert, was den Knoten verwirrt und dazu führt, dass er die Synchronisierung nicht fortsetzen kann, da der Kettenstatus besagt, dass die Bitcoin Cash-Kette ungültig ist und die Knotendinge, die die Kette derzeit verwendet, ebenfalls ungültig sind. Sie können dies beheben, indem Sie den Kettenstatus entfernen. In diesem Fall beginnt die Neuindizierung.

Dies behebt jedoch möglicherweise nicht alle Ihre Probleme, da sich die Bitcoin-Kette immer noch auf der Festplatte befindet und dies weiterhin indiziert und überprüft wird. Daher müssen Sie möglicherweise einige der blk*.dat- und rev*.dat-Dateien (die höher nummerierten) löschen, damit sie in einen Zustand vor dem Fork zurückkehren, und dann Bitcoin Cash ab diesem Zeitpunkt synchronisieren.


Details sind, dass wir das .bitcoinVerzeichnis kopieren, aber das .bitcoin/chainstateVerzeichnis entfernen. Wenn Sie den Client jetzt ausführen, friert er wieder ein, wenn er zu den blk*.datDateien gelangt, die sich hinter dem Fork befinden. Indem Sie es ausführen, während es auch läuft:

watch -n 1 'sudo lsof -c bitcoin | egrep -o "bitcoin/blocks/(blk|rev).*dat" | uniq | sed -E "s/^.+$/& `date`/" | tee -a recent.blk'

Und

watch tail recent.blk,

Ich konnte feststellen, dass die zu löschenden Dateien .bitcoin/blocks/{blk,rev}00953.datund höher sind. Das heißt, halten Sie 00000 bis 00952. Als ich dann den Client erneut ausführte, funktionierte es. Nach dem Fork wurde es mit dem Netzwerk synchronisiert. Sie können sich die zweimalige Ausführung ersparen, indem Sie einfach sowohl das chainstate/-Verzeichnis als auch die relevanten Dateien in blocks/ löschen. Wenn Sie den Client ausführen, wird er sagen: "Fehler beim Laden der Blockdatenbank, möchten Sie jetzt neu erstellen?" Antworten Sie mit „Ja“, und dann heißt es „Reindexing the blocks on disk“, gefolgt von „Syncing the Headers (478436)“. Diese letzte Zahl ist die Anzahl der Blöcke in blk00000.datbis blk00952.datund geht der Abzweigung bei 478558 voraus.

Mein erster Schritt ist also, das Verzeichnis "chainstate" zu entfernen, richtig? Wie kann ich dann, wenn es sein muss, sagen, wie viele blk/rev-Dateien am Ende entfernt werden sollen? Der ganze Sinn dieser Übung bestand darin, das erneute Herunterladen der gesamten Blockchain zu vermeiden.
Ich habe "chainstate" entfernt und es synchronisiert die Header erneut, von Anfang an. Es wird einige Zeit dauern.
Ja, entfernen Sie zuerst das Chainstate-Verzeichnis. Sehen Sie sich für die blk*.dat- und rev*.dat-Dateien die Größen der blk*.dat-Dateien mit der höchsten Nummer an. Teilen Sie diese Größe durch 1 MB. Das sagt Ihnen zumindest, wie viele Blöcke in dieser Datei sind. Löschen Sie dann Dateien, beginnend mit der höchsten Nummer, bis Sie die Anzahl der Blöcke seit dem Fork-Punkt überschritten haben. Löschen Sie die gleiche Anzahl rev*.dat-Dateien.
OK danke. Es gibt ein Verzeichnis namens "index" im Verzeichnis "blocks". Muss ich damit etwas anfangen?
Nein. Wenn Sie die Dateien löschen, müssen Sie neu indizieren, und dieser Ordner wird gelöscht und neu geschrieben
Wenn ich nach dem Entfernen des Chainstate-Verzeichnisses neu synchronisiere, laufe ich watch -n 20 'sudo lsof | egrep -o "bitcoin/blocks/(blk|rev).*dat" | uniq | tee -a recent.blk'. Auf diese Weise erhalte ich eine Liste der geöffneten Block- und Rev-Dateien, die in aufgeführt sind recent.blk, und ich kann sehen, welche zuletzt geöffnet war. Wenn dies erledigt ist, und wenn es sein muss, werde ich von da an einfach löschen.
Zusätzlich zum Chainstate-Verzeichnis musste ich die blocks/{blk,dev}*.dat-Dateien ab #00953 entfernen (also bis #00952 weitermachen). Nach der Neuindizierung werden die Header jetzt zum dritten Mal synchronisiert, und dies scheint das langsamste der drei zu sein. Es wird Tage dauern. Und ich gehe davon aus, dass es dieses Mal über die Gabelung hinausgehen wird. Ich denke wirklich, ich hätte die gesamte Blockchain von Anfang an noch einmal DLen sollen.