Liste verwaister (nicht referenzierter) Blöcke

Verwaister Block ist ein Block, der in der längsten Blockkette keinen bekannten Elternteil hat.

Soweit ich weiß, bedeutet dies, dass der verwaiste Block in keinem der neuesten Blöcke einen Verweis als "vorheriger Block-Hash" hat. Das ist richtig?

Wenn ja, recherchiere ich etwas und verstehe nicht, warum ich einige seltsame Ergebnisse bekomme.

Also extrahiere ich alle Block-Hashes aus Raw-DAT-Dateien. Dann extrahiere ich alle „vorherigen Block-Hash“-Daten aus rohen Dat-Dateien. Als Ergebnis habe ich 2 Arrays: Block-Hashes (Array A) und übergeordnete Referenzen (Array B). Wenn ich dann B von A subtrahiere, würde ich eine Liste verwaister Blöcke erhalten.

Ist es der richtige Weg, eine verwaiste Sperrliste zu erhalten, oder nicht?

PS Ich erhalte diese Ergebnisse nach dem Analysieren von dat-Dateien von blk00000.datbis blk00953.dat(ich habe zwei Blöcke aus der zusammengestellten Liste ausgewählt):

000000000000000003D57B69D1AC77F64287C893C16ADBC1816C6D7386CCC3C0 – orphaned 0000000000000000011523D7477DD274B7E0DCC2C616B2E2F584FFDEC20237D3 - main chain

main chainund orphanedsind der Status basierend auf Block-Explorer-Sites.

Auf diesen beiden Blöcken gibt es keinen Verweis als "vorherige" in Rohdatendateien. Ich bin verwirrt – "warum?"

Der Begriff „verwaister Block“ wurde üblicherweise für mindestens zwei sehr unterschiedliche Dinge verwendet: siehe bitcoin.stackexchange.com/a/5869/208 . Es scheint, dass Sie sich hier auf die zweite Bedeutung beziehen, die nicht mehr relevant ist. Seit der Einführung der Header-First-Synchronisation gibt es solche Waisenkinder nicht mehr.
@PieterWuille danke für die Hilfe) Aber der erste Block aus meinem Beispiel wurde am 29.11.2016 (nach der Veröffentlichung von Bitcoin Core v0.10) abgebaut und dieser Block befindet sich in der dat-Datei auf der Festplatte \blocks dir
Block-Explorer-Websites verwenden den Begriff „verwaist“ im Sinne von „nicht mehr in der Hauptkette“, nicht „kein bekannter Elternteil“.
Hier geht es um die Blöcke, die keine Verweise darauf haben. Ich habe sie.

Antworten (1)

Als Ergebnis habe ich 2 Arrays: Block-Hashes (Array A) und übergeordnete Referenzen (Array B). Wenn ich dann B von A subtrahiere, würde ich eine Liste verwaister Blöcke erhalten.

Nein, wenn Sie das tun, erhalten Sie eine Liste veralteter Blöcke (die allgemein als verwaiste Blöcke bezeichnet werden). Was Sie tun, ist, alle Blöcke zu erhalten, die nichts Eltern sind, nicht Blöcke, die keine Eltern haben.

000000000000000003D57B69D1AC77F64287C893C16ADBC1816C6D7386CCC3C0 – orphaned 

Der Begriff "verwaist" bedeutet hier, dass der Block keine Kinder hat. Dies ist die zweite Bedeutung des Begriffs „verwaister Block“. Dieses Ergebnis wird erwartet, da Sie aus Ihrer Liste der Block-Hashes die Liste der übergeordneten Blöcke entfernen und dieser Block kein übergeordneter Block ist.

0000000000000000011523D7477DD274B7E0DCC2C616B2E2F584FFDEC20237D3 - main chain

Dieser Block befindet sich in der Hauptkette. Es ist wahrscheinlich in Ihrer Liste, weil Ihr Knoten darauf synchronisiert wurde und dies der letzte Block war.

