Может ли кто-нибудь подробно объяснить компоненты финального хэша, определяющего победителя блока?
Насколько я понимаю, шахтеры берут
Мои вопросы:
Я прав в своем понимании до сих пор?
Может ли кто-нибудь объяснить, что такое другие компоненты и в каком порядке они вводятся в хеш-функцию?
Используя данные о каждом блоке, доступные на blockchain.info, могу ли я воссоздать выигрышный хэш, введя те же данные в калькулятор Sha256?
Спасибо.
Вы очень близки. Как уже было сказано Mesh, майнеры хешируют следующие данные:
Эту информацию можно найти в справочнике разработчиков биткойнов или в PDF-файле .
Теперь, к вашему третьему вопросу, да, вы можете! На самом деле я только что написал небольшую программу на C #, чтобы сделать это вчера! В этом есть небольшая хитрость, потому что вы не можете просто вставить данные прямо в калькулятор хеширования и проверить их. Во-первых, вы добавляете все поля вместе в одну строку (после того, как хэш переворачивается и переворачивается для хэша предыдущего блока и корня Меркла). Затем вы преобразуете эту строку в двоичные данные. На этом этапе вы запускаете двойной хэш SHA256, чтобы убедиться, что вы получили действительный хэш блока.
Полезным ресурсом для вас, чтобы проверить это, является майнинг биткойнов с карандашом и бумагой , а также биткойн вики . На обоих ресурсах есть примеры кода, демонстрирующие этот процесс в действии.
Из документации разработчика Bitcoin.org заголовок блока состоит из:
В этой последовательности. Итак, как вы говорите, единственный компонент, отсутствующий в вашем списке, — это версия и поле nBits. Версия не требует пояснений, а поле nBits — нет. Что делает поле nBits, так это кодирует текущую цель для алгоритма сложности:
иметь не менее 18 лидирующих нулей.
Не всегда 18 нулей. Количество начальных нулей изменяется в зависимости от того, как быстро блоки были обнаружены в последнее время, чтобы удерживать время блокировки в среднем примерно на уровне 10 минут, несмотря на разную мощность хеширования в сети. Чем больше майнеров присоединяется, тем выше скорость хеширования, а значит, и сложность (т. е. требуется больше нулей). Другой способ представить нули состоит в том, что вывод SHA256 в виде числа должен быть меньше некоторого целевого числа. Эта цель закодирована в поле nBits. И да, любой может проверить, что хэш заголовка блока соответствует числу ниже целевого, именно так другие клиенты проверяют допустимость блоков, потому что SHA256 всегда выдает один и тот же вывод из одного и того же ввода — это детерминированное свойство всех полезных хэшей. функции.