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

Ранее в статье «Биткоин за 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 (снижение рентабельности в течение года) — На снижение рентабельности, а значит и доходности, влияет увеличение сложности майнинга (см.график выше), а также курсовые колебания криптовалют.

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

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


Bitcoin Review

Всё, что вы хотели знать о Биткоине, но стеснялись спросить…

Сергей Базанов

Written by

Автор книги «Биткоин для всех»

Bitcoin Review

Всё, что вы хотели знать о Биткоине, но стеснялись спросить…

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade