Заголовок блока
Заголовок блока (англ. “block header”) — это компактная 80-байтная структура данных, содержащая метаинформацию о блоке. Именно заголовок хешируется при майнинге, а не весь блок с транзакциями.
Структура заголовка блока
Заголовок раздела «Структура заголовка блока»Заголовок блока состоит из шести полей фиксированного размера:
- Версия (4 байта) — номер версии протокола, также используемый для сигнализации поддержки софтфорков (BIP9).
- Хеш предыдущего блока (32 байта) — SHA-256 хеш заголовка предыдущего блока, связывающий блоки в цепочку.
- Корень Меркла (32 байта) — хеш, суммирующий все транзакции в блоке через дерево Меркла.
- Метка времени (4 байта) — Unix-время создания блока (секунды с 1 января 1970 года).
- Биты (4 байта) — компактное представление текущего таргета сложности.
- Nonce (4 байта) — число, перебираемое майнером в поисках валидного хеша.
Представьте титульную страницу книги. Она содержит название (корень Меркла — краткое содержание), ссылку на предыдущий том (хеш предыдущего блока), дату издания (метка времени) и серийный номер (nonce). Сама книга (транзакции) может занимать сотни страниц, но титульная страница (заголовок) всегда имеет стандартный формат и фиксированный размер.
Важная деталь: майнеры хешируют только эти 80 байт заголовка, а не мегабайты транзакций. Транзакции влияют на хеш заголовка опосредованно — через корень Меркла. Это позволяет выполнять миллиарды хеш-операций в секунду, поскольку объём хешируемых данных минимален.
Практический пример
Заголовок раздела «Практический пример»Пул формирует заголовок блока-кандидата: версия 0x20000000, хеш предыдущего блока из цепочки, корень Меркла, вычисленный из 3000 транзакций, текущая метка времени, биты текущей сложности и nonce = 0. Майнер получает эти данные и начинает перебирать nonce от 0 до 2^32 - 1, дважды хешируя 80-байтный заголовок алгоритмом SHA-256 и сравнивая результат с таргетом.