Към съдържанието
ДаретеEN

Структура на блока

Хеш на блока

Хешът на блок в биткойн е двойният SHA-256 на 80-байтовото заглавие. Той назовава блока и трябва да е под целта. Вижте как се смята.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

Хешът на блока е неговият идентификатор. Получава се, като 80-байтовото заглавие мине през SHA-256 два пъти. Заглавието съдържа Merkle root и хеша на предишния блок, така че хешът на блока зависи от всяка трансакция в блока и от цялата верига преди него. Класът за заглавието на блока в Bitcoin Core има същите шест полета. Променете който и да е байт от заглавието и хешът се променя.

Как се прави хешът на блока?

Стъпките са кратки:

  1. Вземете 80-те байта на заглавието на блока.
  2. Прекарайте ги през SHA-256.
  3. Прекарайте 32-байтовия резултат през SHA-256 отново. Bitcoin нарича двойния хеш HASH256, тоест хеш функцията, приложена два пъти.
80-байтовото заглавие минава през SHA-256 два пъти, а 32-байтовият резултат е хешът на блока. Заглавие на блока, 80 байта Шест полета, от версията до nonce SHA-256 Първи проход: 32 байта SHA-256 още веднъж Хеш на блока, 32 байта 000000000019d6689c085ae165831e93 4ff763ae46a2a6c172b3f1b60a8ce26f Ред на explorer: обърнатият изход на хеша.
Хешът е показан в реда на explorer-ите. Байтовете излизат от хеш функцията в обратен ред.

Хешът на генезис блока показва стъпките. Този Python код взема генезис заглавието като суров байтов низ и го хешира:

import hashlib

# 80-байтовото заглавие на генезис блока като суров байтов низ.
header = bytes.fromhex(
    "0100000000000000000000000000000000000000000000000000000000000000"
    "000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa"
    "4b1e5e4a29ab5f49ffff001d1dac2b7c")

block_hash = hashlib.sha256(hashlib.sha256(header).digest()).digest()

print(block_hash.hex())        # 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000
print(block_hash[::-1].hex())  # 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
print(int(block_hash[::-1].hex(), 16))

Първият ред е хешът в естествения ред на байтовете, в който той излиза от хеш функцията. Вторият ред обръща байтовете, а това е формата, която показват explorer-ите. Блок 0 в нашия explorer показва втората форма.

Не хеширайте заглавието като шестнадесетичен низ. Първо превърнете шестнадесетичния низ в суров байтов вид, защото хеш функцията работи с байтове.

Защо хешовете на блоковете започват с нули?

Блокът е валиден само ако хешът му, прочетен като число, е под целта. Целта има много водещи нули, така че и валидният хеш трябва да ги има.

Хешът на генезис блока започва с 10 нулеви шестнадесетични цифри и е под генезис целта. Целта на блок 974,000 има 19 водещи нулеви цифри. Хешът му започва с 20, така че е под тази цел. Хеш с едва 18 водещи нули би бил над целта и никой майнър не би могъл да го използва.

Майнърите не избират хеша. Те сменят nonce-то и другите полета на заглавието, а всеки опит е като лотариен билет. Страницата за nonce показва как протича търсенето.

За какво служи хешът на блока?

Хешовете на блоковете вършат две работи:

  • Търсене. Поставете хеша на блок в explorer, за да намерите този блок, както блок 974,000 в нашия сайт. Explorer-ите го показват в своя ред, не в естествения.
  • Свързване. Следващият блок пази този хеш в полето си за предишния блок. Тези връзки правят веригата.

Число ли е хешът на блока, или набор от байтове?

И двете. Хешът е 32 байта, а байтовете сами по себе си не носят значение. Но са уникални за всяко заглавие, така че работят като идентификатор.

Майнърите също четат хеша като число и го сравняват с целта. Хешът на генезис блока, прочетен като десетично число, е 10628944869218562084050143519444549580389464591454674019345556079. Това число е далеч под генезис целта.

Защо редът на байтовете изглежда обърнат?

Хеш функцията извежда байтовете в един ред, който Bitcoin нарича естествен ред на байтовете. Explorer-ите показват същите байтове в обратен ред, за да се виждат водещите нули отпред. Резултатът е един и същ хеш, записан по два начина. Страницата за реда на байтовете обяснява и двата.

Ако копирате хеш от един инструмент в друг и търсенето не намери нищо, първо проверете реда. Хеш, поставен в грешен ред, обикновено не съвпада с никой блок.

Какво следва?

Следват файловете blk.dat, които показват къде нодът пази суровите блокове.

В този раздел: Структура на блока

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни