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

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

Bits

Полето bits в блока на биткойн е 4-байтовата компактна форма на целта, под която трябва да падне хешът. Вижте експонентата и коефициента.

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

Полето bits е 4-байтовата компактна форма на целта. Целта е числото, под което трябва да падне хешът на блока, за да е валиден блокът. Пълната цел е 32 байта, но пазенето ѝ цялата във всяко заглавие би хабило място. Затова bits пазят само толкова от нея, колкото е нужно, в четири байта.

Как целта се събира в четири байта?

Четирите байта се делят на две части:

  • Експонентата, първият байт. Тя казва с колко байта коефициентът е изместен наляво.
  • Коефициентът, следващите три байта. Той пази първите значими цифри на целта.

Стойността е коефициент × 256^(експонента − 3). Заглавието записва полето в little-endian, така че експонентата е последният байт. Explorer-ите печатат четирите байта като едно число, с експонентата първа.

Bits 1701e5ac: експонентата 23 измества коефициента 01e5ac с 20 байта наляво, за да стане 32-байтова цел. Bits 1701e5ac, от блок 974,000 експонента 17 дължина 23 коефициент 01e5ac изместване 20 байта Целта: 32 байта, 64 hex цифри 00000000000000000001e5ac00000000 00000000000000000000000000000000 Синьите цифри са коефициентът.
Примерът е bits на блок 974,000. В заглавието му са записани като ace50117.

Вземете блок 974,000. Заглавието му записва bits като ace50117, което се чете като 0x1701e5ac:

  • Експонентата е 0x17, което е 23.
  • Коефициентът е 0x01e5ac.
  • Коефициентът се измества 23 − 3 = 20 байта наляво, а останалите байтове от 32-те са нули.

Резултатът е 00000000000000000001e5ac0000000000000000000000000000000000000000, цел с 19 нулеви цифри в началото.

Как се превръщат bits в цел?

Изместете коефициента наляво с толкова байта, колкото е експонентата минус три, както казва формулата. Тази Python функция го прави:

def bits_to_target(bits: int) -> int:
    exponent = bits >> 24
    coefficient = bits & 0x007FFFFF  # знаковият бит (0x00800000) никога не е зададен в валидна цел
    return coefficient * 256 ** (exponent - 3)

print(format(bits_to_target(0x1701E5AC), "064x"))
# 00000000000000000001e5ac0000000000000000000000000000000000000000

Пуснете я за bits на генезис блока, 0x1d00ffff, и получавате 00000000ffff, следвано от нули. Това е целта на генезис блока, най-голямата цел, която mainnet допуска.

Как се превръща цел в bits?

Работете в обратна посока. Вземете трите най-значими байта на целта като коефициент. Преброете колко байта има вдясно от тях, а този брой плюс три е експонентата.

Има един капан. Битът най-горе в коефициента е знаков бит в числовия формат на биткойн, затова трябва да остане 0. Ако първият байт на коефициента е 0x80 или по-голям, добавете отпред байт 00 и увеличете експонентата с едно. Блок 489,888 е пример. Целта му започва с 000000000000000000eb30, а първият значим байт, eb, е над 7f. Затова записът е 1800eb30, а не 17eb304f, който би изглеждал отрицателен.

Майнърите не смятат това на ръка. Bitcoin Core превръща новата цел в bits при всяка корекция на трудността и ги чете обратно с SetCompact.

Каква е целта в началото на веригата?

Генезис блокът използва bits 1d00ffff, което дава цел 00000000ffff, следвано от нули. Трудността се мери спрямо нея. Съотношението се нарича трудност и се изчислява като генезис целта, разделена на текущата.

Блок 974,000 има bits 1701e5ac. Целта му е около 148 трилиона пъти по-малка от генезис целта, което съвпада с трудността му от около 148.36 трилиона. Тъй като целта е толкова малка, хешът трябва да започва с много нули, за да е валиден. Хешът на блок 974,000 започва с 20 нулеви шестнадесетични цифри.

Защо целта изобщо е в заглавието?

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

Защо полето се казва bits?

Оригиналният код никога не обяснява името. Името е подвеждащо, защото bit е и най-малката единица данни, а полето няма нищо общо с това значение. То е просто кратко, компактно записване на целта.

Кога се променя целта?

Целта се мени на всеки 2,016 блока, така че bits в блоковете се променят в този момент. Страницата за целта обяснява как се изчислява новата стойност от времето, което е отнел последният период. Правилата за времето са на страницата за времето.

Bits пазят само трите най-значими байта на целта. Хешът се проверява спрямо това скъсено число, а не спрямо по-дългото, което майнърът е изчислил. Блок 40,320 е пример. Bits му са 1c654657, а целта, която записват, е 0000000065465700, следвано от нули. Загубената точност е малка в сравнение с големината на целта.

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

Следва nonce, последното поле на заглавието, което майнърите сменят.

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

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

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