Основы блокчейна — задание майнинга
Возможно, вы слышали, что из пула майнеру отправляются задания. Или, возможно, вы видели в консольном окне майнера, что задание было принято. В этой статье мы объясним, что такое задание майнинга.
Что представляет собой задание майнинга?
Вкратце, задание майнинга — это сообщение, которое отправляется из пула майнеру. Это сообщение содержит информацию о целевой сложности пула, extranonce1, extranonce2 и другие особенности блокчейна, включенные в блок.
Если вы прочтете эту статью о майнинге в пуле, вы узнаете, что пул должен сообщать майнерам, какие числа нужно угадывать, чтобы распределить работу между всеми воркерами.
Пул и воркеры всегда будут коммуницировать друг с другом. Пул отправит данные задания, которое необходимо решить, а майнер или воркер отправит обратно решение. Задание майнинга — это сообщение, которое пул и воркер отправляют друг другу.
Если майнер находит решение для данных, предоставленных пулом, то майнер отправляет обратно решение задания майнинга, также известное как принятая шара.
Какие данные включены в задание майнинга?
Это зависит от блокчейна. Разные криптовалюты и алгоритмы используют разные сообщения. Ниже вы найдете данные, которые включены в задание майнинга:
- ID задания: идентификатор (ID) задания. Используется майнерами (воркерами) при отправке шары (решения), сгенерированного из этого ID задания.
- Хэш предыдущего блока: выход хэша предыдущего блока.
- Coinbase1: майнер вносит ExtraNonce1 и ExtraNonce2 после этого раздела данных транзакции.
- Coinbase2: майнер добавляет его после первой части данных транзакции и двух значений ExtraNonce.
- Merkle_Branch: транзакция coinbase хэшируется по ветвям дерева Меркла для создания конечного корня дерева Меркла.
- Версия: версия блока Биткоина.
- nBits: закодированная сложность сети.
- nTime: текущее время.
- Clean_Job: когда оно верно, майнер перестанет работать над предыдущими заданиями и начнет работать над новым заданием, полученным из пула.
Пример задания майнинга, отправленного из пула воркеру
Данные, передаваемые между майнером и пулом, кодируются как сообщения JSON-RPC.
"id":null,"method":"mining.notify","params":["0000000053c411aa","b87d45785c4cc00150867971b7233c4446dfb4bd0003cb690000000000000000","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5103539f0b082f5669614254432f2cfabe6d6d138e19afd289f4e1bcc69389a865ede0bd9d642189026485bd4bde3e062686b3100000000000000012734e8daaaa0f6280bf91","ffffffff03e44e2826000000001976a914536ffa992491508dca0354e52f32a3a7a679a53a88ac00000000000000002b6a2952534b424c4f434b3a51115f17d525a3952237430d78f5f4b2f4bc63148fd82f364f77c5260048d97e0000000000000000266a24aa21a9edfcfe2c5bd8a7df958c20d29cd5457ef6565a30ae10bf137602d4b838288908a500000000",["93cbc2abc1128cc9569a4ecbba4188b25ce7c9c8b5e5c9a2810cf0973d82f717","322139a87a09d3037d340f393a1d89ad34b163a07a9a7012fd58d92ca5e038c5","34cfc928a8bb978ab345d66c4940f566b5a36a1b6f7f5c2a617f68acc4f0a1e8","e4cc101b5df77d48d7abeb9a52d1a4bd8768a5cab4b568f804849d793eb8c432","ef14da7b3a470fdd3074633f711a0dcf003c91f4b6b02074d64e51878aafbd37","5ddd66513381c05cb479bfd062daa043295ee608f7bb22082f7c9c2d7f0aac40","bfc4e8f1e80ae3697bccfea631520e2907c7ad9ae5f5e3385aa4c8472ad39624","e6edd6c37b6924f4d5ab9350b33d5c7912d6df8a77be4d2d432d91134c0e83da","7aac970301559306792b9d017e54012ac3b1711c10d2c147fb9cbc32d1f1c63a","40329f69e3152d4537fa6e84e62e2f0830a18e3089455a78d58a54efd9479005","9a9f5af30e3bbc67e282fda897531337ab7d87e1da95d79f4831e8867b888c92","415bb76a0d8183657e0a5ac2bab8676e6ffa27ee3b2565ba1769af7503e9efad"],"20000000","1707a429","6364e9cf",false]}
Приведенное выше сообщение кажется непонятным, поэтому приводим более простой его формат:
"id":null,"method":"mining.notify","params":["JobID","PreviousBlockHash","Coinbase1","Coinbase2",[MerkleBranch],"Version","nBits","nTime",false]}
Пример решения задания майнинга, отправленного воркером в пул
{"id":15866,"method":"mining.submit","params":["3HJ4xQWjAsKuTwL1QBg4b5875hNcYRrtAr.workerName","0000000053c411aa","0446000000","6364e9cf","75a22825"]}
Объяснение mining.submit:
{"id":15866,"method":"mining.submit","params":["username","JobID","Extranonce2","nTime","nonce"]}
Как можно видеть, ID в обоих заданиях одинаков.