採掘成功してpreviousblockhashかわっても連続採掘できない? 〜 採掘15

技術メモ

前回の記事 でregtestモードで採掘したがpreviousblockhashが変わってもブロックヘッダー変わらないのか、採掘が成功しない

検証するブロックヘッダー自体が、変わるのかどうかを検証してみる。

採掘成功前の現状のブロックヘッダーは以下。

pdb実行して、https://github.com/vsergeev/ntgbtminer/blob/master/ntgbtminer.py#L348 の部分の変数出力

(Pdb) p block_template
{'merkleroot': 'a86ade99dbd02e449cc01c1f2672dad5f330d216b10c93aae44d4ccb6c01751a', u'mintime': 1492512431, u'height': 309, u'sizelimit': 1000000, u'longpollid': u'126399c6c2877eab09ac8959ccacffcd2db7af736f9e32968c627314cbea40a9311', u'capabilities': [u'proposal'], u'version': 805306371, u'mutable': [u'time', u'transactions', u'prevblock'], u'bits': u'207fffff', 'nonce': 0, u'vbavailable': {u'testdummy': 28, u'csv': 0, u'!segwit': 1}, u'noncerange': u'00000000ffffffff', u'transactions': [{'hash': 'a86ade99dbd02e449cc01c1f2672dad5f330d216b10c93aae44d4ccb6c01751a', 'data': '01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25546f646f726f6b69666972652048656c6c6f2066726f6d2076736572676565762101000000ffffffff01807c814a000000001976a914ce2c9e415f6f441d7d927228717bc98419b271c388ac00000000'}], u'rules': [], u'coinbasevalue': 1250000000, u'default_witness_commitment': u'6a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf9', u'coinbaseaux': {u'flags': u''}, u'previousblockhash': u'126399c6c2877eab09ac8959ccacffcd2db7af736f9e32968c627314cbea40a9', u'target': u'7fffff0000000000000000000000000000000000000000000000000000000000', u'vbrequired': 0, u'curtime': 1492575336, u'sigoplimit': 20000}

(Pdb) p block_header
'x03x00x000xa9@xeaxcbx14sbx8cx962x9eosxafxb7-xcdxffxacxccYx89xactxab~x87xc2xc6x99cx12x1aux01lxcbLMxe4xaax93x0cxb1x16xd20xf3xd5xdar&x1fx1cxc0x9cD.xd0xdbx99xdejxa8hxe4xf6Xxffxffx7f x00x00x00x00'

submitしたリクエスト
2017-04-19 04:16:48,435:INFO:{"params": ["03000030a940eacb1473628c96329e6f73afb72dcdffaccc5989ac09ab7e87c2c69963121a75016ccb4c4de4aa930cb116d230f3d5da72261f1cc09c442ed0db99de6aa868e4f658ffff7f20010000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25546f646f726f6b69666972652048656c6c6f2066726f6d2076736572676565762101000000ffffffff01807c814a000000001976a914ce2c9e415f6f441d7d927228717bc98419b271c388ac00000000"], "id": 3438421054, "method": "submitblock"}

で、2周目

(Pdb) p block_template
{'merkleroot': 'a86ade99dbd02e449cc01c1f2672dad5f330d216b10c93aae44d4ccb6c01751a', u'mintime': 1492512432, u'height': 310, u'sizelimit': 1000000, u'longpollid': u'622e237459bb7f875ae20b372e6194c290c94d43e6c7f35bf145f4cb815c5856312', u'capabilities': [u'proposal'], u'version': 805306371, u'mutable': [u'time', u'transactions', u'prevblock'], u'bits': u'207fffff', 'nonce': 0, u'vbavailable': {u'testdummy': 28, u'csv': 0, u'!segwit': 1}, u'noncerange': u'00000000ffffffff', u'transactions': [{'hash': 'a86ade99dbd02e449cc01c1f2672dad5f330d216b10c93aae44d4ccb6c01751a', 'data': '01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25546f646f726f6b69666972652048656c6c6f2066726f6d2076736572676565762101000000ffffffff01807c814a000000001976a914ce2c9e415f6f441d7d927228717bc98419b271c388ac00000000'}], u'rules': [], u'coinbasevalue': 1250000000, u'default_witness_commitment': u'6a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf9', u'coinbaseaux': {u'flags': u''}, u'previousblockhash': u'622e237459bb7f875ae20b372e6194c290c94d43e6c7f35bf145f4cb815c5856', u'target': u'7fffff0000000000000000000000000000000000000000000000000000000000', u'vbrequired': 0, u'curtime': 1492575416, u'sigoplimit': 20000}

