Найти тему

Что такое сложность и хэшрейт

В разных обозревателях блокчейна Биткоина есть график «сложности» с числами, которые меняются со временем и почти каждые две недели ставят новые рекорды. Но какова именно интерпретация этих чисел — в каких единицах они измеряются?

В каких единицах исчисляется сложность сети | #BTC_2TheMoon
В каких единицах исчисляется сложность сети | #BTC_2TheMoon

Прежде всего, для понимания сложности майнинга следует понять, что вообще делают майнеры при обработке транзакций и создании новых блоков. Proof of Work (PoW) — это метод подтверждения транзакций в блокчейне, называемый доказательством выполнения работы или майнингом.

С PoW майнеры выполняют математические односторонние функции. Они не решают каких-то сложных задач, но ежесекундно делают триллионы предположений и перестановок в заголовке блока, перебирая хэши до тех пор, пока не найдут один с достаточным количеством нулей, который соответствует условию.

Множество майнеров одновременно соревнуются друг с другом. И тот, кто первым подберет допустимый хэш с достаточным количеством нулей, тот и получает финансовое вознаграждение, а доказанный результат выполненной им работы (найденный хэш) транслируется по всем нодам блокчейн-сети.

Цели, хэши, нонсы

Допустим, у нас есть значение X и нужно получить из него значение Y, но таким образом, чтобы из полученного значения Y невозможно было получить значение X. Для этого нужно преобразовать одно значение в другое с помощью специального алгоритма шифрования.

В криптовалютах для защиты информации от дешифровки применяются различные криптографические алгоритмы. В случае с Биткоином таким алгоритмом выступает SHA-256, который может использоваться с бесконечным объемом данных.

Этот процесс защищенного преобразования называется односторонней функцией или хэшированием (хешированием).

С помощью SHA-256, имея в качестве исходных данных случайное число (значение X), можно получить выходные данные (значение Y), но преобразовать полученные данные в исходные невозможно даже с помощью того же алгоритма SHA-256. Если майнер имеет некоторые входные данные, то с помощью хэширования он получит длинную строку символов на выходе — хэш.

Без приватного ключа или входных данных невозможно узнать, что зашифровано в хэше.
Без приватного ключа или входных данных невозможно узнать, что зашифровано в хэше.

Скорость такого процесса называется «хэшрейт» — это количество операций хеширования, производимых майнерским оборудованием в единицу времени. За расчетную единицу времени принята 1 секунда, поэтому хэшрейт измеряют в хэшах в секунду (хэш/сек, H/s).

В блокчейне, помимо входных данных, содержащих хэши неподтвержденных транзакций и хэш заголовка предыдущего блока, используется еще одна переменная, называемая NONCE (нонс). С помощью перестановок и комбинирования хэшей майнеры ищут такой NONCE, который в совокупности с другими входными данными выдает хэш заголовка нового блока с достаточным количеством нулей.

0000d40976f3076f0ae6c1ad8888b0aa64d8484cf32ea2b99bc095fb952992d7
Биткоин странный: хэши отображаются в обратном порядке, в отличие от большинства других программ хэширования. Поэтому хэш заголовка блока, который начинается с нулей, на самом деле заканчивается ими.

Если блокчейн указывает, чтобы желаемый хэш должен начинаться с 4 нулей, то майнеры в прямом смысле этого слова будут угадывать NONCE, перебирать и перестанавливать хэши транзакций в будущем блоке до тех пор, пока хэш заголовка нового блока не начнется с 0000.

Хэш и нонс при сложности 1
Хэш и нонс при сложности 1

Если это требование удовлетворено, то хэш считается найденным, NONCE, на основе которого он получен, — угадан верно, а значит, новый блок присоединяется к цепочке и все транзакции в нем получают первое подтверждение сети.

Математика протокола Биткоина требует, чтобы вычисление хэша нового блока всегда занимало 10 минут. Если это происходит быстрее, то сеть увеличивает сложность, если дольше — уменьшает. Происходит такой пересчет каждые 2016 блоков (2 недели), и сеть меняет значение желаемого хэша.

Проще найти хэш с одним нулем (0), чем с четырьмя (0000). При увеличении сложности растет требуемое количество нулей, что делает угадывание правильного NONCE менее вероятным, поэтому получить правильный хэш заголовка нового блока сложнее, ведь придется совершать в нем еще больше перестановок.

Генерация блоков — это не длительная четкая задача (например, рассчитать миллион хэшей), а скорее лотерея.

Каждый хэш является случайным числом от 0 до максимального значения 256-битного числа, и в контексте рассматриваемого вопроса он называется «целью» (target). Чем выше хэшрейт оборудования, тем быстрее находится хэш, соответствующий цели.

Вики
Вики

Хэш заголовка каждого нового блока должен быть ниже текущего значения цели, чтобы блок был принят сетью. Чем ниже цель, тем сложнее сгенерировать новый блок. Если хэш нового блока ниже целевого и содержит достаточное количество нулей, то блок считается найденным и валидным. Если нет, майнер увеличивает значение NONCE и снова пробует получить требуемый хэш путем перестановок значений в заголовке блока.

Исходя из изложенного, можно сказать, что сложность (difficulty) представляет собой ожидаемое количество выполненной майнерами работы, которую необходимо затратить для поиска любого допустимого хэша, который был бы ниже текущего и содержал бы достаточное количество нулей. Вероятность того, что хэш окажется допустимым, обратно пропорциональна сложности.

Сложность майнинга выражается формулой:

difficulty = max_target/current_target

  • max_target — это начальное и максимально допустимое значение цели, являющееся огромным числом (~2^224). Поскольку более низкая цель усложняет генерацию блоков, то максимальная цель — это минимально возможная сложность. Это значение цели было использовано в Генезис-блоке.
  • current_target — текущая цель, задаваемая сетью, которая меняется каждые 2 недели.

Т.е. число, выражающее сложность, указывает на то, во сколько раз сложнее найти хэш нового блока, чем хэш начального блока. Поскольку все значения формулы являются числами, то и результат расчета будет числом. Поэтому сложность, в отличие от хэшрейта, не имеет единиц исчисления.

Значение сложности и хэшрейта сети Bitcoin на момент публикации статьи
Значение сложности и хэшрейта сети Bitcoin на момент публикации статьи
Что внутри | BTC_2TheMoon | Биткоин, блокчейн, криптовалюта | Дзен
Математика Биткоина: 100 000 000, 21 000 000, 210 000, 2016, 10
#BTC_2TheMoon | Биткоин, блокчейн, криптовалюта15 августа 2020