Wie kommt man zu der Nonce in einem Blockheader?

Mein Verständnis ist, dass die Nonce im Header eines Ethereum-Blocks eine ganze Zahl innerhalb eines bestimmten Bereichs (größer als 0) ist.

Wenn ich mir die Blöcke jedoch über einen Online-Block-Explorer wie Etherscan ansehe, sehe ich die Nonce mit Werten wie 0x885ddbbf0826351997 .

Tatsächlich kann ich, wenn ich mir die Blöcke des letzten Jahres ansehe, keinen finden, der nicht mit 0x88 beginnt.

Das Ethereum Yellow Paper legt fest, dass die Nonce ein 64-Bit-Hash istGeben Sie hier die Bildbeschreibung ein

Mit einer Hash-Funktion ist es jedoch unwahrscheinlich, dass so viele Werte beginnend mit 0x88 angezeigt werden.

Kann mir jemand sagen, wie die Nonce, die verwendet wird, um einen gültigen Hash für einen Block in Ethereum zu finden, zu der Nonce führt, die im Block-Header angezeigt wird?

Obwohl ich Ihre Frage nicht vollständig beantworten kann, beobachte ich, dass die von Etherscan gemeldete Block-Header-Nonce (wie in Ihrem Beispiel) 72 Bit beträgt - es sieht so aus, als ob 0x88 gerade dem 64-Bit-Hash vorangestellt wurde. Ob es echt ist oder ein "Präsentationsproblem", kann ich nicht sagen.

Antworten (2)

Meine Firma betreibt einen Blockchain-Explorer .

Hier sind die Informationen, die wir für diesen verknüpften Block haben.

Ich habe die Rohdaten durchgesehen und keine der Nonces beginnt tatsächlich mit 0x88 (wie von einem JSON-RPC-Aufruf an einen Paritätsknoten (1.6.8) zurückgegeben).

Es sieht so aus, als würde Etherscan dies hinzufügen. Ich bin mir nicht sicher warum. Es hat vielleicht etwas damit zu tun, wie Etherscan ihren Knoten instrumentiert hat, oder sie haben es einfach in ihre Ausgabe eingefügt.

Seltsam. etherchain.org und etherscan.io zeigen es beide mit dem 0x88Präfix an, und einige andere Explorer, die ich ausprobiert habe, tun dies nicht (wie Ihrer). Es gibt nichts im Paritätscode, das ihn beim Bedienen von RPC-Anforderungen abzustreifen scheint, aber der Geth-Code kommt häufig vor, insbesondere in Testfällen, in denen die Nonce nur als angegeben wird 0x88. Immer noch keine Ahnung :-)
Infura kehrt auch "nonce":"0x5ddbbf0826351997"für Block 4168977 zurück.
Ja, und zur Bestätigung habe ich es mit Geth 1.6.7 versucht und die gleichen Daten erhalten (0x5ddbbf0826351997). Ich bin völlig verwirrt. Richard, haben Sie Links zu diesen Testfällen?

Eine spekulative Antwort, die ich ursprünglich als Kommentar hinzugefügt hatte. Gerne korrigiert.


0x88 == 136, das ist die Größe eines sha3-"Blocks" in Bytes (während es für einen sha256-"Block" 64 Bytes == 0x40 wären).

„0x88“ scheint über den gesamten Code verstreut zu sein, daher ist es wahrscheinlich, dass es sich um ein clientseitiges Präfix handelt und nicht um etwas, das von Chain-Explorern hinzugefügt wurde.

Also ... dies ist wahrscheinlich nur ein Weg, um anzuzeigen, dass die Nonce mit sha3 und nicht mit einem anderen Hash-Algorithmus gehasht wurde ... (für Abwärtskompatibilitätsprüfungen usw.)