Майнинг: Термины и понятия

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

Ранее в статье «Биткоин за 5 минут: Майнинг» я популярно объяснил сущность майнинга и его роль в протоколе Биткоина.

Но, у читателей остались вопросы, связанные с терминологией майнинга и его основными понятиями и определениями.

Эта статья объясняет основные термины и понятия майнинга.

Итак, как мы уже знаем из предыдущей моей статьи, в результате майнинга решаются 2 основные задачи:

  1. Определяется узел сети Биткоина (node), который временно получает право записи очередного блока в блокчейн. Этим достигается консенсус в одноранговой сети.
  2. Производится эмиссия (дополнительный выпуск) монет биткоина, которые в качестве вознаграждения (стимула) получает майнер, записавший новый блок.

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

С него и начнем…

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

Суть PoW сводится к двум основным пунктам:

  1. Необходимости выполнения определенной достаточно сложной и длительной вычислительной задачи. В сети Биткоина это подбор хэш-кода, отвечающего заданным критериям.
  2. Возможности быстро и легко проверить результат.

PoW используется в протоколах Биткоина, Эфириума и многих других криптовалют.

PoS (Proof-of-Stake) — подтверждение доли владения, — альтернативный PoW алгоритм достижения консенсуса при записи блока в блокчейн, при котором вероятность записи нового блока в блокчейн и получение соответствующего вознаграждения пропорциональна доле владения пользователя в системе:

Отдельно взятый держатель валюты, имеющий долю P от общего числа монет в обороте, создает новый блок с вероятностью P.

PoS используется в протоколе криптовалюты DASH.

Bitcoins per Block или Block Reward (биткоинов за блок) — вознаграждение, выплачиваемое майнеру за успешное решение криптографической задачи и присоединение блока к блокчейну. Для Биткоина изначально это количество составляло 50 BTC, однако каждые 210 000 блоков это количество уполовинивается (примерно каждые 4 года). Об этом читайте в статье «Просто и наглядно: Почему количество биткоинов ограничено».

В настоящее время (июль 2017) вознаграждение составляет 12,5 BTC за блок. Следующее уполовинивание до 6,25 BTC ожидается в 2020 году.

Основные параметры майнинга

В ходе майнинга в заголовок блока записывается ряд параметров.

Заголовок блока №475468

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, а именно 0x00000000FFFF0000000000000000000000000000000000000000000000000000 (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) или бинарное дерево хэшей. Подробнее об этом читайте в статье «Биткоин за 5 минут: Блок».

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 000 хеш/сек.
  • MH/s (мегахэш/сек) — 1 000 000 хеш/сек.
  • GH/s (гигахэш/сек) — 1 000 000 000 хеш/сек.
  • TH/s (терахэш/сек) — 1 000 000 000 000 хеш/сек.
  • PH/s (петахэш/сек) — 1 000 000 000 000 000 хэш/сек.
Суммарный хэшрейт майнинга биткоина

Electricity Rate (стоимость электроэнергии) — Обычно измеряется в стоимости 1 kW/h ($ за кВт/час).

Power consumption (Энергопотребление) — Электрическая мощность, потребляемая оборудованием майнинга. Обычно измеряется в ваттах.

Pool fees (комиссия пула) — прибыль пула майнеров распределяется между всеми участниками с учетом того, какой объем вычислений произвел каждый майнер (то есть, исходя из хэшрейтов участников).

Time Frame (временные рамки) — количество времени, потраченного на майнинг. При расчете эффективности (доходности) добычи, необходимо определить временные рамки майнинга. От этого зависит не только количество потенциально добытых биткоинов, но и энергозатраты.

Profitability decline per year (снижение рентабельности в течение года) — На снижение рентабельности, а значит и доходности, влияет увеличение сложности майнинга (см.график выше), а также курсовые колебания криптовалют.

Удачного майнинга!

Читайте также: