Детали майнинга биткойновЧто делает биткойн-майнер?На этой веб-странице представлена дополнительная информация о том, что делает биткойн-майнер.
Упрощенная версия
здесьЧто такое хеширование биткойн-майнеров?Биткойн-майнер хеширует заголовок блока, чтобы определить его хеш-значение с надеждой найти биткойн-блок.
Структура заголовка блока представляет собой 80-байтовый набор двоичных данных, определяемый следующим образом:
Версия - 4 байта
Предыдущий хэш блока - 32 байта
Корень Меркла - 32 байта
Время блока - 4 байта
Биты - 4 байта
Хэш Nonce - 4 байта
*Hash Nonce - одноразовое случайное число используемое в криптографии
Из вышеперечисленного мы можем смело менять в майнере 2 вещи: Корень Меркла и Хэш Nonce.
Версия изменена для открытого Асик-Ускорителя.
Время блока не следует изменять, поскольку оно не является необходимым и имеет ограничения на его ценность.
Время блока - это не время, когда блок был найден, обычно это время, когда работа была отправлена майнеру.
Разумеется, предыдущий хэш блока и биты не должны изменяться, поскольку они должны соответствовать текущей сети Биткойн.
Нормальное хеширование - это настройка всего, кроме Хэш Nonce, а затем подсчитать Хэш Nonce от 0 до 2^32-1 и хешировать каждый.
Хеширование полного диапазона Nonce от 0 до 232-1 также называется 1-ой сложностью.
С помощью протокола(stratum) мы можем изменить корень Меркла, чтобы сгенерировать другой заголовок блока для хеширования диапазона Nonce.
Корень Меркла - это хэш-дерево транзакций, которые мы включаем в блок, однако есть одна транзакция, которую мы можем изменить с помощью протокола (stratum),
и это транзакция coinbase(монетной базы) - или транзакция, которая платит майнеру.
В этой транзакции нам нужно убедиться, что:
- 1. Это действительная транзакция - что на самом деле довольно случайная транзакци для coinbase из-за того, что "sig"(подпись) может содержать почти все,
если он начинается с высоты блока. - 2. Выплата производится на ожидаемый адрес, на который мы хотим получить сгенерированные биткойны.
- 3. Выплаченная сумма верна: она соответствует текущему вознаграждению за блок + общей комиссии по всем транзакциям.
Итак, для протокола (stratum) мы помещаем кучу других «одноразовых номеров»(Nonce) в «sig»(Подпись), которая включает уникальный номер для каждого майнера,
и запускаем остальные от 0 до определенного предела, чтобы каждый раз генерировать новую транзакцию монетной базы, которая будет генерировать уникальный
корень Меркла, который будет помещен в заголовок блока и будет хеширован по всему диапазону Nonce.
С уникальным номером для каждого майнера и сам майнер, следует правилам протокола для создания транзакций для базы монет,
майнер может продолжать генерировать большой объем работы, которая, как ожидается, не закончится до того, как пул отправит ему новую работу.
Майнеру также не нужно тратить время на обработку информации о сети биткойнов или проверку транзакций, что является задачей пула и требует быстрого глобального
доступа в Интернет, очень быстрого процессора и большого количества оперативной памяти.
Ему нужен только сетевой доступ к пулу или даже просто локальный прокси-сервер для майнинга, и он тратит все свои усилия на обработку работы и
хеширование одноразовых номеров.
Каждый раз, когда майнер находит значение хеша, которое больше или равно Сложности, указанной пулом,
майнер отправляет одноразовый номер и одноразовый идентификатор «sig» обратно в пул.Пул хеширует эти одноразовые номера с данными, которые он отправил майнеру, и, таким образом, проверяет их действительность и, таким образом,
награждает майнер Сложностью работы, отправленной майнеру.
Майнер не может изменить адрес выплаты, чтобы «украсть» блок.Причина в том, что пул не получит действительный хэш одноразовых значений отправленных обратно, если база монет, которую использовал майнер,
не соответствует информации базы монет для работы, которую он дал, поэтому доля будет недействительной, и майнер не получит вознаграждения. Просто 🙂
Хэширование БиткоинаВ отличие от простого примера броска кубиков на другой странице, кубик Биткойн имеет 2^256 сторон или ~ 1,158x10^77.
Также существует более одного действительного решения.
Любая «сторона кубика» с достаточным количеством нулей на лицевой стороне и меньшим, чем определенное значение, является блоком биткойнов.
Из этого числа сторон ~ 1,158x10^77 текущая сложность сети (Nd) определяет, что мы нашли блок.
Текущая сложность сети - «0x170c2a48», которая называется «Биты» и представляет собой 4 байта данных, хешируемых майнером. (см. выше)
«0x17» = 23 и 32-23 = 9 байтов начальных нулей, то есть 9 раз «00».
Остальное - «0c2a48». Итак, эти 2 числа означают, что любая доля с хеш-значением:
H = 0x0000000000000000000c2a480000000000000000000000000000000000000000 или меньше в настоящее время будет блоком.
Если вы разделите ~ 1,158x10^77 на H и снова разделите его на 0x100000000 (2^32), вы получите номер сложности сети:
Nd = 23,137,439,666,472,1 Это означает, что каждый 2^32 раз, когда вы бросаете биткойн-кости, то есть хешируете полный диапазон одноразовых номеров,
у вас есть шанс найти блок 1 из 23
... и причина, по которой мы снова делим на 0x100000000, заключается в том, что число сложности сети 1 представляет 2^32 хэша
_______________________________________________________________________________
__________________________________________________________________
Ссылка на источник:
https://kano.is/index.php?k=minedet