Bitcoin4 Geschrieben 20. September 2015 Teilen Geschrieben 20. September 2015 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 Lg,Rambo123 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
joho Geschrieben 1. Oktober 2015 Teilen Geschrieben 1. Oktober 2015 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. 1 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden