Не могу понять Sha256 в блокчейне - PullRequest
0 голосов
/ 29 ноября 2018

Я понимаю, что функция sha256 принимает строковый ввод и производит шестнадцатеричный вывод.Я не уверен, как именно используется вход.Таким образом, в блоке в цепочке блоков я предполагаю, что он использует родительский хеш, данные и nonce в качестве входных данных.Я думаю, что родительский хеш и данные могут быть объединены вместе, а одноразовый номер используется в функции где-то еще.Или, может быть, nonce - это количество раз, которое выполняется функцией sha256, чтобы блок был решен с предыдущим выходным хешем в качестве нового входа?Может кто-нибудь, пожалуйста, объясните мне это правильно, поскольку я еще не нашел ответа?

1 Ответ

0 голосов
/ 29 ноября 2018

В биткойнах следующие данные сериализуются (в одно 80-байтовое значение), затем дважды хэшируются с использованием SHA256 для получения блочного хэша :

  • версии (4 байта)
  • Предыдущий хеш блока (32 байта)
  • Корневой хеш Merkle (32 байта)
  • Метка времени (4 байта)
  • nBits (4 байта)
  • nonce (4 байта)

Корень merkle - это корень дерева merkle всех транзакций в блоке, nBits опишите цель сложности, которой должен соответствовать хеш-блок, чтобы считаться допустимым, и майнер может изменять одноразовый номер каждый раз, когда выполняется функция хеширования, пока не будет найден действительный хеш-блок.

Пример

Возьмите блок (например, блок 3): Блок 3 в формате json или Блок 3 в шестнадцатеричном формате

Конкатенация (в этом порядке, младший порядок,шестнадцатеричный формат) версия, хеш предыдущего блока, корень Merkle, время эпохи Unix, цель сложности (биты) и одноразовый номер.Вы увидите, что вы можете скопировать первые 160 символов из блока 3 в шестнадцатеричной ссылке .

01000000bddd99ccfda39da1b108ce1a5d70038d0a967bacb68b6b63065f626a0000000044f672226090d85db9a9f2fbfe5f0f9609b387af7be5b7fbb7a1767c831c9e995dbe6649ffff001d05e0ed6d

Запустить команду:

echo 01000000bddd99ccfda39da1b108ce1a5d70038d0a967bacb68b6b63065f626a0000000044f672226090d85db9a9f2fbfe5f0f9609b387af7be5b7fbb7a1767c831c9e995dbe6649ffff001d05e0ed6d | xxd -r -p | openssl sha -sha256 | xxd -r -p | openssl sha -sha256

Reverse the output from

4944469562ae1c2c74d9a535e00b6f3e40ffbad4f2fda3895501b58200000000

до

0000000082b5015589a3fdf2d4baff403e6f0be035a5d9742c1cae6295464449

И есть хеш блока!

...