В ходе майнинга в заголовок блока записывается ряд параметров:
Nonce – числовой параметр, искомый в ходе майнинга (алгоритме PoW) и записываемый в заголовок блока. Собственно, целью майнинга, как соревновательного процесса за право добавить блок транзакций в блокчейн, и есть подбор такого Nonce, чтобы искомый хэш блока (Block Hash) был меньше некоторого заданного числа Target, что равнозначно получению хэша блока, начинающегося с определенного числа нулевых битов.
Difficulty Target, также называемая difficulty bits или bits – целевая сложность – максимальное число, которое не должен превышать искомый при майнинге хэш блока (Block Hash). Фактически определяет количество нулевых битов в начале искомого хэша. Часто сокращенно называется Target.
Собственно Target – это само число, а bits – особый формат записи Target в заголовок блока. В bits записывается сразу два числа: первый байт – экспонента (exponent), оставшиеся три байта – мантисса (mantissa). Для того, чтобы получить Target из bits, нужно воспользоваться следующей формулой:
Target = mantissa * 2 (8 * (exponent – 3))
Bitcoin Difficulty, или Difficulty bits, или просто Difficulty – параметр, характеризующий сложность майнинга, т.е. сложность решения криптографической задачи.
Этот параметр представляет из себя отношение
Max_Target / Current_Target,
где Max_Target – максимально возможный Target, а именно 0x00000000FFFF0000000000000000000000000000000
000000000000000000000 (0x1d00ffff в формате bits). Это значение Target использовалось при запуске Биткоина в январе 2009 года;
а Current_Target – это текущее значение Target. Например, для блока №475468, добавленного в момент написания этой главы книги (12 июля 2017), значение Target было равно 0x18018d30 в формате bits, а значение Difficulty равно 708659466230,332.
Именно bits, как правило, указывается во всех Block explorer.
Между Difficulty и Target существует обратная связь – чем выше сложность (Difficulty), тем меньше Target (больше количество нулевых битов в искомом хэше).
На самом деле, сначала вычисляется Bitcoin Difficulty (сложность майнинга), а затем из неё выводится текущий Target.
Первоначальная сложность (Difficulty) при запуске Биткоина в январе 2009 года была равна 1 (единице). Но в связи с увеличением суммарной компьютерной мощности майнинга, необходимо увеличивать и сложность, чтобы нахождение Nonce и запись нового блока происходило примерно каждые 10 минут.
Пересчет (коррекция) сложности происходит через каждые 2 016 блоков. Это по времени соответствует примерно 20 160 минут или две недели.
На самом деле, поскольку вычислительная мощность возрастает, время, затраченное на майнинг последних 2 016 блоков (Actual Time of Last 2016 Blocks), получается несколько меньше, чем 20 160 минут.
Отношение необходимого времени (20 160 минут) к реально затраченному на майнинг – это и есть поправочный коэффициент, который изменяет сложность майнинга. Таким образом, новое значение сложности (New Difficulty) рассчитывается по формуле:
New Difficulty = Old Difficulty * (20 160 minutes / Actual Time of Last 2016 Blocks)
Далее из New Difficulty рассчитывается новое значение Difficulty Target по формуле:
Difficulty Target = Max_Target / New Difficulty
где Max_Target = 0x1d00ffff (в формате bits)
Изменение сложности майнинга биткоина
Merkle Root – хэш-код транзакций текущего блока, рассчитанный с использованием алгоритма, известного, как дерево Мёркла (Merkle tree) или бинарное дерево хэшей. Подробнее об этом читайте в главе «Блок».
Height – номер блока в блокчейне.
Timestamp – временная метка записи блока (дата и время). Записывается в формате UNIX-время (секунды от эпохи UNIX).
Number Of Transactions – число транзакций, записанных в блок.
Previous Block – предыдущий блок.
Подведем краткие итоги…
В процессе майнинга решается криптографическая задача по подбору некоторого параметра Nonce, который, будучи записанным в заголовок блока, приводит к тому, что получившийся хэш-код блока (Block Hash) удовлетворяет заданному условию, а именно – меньше или равен числу Target, которое записывается в формате bits.
В свою очередь, число Target связано со сложностью майнинга (Bitcoin Difficulty или попросту Difficulty), которая пересчитывается через каждые 2 016 блоков (примерно 2 недели) и зависит от суммарного времени майнинга этих блоков – чем быстрее происходит майнинг (за счет увеличения вычислительной мощности), тем более высокая сложность (Difficulty) устанавливается и тем меньше число Target.
Следующие понятия используются в расчетах эффективности майнинга:
Hashrate (хэшрейт или вычислительная мощность) – вычислительная производительность компьютерного оборудования для майнинга криптовалют. Измеряется в хэшах (hash) в секунду.
Основные используемые единицы:
kH/s (килохэш/сек) – 1 тысяча хэш/сек или 1 000 хэш/сек.
MH/s (мегахэш/сек) – 1 миллион хэш/сек или 1 000 000 хэш/сек.
GH/s (гигахэш/сек) – 1 миллиард хэш/сек или 1 000 000 000 хэш/сек.
TH/s (терахэш/сек) – 1 триллион хэш/сек или 1 000 000 000 000 хэш/сек.
PH/s (петахэш/сек) – 1 квадриллион хэш/сек или 1 000 000 000 000 000 хэш/сек.
EH/s (эксахэш/сек) – 1 квинтиллион хэш/с или 1 000 000 000 000 000 000 хэш/сек.
По состоянию на конец октября 2018 хэшрейт Биткойна установился на уровне в 55 EH/s, это на 550% больше, чем в 2017 году.
Изменение суммарного хэшрейта майнинга биткоина
Electricity Rate (стоимость электроэнергии) – обычно измеряется в стоимости 1 kW/h ($ за кВт/час).
Power consumption (энергопотребление) – Электрическая мощность, потребляемая оборудованием майнинга. Обычно измеряется в ваттах.
Pool fees (комиссия пула) – прибыль пула майнеров распределяется между всеми участниками с учетом того, какой объем вычислений произвел каждый майнер (то есть, исходя из хэшрейтов участников).
Time Frame (временные рамки) – количество времени, потраченного на майнинг. При расчете эффективности (доходности) добычи, необходимо определить временные рамки майнинга. От этого зависит не только количество потенциально добытых биткоинов, но и энергозатраты.
Profitability decline per year (снижение рентабельности в течение года) – на снижение рентабельности, а значит и доходности, влияет увеличение сложности майнинга (см. график выше), а также курсовые колебания криптовалют.