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.