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.