23 / 736HDR

Block Header

заголовок блока

Невелика частина блока, яка пов’язує його вміст із попередньою історією та дає змогу перевірити роботу майнера.

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.

DOC · 001Bitcoin Core v29.0: header serializationПервинне джерело DOC · 002Bitcoin Core v29.0: header validationПервинне джерело DOC · 003Bitcoin Core v29.0: proof of workПервинне джерело DOC · 004Bitcoin Developer Reference: Block HeadersПервинне джерело
Переглянуто: Спочатку джерела · Не інвестиційна порада