Ich versuche, einen Parser für blk*.dat-Dateien von Grund auf neu zu schreiben. Im Moment kann ich Blöcke lesen, die Header-Felder extrahieren und den korrekten Block-Hash basierend auf den Header-Feldern berechnen.
Ich habe gerade versucht, den Parser durch alle blk-Dateien laufen zu lassen, und es ist fehlgeschlagen, nachdem ich die ersten ~ 300 blk-Dateien erfolgreich gelesen hatte. Als ich die fehlerhafte Datei mit einem Hex-Editor untersuchte, fand ich zwei "Magic-Byte-Felder", die nur durch 4 andere Bytes getrennt waren.
Da der obligatorische Block-Header 80 Bytes lang sein soll, bin ich jetzt ziemlich verwirrt.
Ich habe drei wahrscheinlich verwandte Fragen gefunden:
Meine Vermutung, basierend auf diesen anderen Fragen, ist die folgende:
Welche meiner Annahmen sind richtig? .. Welche nicht sind? Übersehe ich etwas?
Ich werde meine eigene Frage beantworten. Dies sind meine Schlussfolgerungen basierend auf den Kommentaren von Nade Eldrege und namensgebend.
Ja, das ist ein unvollständiger Block. Genauer gesagt ist es nicht Teil des blk-Dateiformats.
Ja, es gibt Hinweise darauf, dass dies passiert, wenn die Bitcoin beim Schreiben auf die Festplatte unterbrochen / getötet wird. Wenn es neu gestartet wird, fährt es einfach fort, neue Blöcke herunterzuladen und in die blk-Datei zu schreiben. Unvollständige Blöcke werden nicht bereinigt.
Ja und nein. Ja, denn das Löschen und erneute Herunterladen der blk-Dateien ohne Unterbrechungen löst das Problem. Beim Schreiben eines blk-Parsers sollte dieser jedoch in der Lage sein, mit diesen unvollständigen Blöcken umzugehen. Zum Beispiel durch Springen zum nächsten gültigen Block.
Ja. Siehe Nr. 3
Ich bin mir nicht sicher, aber da der Bitcoin einfach mit dem Herunterladen von Blöcken fortfährt und ohne Probleme funktioniert, kann man davon ausgehen, dass der unvollständige Block danach einfach erneut heruntergeladen wird.
Es scheint so. Siehe Nr. 5
Klaris
Nate Eldredge
forgemo
Klaris
forgemo
Nate Eldredge
Nate Eldredge
forgemo
Nate Eldredge
forgemo