Ich glaube, mein Englisch ist nicht so gut. Ich meine, dass jeder Block einen Verweis auf den vorherigen hat, aber zum Beispiel in blk00234.dat einen vorhandenen Block hat, der in der gesamten Datenbank keinen Verweis darauf hat. Dieser Block ruft verwaist. Ist es wahr?
Blöcke können nicht in der richtigen Reihenfolge zu Ihrem Knoten kommen, daher ist es möglich, einen Block ohne Eltern in Ihrem lokalen Speicher zu haben
Ja, ein Block, der keine Kinder hat, wird allgemein als verwaist bezeichnet. Aber das ist nicht die Definition von verwaist, die Sie verwenden.
(...aber zum Beispiel in blk00234.dat...) die Hauptkette ist auf allen Knoten gleich, aber blk-Dateien sind nicht Byte für Byte gleich. Ihre Version hat einen verwaisten Block in Datei #234, meine hat keinen
@amaclin Sie sagen also, dass eine vollständige Bitcoin-Datenbank ( \blocks\blk*.datDateien) nicht für alle gleich ist, die einen Bitcoin-Client installieren?
Ja. Meine Datei unterscheidet sich von Ihrer. und meine Kopie hat nicht 000000000000000003D57B69D1AC77F64287C893C16ADBC1816C6D7386CCC3C0
Aber ich denke, dass das Hauptprinzip der Blockchain darin besteht, auf jedem Knoten dieselbe Datenbank zu führen.
@Denis Das Ziel ist, dass alle die gleiche Blockchain haben. Die Blockchain selbst ist jedoch keine Datenbank, und nicht jeder wird genau dieselben Blöcke in genau derselben Reihenfolge haben. Aber die Node-Software wird in der Lage sein, die Blockchain-Daten zu parsen und herauszufinden, welche Blöcke zu verwenden sind, sodass alle Nodes letztendlich dieselbe Blockchain verwenden. Knoten können unterschiedliche Blockchain-Daten haben, aber die überwiegende Mehrheit davon wird gleich sein. Die einzigen Unterschiede bestehen zu verwaisten Blöcken, da neue Knoten nichts davon wissen und sich diese verwaisten Blöcke möglicherweise langsam ausbreiten.
@AndrewChow meinst du, dass die lokale Datenbank nicht für alle Knoten gleich ist?
Ja, die Datenbanken sind nicht für alle Knoten gleich.
@AndrewChow, bitte fühlen Sie das Grundprinzip von p2p tech) Die Datenbank ist für jeden Knoten gleich. Das ist wahr. Speziell für Bitcoin-Ketten. Also -1.
@Denis, nein, das ist völlig falsch. Bitte verstehen Sie, wie das P2P-Protokoll funktioniert, bevor Sie solche Schlussfolgerungen ziehen. Das gesamte System ist asynchron, was bedeutet, dass Peers zu unterschiedlichen Zeiten Blöcke empfangen und Blöcke zu unterschiedlichen Zeiten validieren. Beim Block-Relay gibt es eine Latenz, und das führt dazu, dass die Knoten nicht einverstanden sind.
Beispielsweise können zwei Miner (Miner A und Miner B) ungefähr zur gleichen Zeit einen Block auf derselben Höhe finden. Wenn der Block gesendet wird, empfangen Peers einen Block, bevor sie den anderen empfangen. Dies bedeutet, dass einige Peers zuerst den Block von A und dann den Block von B haben werden. Ihre Datenbanken widersprechen sich nun. Wenn ein anderer Miner einen Block über dem Block von A schürft und es zu diesem Zeitpunkt kein Rennen gibt, wird der Block von A Teil der Hauptkette und der Block von B verwaist.
Angenommen, C beschließt, einen neuen vollständigen Knoten einzurichten. Er wird nur Blöcke in der Hauptkette herunterladen, also wird seine Datenbank nur den Block von A enthalten, nicht den von B, da der Block von B verwaist und nicht mehr relevant ist. C verwendet immer noch dieselbe Blockchain wie alle anderen, aber seine Datenbank wird sich von der anderer Leute unterscheiden.
Aber Dateien blk*.datin blocksdir sind für alle, die mit Bitcoin verbunden sind, gleich?
Nein sind sie nicht. Blöcke werden nicht der Reihe nach heruntergeladen und auf der Festplatte gespeichert, sodass die Blockdateien wahrscheinlich nur aufgrund der Reihenfolge unterschiedlich sind. Außerdem haben Sie, wie in meinem obigen Beispiel, wenn Sie einen neuen Knoten haben, keinen verwaisten Block heruntergeladen und auf der Festplatte gespeichert, aber andere Knoten, die zum Zeitpunkt des Abbaus des Blocks online waren, haben den verwaisten Block heruntergeladen und gespeichert . Dadurch unterscheiden sich Ihre Blockdateien von anderen Knoten.
Die @AndrewChow-Datenbank ist für jeden Knoten Byte für Byte gleich.
@Denis nein sind sie nicht. Warum bestehen Sie darauf, dass sie es sind? Ich betreue mehrere Knoten und kann nachweisen, dass sie unterschiedliche Blockdateien und Datenbanken haben. Wenn Sie einen Knoten haben, kann ich nachweisen, dass meine Knoten andere Blockdateien und Datenbanken haben als Ihre.
@AndrewChow Wenn dem so ist, dann bricht das Hauptprinzip der Blockchain zusammen.