sha256 биткойн-блока - PullRequest
       88

sha256 биткойн-блока

0 голосов
/ 21 февраля 2019

Как проверить хэш блока биткойнов # 123456 .

from hashlib import sha256
header = "010000009500c43a25c624520b5100adf82cb9f9da72fd2447a496bc600b0000000000006cd862370395dedf1da2841ccda0fc489e3039de5f1ccddef0e834991a65600ea6c8cb4db3936a1ae3143991";
print sha256(sha256(header).digest()).digest().encode('hex') 

Вывод:

d59eced1ded07f84c145592f65bdf854358e009c5cd705f5215bf18697fed103

, но фактический хеш:

0000000000002917ed80650c6174aac8dfc46f5fe36480aaef682ff6cd83c3ca

Что здесь не так?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Когда я запускаю ваш код, я получаю:

f8ac6baf0ac904d520de5287055bfd0f61775d0fc0699ffacff9f0d7271a021b не d59eced1ded07f84c145592f65bdf854358e009c5cd705f5215bf18697fed103

Но вам нужно хешировать его как байты, а не как строки (это будет закодировано в ascii)если вы используете строку):

Python 2

from hashlib import sha256
header = '\x01\x00\x00\x00\x95\x00\xc4\x3a\x25\xc6\x24\x52\x0b\x51\x00\xad\xf8\x2c\xb9\xf9\xda\x72\xfd\x24\x47\xa4\x96\xbc\x60\x0b\x00\x00\x00\x00\x00\x00\x6c\xd8\x62\x37\x03\x95\xde\xdf\x1d\xa2\x84\x1c\xcd\xa0\xfc\x48\x9e\x30\x39\xde\x5f\x1c\xcd\xde\xf0\xe8\x34\x99\x1a\x65\x60\x0e\xa6\xc8\xcb\x4d\xb3\x93\x6a\x1a\xe3\x14\x39\x91'
print sha256(sha256(header).digest()).digest().encode('hex')
cac383cdf62f68efaa8064e35f6fc4dfc8aa74610c6580ed1729000000000000

Затем необходимо обратить обратный порядок байтов к старшему.

Python 3

from hashlib import sha256
header = bytes.fromhex('010000009500c43a25c624520b5100adf82cb9f9da72fd2447a496bc600b0000000000006cd862370395dedf1da2841ccda0fc489e3039de5f1ccddef0e834991a65600ea6c8cb4db3936a1ae3143991')
print(sha256(sha256(header).digest()).digest().hex())
cac383cdf62f68efaa8064e35f6fc4dfc8aa74610c6580ed1729000000000000

0 голосов
/ 21 февраля 2019

Этот код Python будет вычислять хеш блока с наименьшим хешем по состоянию на июнь 2011 года, Блок # 125552 .Заголовок состоит из шести полей, объединенных в виде значений с прямым порядком байтов в шестнадцатеричной записи enter image description here

>>> import hashlib
>>> header_hex = ("01000000" +
 "81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000" +
 "e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b" +
 "c7f5d74d" +
 "f2b9441a" +
 "42a14695")
>>> header_bin = header_hex.decode('hex')
>>> hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
>>> hash.encode('hex_codec')
'1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000'
>>> hash[::-1].encode('hex_codec')
'00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d'
...