Jump to content

Empfohlene Beiträge

Hallo zusammen,
 

I möchte selbstständig den Block-Header von diesem Block hier mithilfe eines Python-Scirpts berechnen:

https://blockchain.info/rawblock/00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd
 

hash: 00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd
ver: 3
prev_block: 0000000000000000051f5de334085b92ce27c03888c726c9b2bb78069e55aeb6
mrkl_root: f4db18d3ecab87eeb23a56490d5b0b514848d510d409b43f6bbf2b82f55da8db
time: 1442663985
bits: 403867578
nonce: 3548193207

Meine Konvertierung sieht wie folgt aus:
 

ver --> HextoBinary --> 3 --> 11 --> 00000011
prev_block --> No conversion necessary (Hex)
mrkl_root --> No conversion necessary (Hex)
time --> toHex --> 1442663985 --> 55fd4e31 (Hex)
bits --> toHex --> 403867578 --> 181287ba
nonce --> toHex --> 3548193207 --> d37d21b7

Python-Script:

import hashlib
header_hex = ("000000110000000000000000051f5de334085b92ce27c03888c726c9b2bb78069e55aeb6f4db18d3ecab87eeb23a56490d5b0b514848d510d409b43f6bbf2b82f55da8db55fd4e31181287bad37d21b7")
header_bin = header_hex.decode('hex')
hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
hash.encode('hex_codec')
print hash[::-1].encode('hex_codec')
 

Leider sieht das Ergebnis davon so aus:

7012fc1c69b4b5d0c0df1b732c5ea58752e96bd8f53f7c09d2f5b57bcc0186d1

aber es sollte so aussehen:

00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd

Mache ich eventuell etwas falsch bei der Konvertierung von "version" und "prev_block"?

Am Python-Script liegt es meiner Meinung nach nicht... (ist aus dem Bitcoin-Wiki)
Vielen Dank für eure Hilfe smiley.gif

Lg,
Rambo123

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
hash: 00000000000000000be983a81043933c38008010b849fd6a35d5dd2d57f929bd
ver: 3
prev_block: 0000000000000000051f5de334085b92ce27c03888c726c9b2bb78069e55aeb6
mrkl_root: f4db18d3ecab87eeb23a56490d5b0b514848d510d409b43f6bbf2b82f55da8db
time: 1442663985
bits: 403867578
nonce: 3548193207

Meine Konvertierung sieht wie folgt aus:

 

ver --> HextoBinary --> 3 --> 11 --> 00000011
prev_block --> No conversion necessary (Hex)
mrkl_root --> No conversion necessary (Hex)
time --> toHex --> 1442663985 --> 55fd4e31 (Hex)
bits --> toHex --> 403867578 --> 181287ba
nonce --> toHex --> 3548193207 --> d37d21b7

Mache ich eventuell etwas falsch bei der Konvertierung von "version" und "prev_block"?

 

 

Ja, version muss nach hex, nicht nach binär kodiert werden. 3 als 32-bit hex-Zahl ist 00000003, bzw. 03000000 in Little-Endian.

 

Auch der Prev-Hash ist in Little-Endian angegeben, d.h. der hash ist eigentlich

 

  b6ae.............1f050000000000000000

 

time bits und nonce müssen auch nach little-endian, bei Merkle-Tree-Hash bin ich mir nicht sicher, ob der schon umgedreht ist oder nicht.

 

Diese Little-Endian-Konvention ist schon sehr merkwürdig, aber leider der Standard in Bitcoin.  Das führt dazu, dass man die Hex-Zahlen umdrehen muss (wobei immer zwei Hex-Zahlen zusammenbleiben), wenn man Transaktions-IDs oder Block-IDs ausgibt oder einliest.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


×
×
  • Neu erstellen...

Wichtige Information

Wir speichern Cookies auf Ihrem Gerät, um diese Seite besser zu machen. Sie können Ihre Cookie-Einstellungen anpassen, ansonsten gehen wir davon aus, dass Sie damit einverstanden sind. In unseren Datenschutzerklärungen finden sie weitere Informationen.