С чего начинается майнинг?
(Часть 3. За что соревнуются майнеры.)

Итак, мы подошли к третьей части, которую если понять, то считайте, что вы поймёте, как функционирует биткоин, какие вычисления делают все майнеры, как формируется очередной биткоин-блок. Вспомним параметры заголовка и тела блока: номер блока, хеш блока, хеш предыдущего блока, хеш следующего блока, корень Меркла, время создания блока, сложность, параметр bits, параметр nonce, число транзакций, награда, генерирующая транзакция, другие транзакции, входы и выходы блока в btc, число подтверждений. Майнерам, чтобы эмитировать блок, ставится задача вычислить хеш заголовка блока, удовлетворяющий цели. Один из параметров блока используется для вычисления цели - параметр цели (bits), но это - не цель. Это - некоторое целое число, которое, вычитаясь из 2 в 256 степени минус 1, даёт цель. Обновление bits осуществляется с периодичностью раз в 14 дней, при этом учитывается эталонное значение bits, изменение объёма блоков за последние 14 дней и в результате специального алгоритма система вычислений подстраивается под количество участников и общую мощность подключенного оборудования ещё на 14 дней. Сразу возникает вопрос, если параметр bits регулирует сложность вычислений, то зачем ещё, собственно, параметр сложность, которая также пересчитывается раз в две недели?



Да, пересчет сложности добычи биткоина происходит каждые 2016 блоков, а это примерно примерно 2 недели, так как формирование каждого блока, кроме числовой цели, должно укладываться и во временные рамки (для биткоин-блока это 10 минут). Таким образом, майнеры должны достичь двух целей: вычислить нужное число, меньшее цели, и уложиться во временной интервал. Но параметр сложность в вычислениях не участвует. Это - сравнительный динамический числовой параметр относительно начальной сложности, когда она была равна 1 (единице), причём первые четыре цифры значения сложности коррелируют с ценой биткоина в долларах, а в целом сложность коррелирует с количеством попыток вычислить "правильный" хеш. Практически за всё время существования сети сложность растёт. Сложность можно учитывать при разработке более производительного компьютерного оборудования. Сложность не корректирует время генерации блока. Эта роль отводится цели (target). Каждый клиент Bitcoin (программное обеспечение) сравнивает фактическое время, необходимое для генерации блоков, с двухнедельной целью, и изменяет цель на процентную разницу, на которую в среднем изменилось время добычи блока. Подробнее - Цель и Сложность.

Хеш блока был упомянут во-время. Hashblock(n)=sha256(sha256(xn),уn) - формула вычисления хеша n-го блока, где хn - хеш дерева Меркла блока n, а у - дополнительные параметры заголовка блока n. Первое хеширование sha256(xn) вычисляет хеш корня Меркла - хеш всех транзакций в блоке, а вот за Hashblock(n) - хеш заголовка блока n, соревнуются майнеры, чтобы получить награду, и соревнуются не просто за хеш, а за "красивый" хеш: строка хеша блока должна содержать в начале себя самой определенное количество нулей и значение хеша блока должно быть меньше целевого значения. Количество нулей для вычисления хеша изменяется автоматически внутри двухнедельного интервала и, тем самым, корректируется время генерации блока и сложность, в то время как target в этом интервале остаётся постоянной. Фактически решение задачи с нулями в хеше является третьей целью для майнеров. В начале майнинга в первых блоках биткоина количество нулей задавалось равным восьми шестнадцатиричным нулям. И всё же, как получить удовлетворяющий требованиям хеш? Для этого используется параметр заголовка nonce, принимающий значения от 0 до 2 в 32-ой степени, т.е. от 0 до 4294967296. Его использует функция Hashblock(n,nonce). Если очередной nonce не подходит для решения задачи, берётся nonce+1 и хеширование продолжается. Если все 4 млрд вычислений не приведут к нужному результату, то пересчёт начинается сначала, но уже с учётом либо метки времени Hashblock(n,nonce,tlabel), либо параметра extranonce - Hashblock(n,nonce,tlabel,extranonce). О метках времени, а заодно и о масштабируемости блокчейна здесь. Nonce размещается в заголовке блока и не влияет на хеш корня Меркла. Extranonce размещается в теле блока и в принципе может изменить значение хеша корня Меркла.



Что нужно уяснить для себя? Процесс нахождения "красивого" хеша всегда предопределён и конечен, в случае чего можно задать дополнительные параметры, но следует учитывать, что места в заголовке практически нет, поэтому такие параметры могут переносится либо в тело, либо в специальный блок, как это реализовано с extranonce (в транзакции), изменяя одновременно корень Меркла. При этом в пулах, где одновременно "красивый" хеш ищет много майнеров, возникает задача пула — распределить работу между майнерами таким образом, чтобы их работа не дублировалась. Для nonce и всех дополнительных параметров это можно реализовать делением на отрезки, для каждого майнера свой отрезок, но есть другой способ - вместо "красивого хэша" искать "красивую шару". Пул упрощает для всех майнеров задачу, уменьшая её сложность, например, упрощая параметр цели или уменьшая количество нулей в хеше. Каждому майнеру задаётся своя упрощённая цель, более простая, чем цель сети, но близкая к ней. Упрощение может соответствовать производительности оборудования майнера: чем меньше хешрейт майнера, тем более простая задача ему будет поставлена. Правильные решения, правильные хеши, которые будут найдены для упрощённых задач, называются шарами. Такие шары принимаются пулом, ставятся на проверку и в дальнейшем оплачиваются. А майнинг-пул проверяет, не является ли каждое такое решение заодно и полным решением задачи. Шара - это хеш блока, удовлетворяющий упрощённой цели, но возможно удовлетворяющий и цели сети, а может и нет, выглядит как решение блока, но на самом деле нет, то есть может и решение, но совсем не обязательно. Если шары пулом отклоняются, есть возможность над чем подумать - Почему шары отклоняются?



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

БИТКОИН (BTC): аналитика 2019-07-23.
Анализируем волатильность биткоина по графику MARKET DEPTH (глубина рынка).
Текущий курс 9994$. Следующая цель для быков - 11400$.

Счётчик посещений сайта с 08.07.2019


Copyright © 2008-2019. Все права защищены.

Сайт разработан с помощью http://free-templates.ru и SeanPollock.
Hosted by uCoz