Хеш на блока
Хешът на блок в биткойн е двойният SHA-256 на 80-байтовото заглавие. Той назовава блока и трябва да е под целта. Вижте как се смята.
От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.
Хешът на блока е неговият идентификатор. Получава се, като 80-байтовото заглавие мине през SHA-256 два пъти. Заглавието съдържа Merkle root и хеша на предишния блок, така че хешът на блока зависи от всяка трансакция в блока и от цялата верига преди него. Класът за заглавието на блока в Bitcoin Core има същите шест полета. Променете който и да е байт от заглавието и хешът се променя.
Как се прави хешът на блока?
Стъпките са кратки:
- Вземете 80-те байта на заглавието на блока.
- Прекарайте ги през SHA-256.
- Прекарайте 32-байтовия резултат през SHA-256 отново. Bitcoin нарича двойния хеш HASH256, тоест хеш функцията, приложена два пъти.
Хешът на генезис блока показва стъпките. Този 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, които показват къде нодът пази суровите блокове.
В този раздел: Структура на блока
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни