225 / 736TARGET

Mining Target

Число, якого результат майнера не має перевищувати

Яна знає, що майнери повторюють обчислення, але досі не розуміє, чого саме вони чекають. Кожна спроба створює хеш — результат, який можна уявити дуже великим числом. Підходить не будь-який результат: він має бути нижчим за встановлену межу, причому рівність також дозволена. Цю межу називають Mining Target. Що вона нижча, то рідкісніший успіх. Інші учасники мережі потім можуть легко перевірити, що результат справді виконав умову.

Mining Target — це число, з яким порівнюють хеш заголовка блоку, його стислого набору основних даних. Для дійсного доказу роботи хеш не має перевищувати правильну ціль. У мережі Bitcoin ця ціль мусить бути додатною й відповідати правилам для конкретного блоку; майнер не може обирати її довільно.

Лише для прикладу уявімо межу 20: результати 19 і 20 підійдуть, а 21 — ні. У справжньому майнінгу числа значно більші, але співвідношення те саме: hash ≤ target. Знак означає «менше або дорівнює», а не лише «менше». Bitcoin Core — програма, за допомогою якої учасники мережі перевіряють блоки й транзакції. Наведена тут версія v29.0 так само порівнює хеш усього заголовка. Nonce — значення, яке майнер змінює під час пошуку, — є одним із вхідних значень. Із ціллю порівнюють отриманий хеш. [1]

Яна бачить зображення успішного хешу з довгим рядом нулів на початку. Це корисна ілюстрація: за однакової довжини запису більше початкових нулів означає менше число. Але два хеші з однаковою кількістю таких нулів можуть лежати по різні боки цілі. Решта цифр теж важлива. Тому нулі не замінюють повного порівняння hash ≤ target. Правило вимагає точної числової умови, а не красивого візерунка символів. [1]

Біт зберігає нуль або одиницю; вісім бітів утворюють байт. Щоб не зберігати в заголовку все довге число, Bitcoin використовує поле nBits завдовжки 32 біти. Воно кодує ціль у просторі 256-бітових чисел за допомогою коефіцієнта, показника для зсуву та біта знака. Наприклад, 0x04123456 декодується в 0x12345600; префікс 0x означає шістнадцятковий запис, у якому є й літери. Це приклад кодування, а не поточна ціль мережі. Для базового розуміння досить розрізняти число та його скорочений запис. [3] [5]

У сирих даних те саме число може здаватися перевернутим. У заголовку завдовжки 80 байтів поле nBits займає чотири байти, записані як little-endian: спочатку йде найменш значущий байт. Тому число 0x1d00ffff у даних виглядає як ff ff 00 1d. Порядок байтів не змінює цілі, а описує зберігання. Це важливо для роботи із сирими даними; звичайному читачеві оглядача блоків не потрібно перевертати показані числа. [2]

Яна могла б запропонувати записати більше число й полегшити пошук. Однак програма перевіряє не лише можливість прочитати nBits. DeriveTarget у Bitcoin Core v29.0 відхиляє від’ємну ціль, нуль, переповнення числового діапазону та значення понад powLimit, найвищу дозволену ціль цієї мережі. Успішне декодування лише встановлює, яке число означає запис; воно саме по собі не дозволяє його використовувати. [1]

Навіть ціль у дозволеному діапазоні може бути неправильною для конкретного блоку. Bitcoin Core порівнює nBits із GetNextWorkRequired — розрахунком за попереднім блоком і правилами мережі. Невідповідність спричиняє помилку bad-diffbits. Низький хеш під власною полегшеною ціллю не виправдовує неправильного значення в заголовку. Яна не отримає прийнятого блоку простим зниженням вимог: інші вузли, тобто комп’ютери, які перевіряють правила, відхилять таку спробу. [4]

У моделі рівномірно розподілених 256-бітових хешів кожен можливий результат однаково ймовірний. Для дозволеної цілі T приймаються значення від нуля до T включно. Звідси p = (T + 1) / 2^256 для однієї спроби, де p — ймовірність успіху. Додана одиниця враховує нуль. Це пояснює, чому нижча ціль ускладнює пошук. Але не каже, скільки спроб пристрій виконає за секунду або коли саме з’явиться наступний блок. [1]

Виконавши умову, Яна довела потрібну обчислювальну роботу, а не правильність усього вмісту блоку. Bitcoin Core також перевіряє спільний відбиток транзакцій, спеціальну транзакцію винагороди coinbase, обмеження блоку та дійсність транзакцій. Тут coinbase — технічна назва першої транзакції блоку, а не біржі. Низький хеш не виправить недійсного вмісту. Ціль — важлива частина правил, а не дозвіл обійти решту. [4]

Для повної картини прочитайте також Share Difficulty, Proof of Work, Nonce, Block Header, Bitcoin. На цю статтю також посилаються ASIC Miner, Nonce, Mining Share, Share Difficulty.

DOC · 001Bitcoin Core v29.0 — Proof-of-work checksПервинне джерело DOC · 002Bitcoin Developer Reference — Block headers and nBitsДокументація DOC · 003Bitcoin Core v29.0 — Compact arithmeticПервинне джерело DOC · 004Bitcoin Core v29.0 — Contextual and block validationПервинне джерело DOC · 005NIST — Binary data unitsДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада