Kursinhalt
Einführung in die Blockchain
Einführung in die Blockchain
Mehr Über den Blockheader
Bevor wir uns mit dem Blockheader im Detail befassen können, sollten wir zunächst den Unterschied zwischen Big Endian und Little Endian Formaten verstehen.
Little Endian und Big Endian
Zuerst müssen wir verstehen, was Endianness eigentlich bedeutet.
Big Endian-Format speichert das höchstwertige Byte zuerst, was mit der Art und Weise übereinstimmt, wie Menschen typischerweise Zahlen lesen. Lassen Sie uns die Dezimalzahl 234567890
als Beispiel verwenden und sie mit Python in Hexadezimal und Binär umwandeln und die Ergebnisse ausgeben:
decimal_number = 234567890 print(hex(decimal_number)) print(bin(decimal_number))
Da Computer ganze Zahlen mit einer ganzen Anzahl von Bytes speichern und jeweils 2 Hex-Ziffern einem Byte entsprechen, benötigen wir eine gerade Anzahl von Ziffern. Die Hex-Darstellung unserer Zahl, 0xDFB38D2
, enthält 7 Ziffern, daher müssen wir eine Null 0
nach links hinzufügen. Die resultierende Zahl, 0x0DFB38D2
, hat nun 8 Hex-Ziffern (passt genau in 4 Bytes) und denselben Wert.
Ähnlich hat unsere Binärzahl 28 Bits, und alle 8 Bits entsprechen 1 Byte, daher müssen wir die Anzahl der Bits durch 8 teilbar machen, indem wir 4 Nullen 0
nach links hinzufügen. Die resultierende Zahl, 0b00001101111110110011100011010010
, hat nun 32 Bits (passt genau in 4 Bytes) und denselben Wert.
Mit Python erhielten wir das Big Endian-Format, das wir auch erhalten würden, wenn wir manuell umwandeln würden, und unsere Zahl sieht wie folgt aus:
0x0DFB38D2
in Hex;0b00001101111110110011100011010010
in Binär.
Werfen wir einen Blick auf die folgende Tabelle, um das Big Endian-Format zu verstehen:
Umgekehrt speichert das Little Endian-Format das am wenigsten signifikante Byte zuerst und kehrt die intuitive Reihenfolge um:
Wie Sie sehen können, sieht unsere Zahl im Little-Endian-Format wie folgt aus:
-
0xD238FB0D
in hexadezimal; -
0b11010010001110001111101100001101
in binär.
Zurück zum Blockheader
Zur Wiederholung: Der Header ist genau 80 Bytes groß und enthält sechs Datenfelder, die jeweils im Little-Endian-Format vorliegen. Werfen wir nun einen Blick auf den Header von Block 645536:
Da der Blockheader genau 80 Bytes einnimmt, gibt es genau 160 Hexadezimalstellen (jedes Byte entspricht 2 Hexadezimalstellen). Das Version-Feld zum Beispiel nimmt 4 Bytes ein, also gibt es 8 Hexadezimalstellen.
Hier sind die detaillierten Informationen über diesen Block im Explorer:
Die Felder hier werden im Big-Endian-Format angezeigt. Lassen Sie uns das Bits-Feld zum Beispiel untersuchen und es mit seiner Darstellung im Blockheader vergleichen. Seine hexadezimale Darstellung ist 0x171007ea
im Big-Endian-Format:
Wenn wir es in das Little-Endian-Format umwandeln, sieht es wie folgt aus:
Wie Sie sehen können, ist das genau das, was wir im Blockheader hatten.
Danke für Ihr Feedback!