(Pdb) p block_header
'x03x00x000VXx81xcbxf4Exf1[xf3xc7xe6CMxc9x90xc2x94a.7x0bxe2Zx87x7fxbbYt#.bx1aux01lxcbLMxe4xaax93x0cxb1x16xd20xf3xd5xdar&x1fx1cxc0x9cD.xd0xdbx99xdejxa8xb8xe4xf6Xxffxffx7f x00x00x00x00'

submitしたリクエスト
2017-04-19 04:19:29,500:INFO:{"params": ["0300003056585c81cbf445f15bf3c7e6434dc990c294612e370be25a877fbb5974232e621a75016ccb4c4de4aa930cb116d230f3d5da72261f1cc09c442ed0db99de6aa8b8e4f658ffff7f20010000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25546f646f726f6b69666972652048656c6c6f2066726f6d2076736572676565762101000000ffffffff01807c814a000000001976a914ce2c9e415f6f441d7d927228717bc98419b271c388ac00000000"], "id": 1271624522, "method": "submitblock"}
2017-04-19 04:19:29,516:INFO:{u'id': 1271624522, u'result': u'bad-txns-BIP30', u'error': None}

検証してみてわかったことは、ブロックヘッダーは変わっている。
submitしたリクエストも変わっている。

ただ、bad-txns-BIP30 が発生してしまっている。

ということは、一部のブロックヘッダーが変わっても採掘は成功せず、extranonceなどの他の一部が変わると採掘が成功することになる。
なんなんだ、この違い。

BIPs30の仕様をgoogle翻訳を駆使してみ理解してく。

気になる部分は以下の文章。

Blocks are not allowed to contain a transaction whose identifier matches that of an earlier, not-fully-spent transaction in the same chain.
ブロックには、同じチェーン内の以前に使用されていないトランザクションの識別子と一致する識別子のトランザクションを含めることはできません。

ということは、トランザクションの識別子を表す部分がいっしょのため、採掘が新たにできないと。

・extranonceを変更した場合は採掘成功するので、トランザクション識別子が変更されている。
・previousblockhashが変わっても採掘が成功しないので、トランザクション識別子が変更されていない。

では、トランザクション識別子が何であるか?

ntgbtminerソース上でいくと、coinbase_tx[‘data’] の部分かなぁと。

submitする文字列作成時に、coinbase_tx[‘data’] を入れてるため。これが変わらないと、まったく同じtransactionということになると。

なんで、ntgbtminerでは、ブロック採掘を一度したら 以下のメッセージ、もしくはaddressを変更すると連続で採掘し続けれる。

if __name__ == "__main__":
    standalone_miner(bin2hex("Hello from vsergeev!"), "15PKyTs3jJ3Nyf3i6R7D9tfGCY1ZbtqWdv")

これで1つすっきりした!

ん・・・まてよ、、、testnetやmainnet の時も、採掘ごとに”Hello from vsergeev!”を結局かえないんじゃいけないと思われるのだが、なぜ ntgbtminer はなぜ対応していないのかが、疑問が残るな。

製作者に問い合わせたら、答えてくれるかな・・・?

Sponsored Link
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …