お困りですか?

ブロックチェーンの基礎知識 - マイニングジョブ

ジョブがプールからマイナーに送信されることを見たことがあるかもしれません。あるいは、マイナーコンソール内でマイニングジョブが受理されたことを見たことがあるかもしれません。今回は、マイニングジョブとは何かについて説明します。

マイニングジョブとは?

端的に言ってマイニングジョブは、プールからマイナーに送信されるメッセージです。このメッセージには、プールのターゲット難易度、extranonce1、extranonce2、ブロックに含まれるその他のブロックチェーンの情報が含まれています。

マイニングプールに関するこの記事を読むと、プールはすべてのワーカーにジョブを分散させるために、どの数字を当てればよいかをマイナーに知らせる必要があることがわかります。

プールとワーカーは常に相互通信を行います。プールは解決すべきジョブデータを送信し、マイナーやワーカーは回答を送り返します。マイニングジョブは、プールとワーカーが相互に送信しあうメッセージなのです。

マイナーがプールから提供されたデータに対して答えを見つけた場合、マイナーはマイニングジョブの回答を送り返します。これがアクセプトシェアになります。

マイニングジョブにはどのようなデータが含まれるか

これは、ブロックチェーンに依存します。コインやアルゴリズムによって使用するメッセージは異なります。以下では、マイニングジョブに含まれるデータをご紹介します。

  • Job ID:ジョブのIDです。このジョブIDから生成されたシェア (回答) を送信する際にマイナー (ワーカー) が使用します。
  • Previous Block Hash:前のブロックのハッシュ値。
  • Coinbase1:マイナーはトランザクションデータ内のこのセクションの後に、ExtraNonce1とExtraNonce2を挿入します。
  • Coinbase2:マイナーはこのデータを、トランザクションデータの先頭と2つのExtraNonce値の後に追加します。
  • Merkle_Branch:coinbaseトランザクションはマークルブランチに対してハッシュ化され、最終的なマークルルートが構築されます。
  • Version:ビットコインブロックバージョン。
  • nBits:エンコードされたネットワーク難易度。
  • nTime:現在時刻。
  • Clean_Job:これがtrueの場合、マイナーはジョブを止めてプールから受信した新しいジョブをスタートします。

プールからワーカーに送信されるマイニングジョブの例

マイナーとプールの間のやり取りは、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"]}

マイニングジョブの回答内容の概要は以下の通りです。

{"id":15866,"method":"mining.submit","params":["username","JobID","Extranonce2","nTime","nonce"]}

ご覧の通り、両者のジョブIDは同じです。

執筆:
Marko Tarman
MarkoはNiceHashのマイニングマネージャーであり、コンテンツ・クリエーターです。彼は最初のASICがリリースされる前の2012年にマイニングを始め、GPUでBTC・LTC・VTCからDOGEまでもマイニングするようになりました。彼の座右の銘は「問題が99個あったとしても、ライザーの不具合がすべての原因だ」です。