Если вы не можете ответить на вопросы:
"Что майнит асик?"
"Что такое майнинг?
"Откуда берутся новые Биткоины?"
"Как создаются новые блоки в блокчейне"
...то Вы попали по адресу.
Прочитав эту статью, параллельно "прощупав" под моим руководством алгоритм хеширования Sha256 в онлайн-генераторах, Вы непременно разберетесь что к чему и начнете понимать, что же все-таки происходит внутри Вашего асика.
Что такое майнинг: процесс в деталях "от и до"
Что такое SHA256?
Асики, которые созданы для майнинга BTC, работают на алгоритме SHA256. Чипы, которые установлены на плату асика - умеют производить вычисления только на этом алгоритме, и не могут ничего другого.
Более конкретно, нам нужно понять 256-битный безопасный (S) хеширования (H) алгоритм (A), также известный как SHA256, который используется в приложениях и протоколах безопасности, таких как TLS, SSL, PGP, SSH и Bitcoin.
SHA256 шифрует любое сообщение, файл или фрагмент информации в уникальную комбинацию.
Важная часть заключается в том, что результат выглядит совершенно случайным. Если вы измените хотя бы один бит информации, вы получите совершенно другой хэш. Хэш, который вы получаете, непредсказуем.

А теперь обязательно открывайте онлайн генератор SHA256 и начните вводить что-нибудь. Например, можно узнать Ваше имя в виде SHA256. Если "ручками" прочувствуете процесс - быстрее поймете, что же такое майнинг. Вкладку не закрывайте, к ней мы еще вернемся.
Из чего состоит блок в блокчейне Bitcoin?
В случае, когда асик майнит на пуле - пул передает все данные для работы, поскольку является полной нодой сети:
- Заголовок блока
- Coinbase-транзакцию
- Неподтвержденные транзакции, отобранные пулом для включения в блок
В случае, когда асик майнит соло - нужно стать майнинговым узлом или полной нодой, тогда ваше программное обеспечение будет само составлять эти входные параметры и сканировать сеть, собирая неподтвержденные транзакции, формировать хеш дерева меркла и так далее.
Что содержится в заголовоке блока?
Майнерам (пулу или соло-майнеру) до начала игры "Угадай Nonce" необходимо создать «заголовок блока». Давайте пройдемся по необходимым полям:

«Nonce» — это число, которое должен угадать майнер, ведь именно изменение его (перебор разных значений) будет каждый раз изменять хеш.
Кроме заголовка, блок наполняется также Coinbase-транзакцией (генерация новых биткоинов и перевод комиссий всех транзакций майнеру), а так же неподтвержденными транзакциями, строя приоритет включения по размеру комиссий, установленных пользователями. Хеши транзакции формируют хеш дерева Меркла.
Откуда берутся новые биткоины? Coinbase транзакция
Так откуда же берутся новые биткойны и как они добавляются к адресам майнеров?
«Награда за блок» добавляется как первая транзакция в блоке. У него нет отправителя или подписи, и она также известена как «транзакция coinbase».

Интересный факт: биткойны, участвующие в транзакции coinbase, можно отправить повторно или потратить впервые только после того, как соответствующий блок получит 100 подтверждений. Это означает, что в цепочку добавлено 100 блоков и прошло около 17 часов.
В данной Coinbase-транзакции кошелек майнера получает не только награду в 6.25 BTC за найденный блок, но и собирает все комиссии со всех транзакций, которые он включил в него, около 0.3 BTC в сумме.
Какой хеш нужно найти асику, чтобы сформировать блок?
Что такое Bits (битс)?
Результирующий хэш блока должен быть ниже целевого. Цель (bits, битс, целевая сложность) опредляется сетью на следующие 2016 блоков, на основании текущей сложности сети во время эджаста сети. Тут, я надеюсь, Вы знаете что такое сложность сети, как она меняется и от чего зависит изменение, поскольку уж с этим сталкивается каждый майнер - останавливаться на этом не будем.
Cоотношение битсов и сложности сети хорошо видно в таблице на https://btc.com/stats/diff
Кто хочет самостоятельно разобраться в том, как сложность опеределяет значение битс - велкам в эту статью.
Например, битс для Блока 828153 был:
0x1704005a, или 00000000000000000004005a0000000000000000000000000000000000000000
Число начинается с 19 нулей, за которыми следует цифра "4". Число имеет шестнадцатеричный формат.
Хэш блока должен быть меньше этого числа. И именно это затрудняет задачу угадывания во время перебирания нонсов.
Что делают майнеры, так это добавляют значение nonce к блоку и меняют его так часто, пока хеш всего блока не будет меньше, чем целевое значение. Для этого конкретного блока это был хеш, который нашел майнер для Блока 828154
0000000000000000000384e40836f1923701c3e4feb27d18fa7bebf24da7c151
Как мы видим, тут те же 19 нулей, но после них идет "3", что меньше, чем "4", а значит блок можно включать в цепочку, он удовлетворяет сложности сети.
Сколько нулей должно быть в начале хеша нового блока блокчейна Bitcoin?
Вообще, не совсем верно говорить, что в этом хеше 19 начальных нулей. Их 18, что соответствует 0x17 экспоненте, а мантисса начинается с 04.
В мантиссе может быть до двух нулей вида:
0x1900896c - Bits для эджаста 2014-04-30
0x187c3053 - Bits для следующего эджаста 2014-05-12
К сожалению, я так и не понял как считать количество нулей, которое дает экспонента, но на очень долгое время нам хватит примитивной таблицы:

Посмотрим на скриншоте хеши еще 20 блоков - все они будут меньше, чем "00000000000000000004005a"

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

Чтобы подобрать "нонс" к Hello для хеша с двумя нулями, я просидел минут 7 долбя по нумпаду рандомные кнопки. Вероятность получить хеш, начинающийся с 3 нулей, уже равна 1 из 4096. Так что не тратьте время на поиски третьего нуля. Экспоненциальный рост ускоряется.
Я очень рекомендую сделать то же самое, что и я, на этом онлайн-генераторе SHA256. Поподбирайте нонс, добейтесь хотя бы двух нулей в результирующем хеше.
ИМЕННО ЭТО И ДЕЛАЕТ АСИК, ТОЛЬКО В НЕСКОЛЬКО ТРИЛЛИОНОВ РАЗ БЫСТРЕЕ, ЧЕМ ВЫ, СИДЯ ЗА КЛАВИАТУРОЙ.
А ведь асику хеш нужно найти не с двумя нулями в начале, как Вам. А с 18-19 нулями.
Сложность чрезвычайно затрудняет поиск этого числа, что приводит к большому количеству вычислительной работы в форме множества догадок.
К началу февраля 7-дневная скользящая по хешрейту сети биткоин находится на уровне 550 EH/s.
Это значит, что все асики вместе взятые в мире перебирают около 550 000 000 000 000 000 000 хешей в секунду, чтобы при текущей сложности сети находить правильный нонс в среднем один раз в 10 минут.
Решение Extra Nonce
Однако, с ростом сложности все чаще и чаще стали возникать ситуации, когда перебор всех 4 294 967 296 возможных значений Nonce не приводил к положительному результату.
Для решения проблемы майнеры прибегали к обновлению временной метки блока с учетом затраченного на поиск времени. Менялся еще один параметр заголовока блока, следовательно, появлялась возможность заново запустить цикл поиска хеша заданного вида, варьируя параметром Nonce.
Но и этого стало мало, когда эти значение хешрейта сети превысило 4 GH/s (середина 2010 года). Таким образом все значения nonce могли быть перебраны за 1 секунду временной метки. Выходом стало использование дополнительно к 4 байтам Nonce еще и 8 байтов пространства Coinbase-транзакции, изменение которой влияет на дерево меркла, а значит и на весь хеш. Решение получило название Extra Nonce.
Число Nonce найдено
Нода (пул или соло-майнер), верно нашедшая нонс и составившая хеш для нового блока ниже, чем значение битс, должна предъявить его всем остальным участникам сети. Механизм трансляции найденного блока напоминает процедуру распространения транзакций.
- Нода отправляет его по списку IP-адресов своих контрагентов.
- Узлы сети Биткоин, получив блок, верифицируют его и в случае положительного результата проверки ретранслируют его далее по адресам из своих списков.
- Каждая нода сможет легко убедиться, что это правильный хеш, сравнив его с целевой сложностью - он просто будет меньше.
- По мере распространения нового блока по сети каждый узел добавляет его в собственную локальную копию блокчейна.
- Разумеется, высота локальных блокчейнов достаточно быстро выравнивается и становится такой же, как и у нашей ноды.
- Если получателем оказывается майнинговая нода, то убедившись в валидности нового блока, она заканчивает текущий цикл поиска доказательства выполнения работы и активирует новый.
Интересный факт: проверка единого nonce-кода занимает всего несколько миллисекунд, если он уже найден, но майнер, создавший блок, потратил много энергии на его поиск. Это связано с тем, что найти произвольные входные данные, которые заставят функцию SHA256 возвращать такое количество ведущих нулей, чрезвычайно сложно. И единственный метод нахождения "правильного" нонса - это пробовать множество предположений, пока одно из них случайно не окажется успешным.
Поскольку каждый новый блок включает в себя хэш предыдущего блока, добавив хеш предыдущего блока, вы не сможете легко реорганизовать блоки или продолжить перебор nonce, когда блок уже найден. Чем старше блок, тем больше уверенности в том, что он будет стоять именно так всю вечность, поскольку изменение одного элемента (например, одной транзакции) будет означать, что все доказательства работы всех последующих блоков придется переделывать, ведь изменение даже 1 бита повлечет полное изменение результирующего хеша.
Процесс майнинга поэтапно
Итак, обобщая все вышесказанное, опишем поэтапно процесс майнинга:
- Выбор подходящего номера версии и времени в текущей эпохе. Из сети получается хеш предыдущего блока (из последнего блока в самой длинной ветке блокчейна) и целевое значение хеша.
- Выбор неподтвержденных транзакций из мемпула для включения в блок-кандидат.
- Создание coinbase-транзакции.
- Вычисление корня Меркла из всех транзакций блока, включая coinbase-транзакцию.
- Конкатенация этих значений для создания сообщения блока.
- Выбор числа для nonce и добавление его к сообщению блока — завершение создания полного заголовка блока-кандидата.
- Выполнение SHA256-хеширования заголовка блока (дважды) и сравнение результата с целевым значением.
- Если хеш заголовка блока меньше или равен целевому значению, то блок валиден, и майнер транслирует его в сеть для подтверждения другими участниками. Затем он возвращается к шагу 1 и начинает майнинг следующего блока-кандидата.
- Если хеш заголовка блока не удовлетворяет целевому значению, то блок невалиден, и майнер возвращается к шагу 6, изменяя значение nonce и снова испытывая удачу.
Заключение
Изначально, эта статья была всего лишь введением к статье "Почему на пуле хешрейт меньше, чем в интерфейсе асика? Разбираемся!"
Пока это "введение" писалось, оно стало достаточно самостоятельным, чтобы выделить его в отдельную статью, которая объясняла бы обычным пользователям Биткоина что же все-таки такое, этот майнинг.
Но в 99.99% случаев Ваш асик будет работать через пул майнинга. Именно этот процесс и разбирается в следующей отдельной статье. Там Вы найдете ответы на вопросы:
Как пул принимает данные от асиков
Скорость, мощность хеширования асиков
Для чего пул устанавливает свою сложность для шар?
Как пул определяет сложность для асика
Какие данные пул передает на асик
Как пул оценивает хешрейт асика
Почему может меняться сложность пула в интерфейсе асика
Как пул считает хешрейт асика?
Может ли пул красть хешрейт?
Что влияет на хешрейт на пуле?
Типы шар при майнинге: Accepted, Rejected, Stale
Почему возникают Rejected и Stale шары?
Как сократить количество Rejected и Stale шар?
Что делать если не удается снизить уровень реджектов?
На какой пул перейти для теста реджетов?
Так что велкам в статью "Почему на пуле хешрейт меньше, чем в интерфейсе асика? Разбираемся!", там еще больше интересной информации о процессе майнинга BTC, подкрепленной скриншотами логов асика с моими комментариями.
А в телеграм-канале BTC Майнинг | Показатели | Статистика ежедневно публикуются ключевые данные по BTC-майнингу. Подписывайтесь и будьте в курсе динамики всех изменений!
Источники для написания статьи:
Понимание заголовков блоков в блокчейне Биткойна
What is the extraNonce?
Index of /bitcoin/blocks/
Лекция 6: Майнинг как основа консенсуса платформы Биткоин (Университет ИНТУИТ)
Bitcoin Mining Explained
Понимание заголовков блоков в блокчейне Биткойна
What is the extraNonce?
Index of /bitcoin/blocks/
Лекция 6: Майнинг как основа консенсуса платформы Биткоин (Университет ИНТУИТ)
Bitcoin Mining Explained
Если в данной статье были допущены критические ошибки или у Вас есть желание дополнить статью дополнительными материалами, пожалуйста, свяжитесь со мной по адресу hashrateindex@yandex.ru