В биткойнах следующие данные сериализуются (в одно 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
И есть хеш блока!