Майнинг: Термины и понятия
Майнинг — это необходимый и важный процесс в сети Биткоина, в результате которого в блокчейн добавляется новый блок транзакций и происходит эмиссия новых монет биткоина.
Ранее в статье «Биткоин за 5 минут: Майнинг» я популярно объяснил сущность майнинга и его роль в протоколе Биткоина.
Но у читателей остались вопросы, связанные с терминологией майнинга и его основными понятиями.
Эта статья объясняет основные термины и понятия майнинга.
Итак, в результате майнинга решаются 2 основных задачи:
- Определяется узел сети Биткоина (node), который временно получает право записи очередного блока в блокчейн. Этим достигается консенсус в одноранговой сети.
- Производится эмиссия (дополнительный выпуск) монет биткоина, которые в качестве вознаграждения (стимула) получает майнер, записавший новый блок.
Первая задача решается при помощи алгоритма, который получил название Proof-of-Work (PoW) — доказательство выполненной работы.
С него и начнем…
PoW (Proof-of-Work) — доказательство выполненной работы, — алгоритм, при помощи которого сеть майнинга биткоина приходит к консенусу, определяя какой из майнинговых узлов запишет сформированный блок в блокчейн.
Суть PoW сводится к двум основным пунктам:
- Необходимости выполнения определенной достаточно сложной и длительной вычислительной задачи. В сети Биткоина это подбор хэш-кода, отвечающего заданным критериям.
- Возможности быстро и легко проверить результат.
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 году.
Основные параметры майнинга
В ходе майнинга в заголовок блока записывается ряд параметров.
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 (снижение рентабельности в течение года) — На снижение рентабельности, а значит и доходности, влияет увеличение сложности майнинга (см.график выше), а также курсовые колебания криптовалют.
Удачного майнинга!
Читайте также:
- Биткоин за 5 минут: Майнинг
- Технологические аспекты Биткоина для «чайников»
- Genesis: Как появился Биткоин
- Что влияет на рост курса биткоина
- «Биткоин-пузыри»: Краткая история
- Биткоин в ловушке закона Грешема