Block Header — короткая запись в начале блока Bitcoin. Она содержит отпечаток предыдущего блока, общий отпечаток транзакций и данные для проверки Proof of Work. Сами платежи хранятся в другой части блока.
Представьте блок как пакет транзакций, а заголовок — как сопроводительную запись. В нём нет списка получателей и сумм. Вместо этого он содержит криптографические отпечатки: короткие значения, вычисленные из данных и позволяющие обнаруживать изменения. Один указывает на предыдущий блок. Другой, Merkle root, объединяет идентификаторы транзакций этого блока. Так заголовок связывает определённое содержимое с определённым местом в истории. Но это не уменьшенная копия транзакций: прочитать их исходное содержимое по отпечатку нельзя. [1] [4]
Майнер собирает блок-кандидат и ищет подходящий хеш — отпечаток, рассматриваемый как число. Оно должно быть меньше или равно заданному целевому значению. Этот поиск называется Proof of Work: майнер меняет данные и повторяет вычисления, поскольку подходящий результат нельзя просто предсказать. Самая известная переменная — nonce, вспомогательное число в заголовке. Для получения новых вариантов майнер может менять данные особой Coinbase Transaction, которую создаёт в начале блока. Тогда меняется и Merkle root, а значит, получается другой заголовок. Остальные узлы могут быстро повторить вычисление и проверить результат. [1] [3] [4]
Цепочка заголовков позволяет проследить связи между блоками и проверить соответствующую работу без загрузки всех транзакций. Но представьте блок с правильным Proof of Work, в котором кто-то пытается потратить чужие средства без необходимой подписи. Проверка одного заголовка не обнаружит проблему. Поэтому Full Node проверяет также транзакции, их подписи, доступные неизрасходованные выходы и допустимое вознаграждение. Правильный заголовок не гарантирует правильности всего блока. [2]
Поле nBits задаёт цель, которой должен соответствовать хеш. Это компактная кодировка целевого значения, а не показатель «difficulty» из обозревателя блоков. Узел также проверяет, соответствует ли цель правилам для данного места в цепочке. Время майнер тоже не может выбрать произвольно. Оно должно быть позже медианы предыдущих 11 блоков — значения в середине упорядоченного списка их временных отметок — и не может указывать на слишком далёкое будущее. При этом оно не является точным временем каждого платежа или секундомером продолжительности майнинга. [2] [3]
Порядок и размеры полей фиксированы: version занимает 4 байта, хеш предыдущего заголовка — 32, Merkle root — 32, time — 4, nBits — 4 и nonce — 4. Всего 80 байтов независимо от количества транзакций. Идентификатор блока получают двукратным применением SHA-256 к заголовку, записанному именно в таком формате. Числовые поля используют little-endian: младший байт идёт первым. У хешей внутренний порядок байтов отличается от обычного отображения идентификатора. Поэтому для самостоятельного расчёта недостаточно склеить значения так, как их показывает обозреватель. [1] [4]
Для полной картины прочитайте эту статью вместе с Block, Proof of Work, Merkle Tree, Nonce. На эту статью также ссылаются Block, Hash, SHA-256, Merkle Tree.