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

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

Nonce

Nonce биткойн е 4-байтово поле, което майнърите сменят, за да получат нов хеш на блока. Вижте защо има 4,294,967,295 опита на заглавие.

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

Nonce е последното поле на заглавието на блока и е 4 байта. Майнърите го сменят, за да получат различен хеш от същия блок. Само по себе си то няма значение. Това е резервно поле, което прави търсенето възможно. Името е съкращение от „number used once“, тоест число, използвано веднъж.

Какво прави nonce?

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

Майнърите задават nonce, хешират заглавието и сравняват хеша с целта; ако не минава, добавят едно и пробват пак. хеш целта? +1 nonce да валиден не 4 байта: от 0 до 4,294,967,295
Всеки цикъл променя само nonce. Всяко друго поле на заглавието остава същото.

Търсенето не изисква умение. Всеки хеш е непредсказуем, така че всеки опит има същия шанс да успее като предишния. Пробването на nonce 0 дава същия шанс като пробването на nonce 4,294,967,295. Майнърите разчитат на късмет и на бързината на хардуера си.

Всеки блок във веригата носи nonce-то, с което е успял. Nonce-то на генезис блока е 2,083,236,893, записано като 1dac2b7c. Nonce-то на блок 974,000 е 154,009,711, записано като 6f002e09.

Как майнърът търси валиден nonce?

Стъпките за един опит са кратки:

  1. Задайте nonce в заглавието.
  2. Хеширайте 80-байтовото заглавие с HASH256.
  3. Прочетете хеша като число и го сравнете с целта.
  4. Ако хешът е под целта, блокът е валиден. Ако не е, добавете едно към nonce-то и пробвайте пак.

Този Python скрипт изпълнява цикъла. Използва лесна цел: хеш, който започва с четири нулеви шестнадесетични цифри, така че намира решение за няколко хиляди опита. Целта в мрежата е много по-трудна.

import hashlib

def hash256(data: bytes) -> bytes:
    return hashlib.sha256(hashlib.sha256(data).digest()).digest()

# Генезис заглавието с нулев nonce. Първите 76 байта не се променят при майнинг.
version = "01000000"
previous = "00" * 32
merkle = "3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
time_bits = "29ab5f49" + "ffff001d"
header = bytes.fromhex(version + previous + merkle + time_bits + "00000000")

target = 2 ** 240   # хеш под тази стойност започва с четири нулеви шестнадесетични цифри
for nonce in range(2 ** 32):
    candidate = header[:76] + nonce.to_bytes(4, "little")
    h = hash256(candidate)
    if int.from_bytes(h, "little") < target:   # Bitcoin чете байтовете на хеша като число в little-endian
        print(nonce, h[::-1].hex())
        break

Пуснете го и той извежда 8603 00007cc6ec08c5d53c32ceaf6e8309c32eb07fc903a94ec77ac2bf6e48f7adb3. Nonce-то е 8,603, а хешът започва с четирите нули, които целта иска. Ако намалите целта, търсенето отнема повече време, защото по-малко хешове минават.

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

Какво става, когато всички nonce-та се провалят?

Nonce-то има 4 байта, така че обхваща от 0 до 4,294,967,295, тоест до 0xffffffff. Bitcoin Core го пази като nNonce в класа на заглавието на блока. Съвременният майнинг хардуер може да мине през целия диапазон за малка част от секундата. Когато диапазонът се изчерпи без валиден хеш, майнърът трябва да промени нещо друго в заглавието.

Две други полета могат да се променят свободно:

  • Времето. Майнърът може да премести времевата марка напред с малко, което дава на заглавието нови байтове. Тъй като майнингът е толкова бърз, това носи много малко.
  • Coinbase трансакцията. Майнърът променя scriptSig на coinbase трансакцията, поле, в което може да сложи произволни данни. Новият scriptSig дава нов coinbase txid. Това променя Merkle root, а той е в заглавието. Това допълнително място често се нарича „extra nonce“.

Полето версия също може да служи като допълнителен nonce, както е отбелязано на страницата му. Майнърите обикновено сменят първо nonce-то, защото то е най-бързото от трите.

Защо nonce-то е само 4 байта?

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

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

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

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

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

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