В чем измеряется сложность майнинга

Сложность в майнинге (mining) криптовалют.

Сложность (от англ, «Difficulty») — единица измерения, которая показывает, насколько сложно найти хеш(hash), который будет ниже предложенной системой цели таргета (target).

Принципы функционирования

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

Сложность в сети Bitcoin меняется каждые 2016 блоков. Она рассчитывается по следующей формуле:

где difficulty — сложность, а target — 256 битное число.

Difficulty_1_target может принимать различные значения. Традиционно это хеш, 32 первых бита которого являются 0, остальную часть составляют единицы (это также называется pdiff или pool difficulty). Bitcoin протокол представляет цель (target), как тип с плавающей точкой и ограниченной точностью. Зачастую, именно основываясь на этих данных, Bitcoin клиенты определяют сложность.

Хранение сложности в блоках

Каждый блок хранит в себе запакованную версию (называемую «Bits» или «Биты») шестнадцатеричной цели.

Используя следующую формулу, из каждого блока можно получить его цель. Например, если запакованная цель в блоке имеет вид 0×1b0404cb, то ее шестнадцатеричная версия будет выглядеть следующим образом:

Максимальное значение для этого поля — 0×7fffff, минимальное же составляет 0×008000.

Максимально возможная цель (при сложности 1) определена как 0×1d00ffff, что в шестнадцатеричном варианте имеет вид:

Ниже представлен быстрый способ вычисления сложности сети Bitcoin. Для логарифмирования он использует измененную версию ряда Тейлора и основывается на логах для преобразования вычисления сложности.

Максимальная, текущая и минимальная сложности

Текущую сложность можно узнать воспользовавшись Bitcoin-командой getDifficulty.

Ввиду того, что не существует минимальной цели (target), примерно рассчитать максимальную сложность можно следующим образом: maximum_target / 1 (т.к. 0 приведет уравнение к бесконечности), что является невообразимым числом (~ 2 в 224 степени).

Минимальная же сложность равняется 1.

Изменение сложности

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

Для нахождения блока хеш должен быть меньше цели (принцип работы proof-of-work). Хеш является случайным числом от 0 до 2*256-1.

Сложность заявлена таким образом, как будто мы находили предыдущие 2016 блоков с периодичностью раз в 10 минут.

Среднее время нахождения блока в одиночку рассчитывается по формуле: time = difficulty * 2**32 / hashrate, где difficulty это текущая сложность сети Bitcoin, hashrate это количество хешей, которое ваш майнер находит в секунду и time это среднее время (в секундах) между нахождением вами блока.

Источник