Как проверить блок вручную?

Насколько я понимаю, вам просто нужно использовать функцию SHA256 для хеширования заголовка блока (хэш блока и корень merkle), а затем добавить одноразовый номер в конце, как объясняется в этой статье .

Однако мне не удается получить правильный хэш следующего блока. Используя блок #505400 :

Hash : 00000000000000000023b89dd18f6be5a6c03a71cd864ccbdf024683114b9ce3

Merkle root : a3defcaa713d267eacab786c4cc9c0df895d8ac02066df6c84c7aec437ae17ae

Nonce : 2816816696

Next block hash : 0000000000000000007625ff74171cf53e301c3e5013bf2184e2629a2da0fc8d

Что я ожидаю: sha256 (Hash + Merkle Root + Nonce) = Хеш следующего блока

Однако я получаю это:10345cb85ffed406a47e1faf31eb8ba1160aac0fbaae3cae0cd66889f9c9f49e

Что я сделал не так?

Ответы (1)

Это не способ создания заголовка блока. Заголовок блока строится как

  1. версия
  2. хэш предыдущего блока
  3. корень Меркла
  4. временная метка
  5. поле nBits
  6. и одноразовый номер.

После сериализации в байтах заголовок дважды хэшируется с помощью SHA256, а не один раз.

Распространенной ошибкой является хеширование строки шестнадцатеричного представления байтов, вы должны хэшировать сами байты .

См. здесь для получения дополнительной информации: https://en.bitcoin.it/wiki/Block_hashing_algorithm

Хэш — это хэш этого блока . Он не дает хэш следующего за ним блока, нет способа узнать, каким будет хеш следующего блока, а возможных хэшей может быть много.