Насколько я понимаю, вам просто нужно использовать функцию SHA256 для хеширования заголовка блока (хэш блока и корень merkle), а затем добавить одноразовый номер в конце, как объясняется в этой статье .
Однако мне не удается получить правильный хэш следующего блока. Используя блок #505400 :
Hash : 00000000000000000023b89dd18f6be5a6c03a71cd864ccbdf024683114b9ce3
Merkle root : a3defcaa713d267eacab786c4cc9c0df895d8ac02066df6c84c7aec437ae17ae
Nonce : 2816816696
Next block hash : 0000000000000000007625ff74171cf53e301c3e5013bf2184e2629a2da0fc8d
Что я ожидаю: sha256 (Hash + Merkle Root + Nonce) = Хеш следующего блока
Однако я получаю это:10345cb85ffed406a47e1faf31eb8ba1160aac0fbaae3cae0cd66889f9c9f49e
Что я сделал не так?
Это не способ создания заголовка блока. Заголовок блока строится как
После сериализации в байтах заголовок дважды хэшируется с помощью SHA256, а не один раз.
Распространенной ошибкой является хеширование строки шестнадцатеричного представления байтов, вы должны хэшировать сами байты .
См. здесь для получения дополнительной информации: https://en.bitcoin.it/wiki/Block_hashing_algorithm
Хэш — это хэш этого блока . Он не дает хэш следующего за ним блока, нет способа узнать, каким будет хеш следующего блока, а возможных хэшей может быть много.