getblocksのblock_locatorについて調べる

技術メモ

前回の続き

getblocksのblock_locatorを調べる。

getblocksはそもそも (ここから引用)

getblocksは、自分の所持していないブロック(とそれに関連するトランザクション)のinvを要求するメソッドである。 受信したブロック数が、相手のversionメッセージに書いてあった、相手の所持している最終ブロックの番号を超えたら、send_getblocksはtrueを返し、止まるようにする。

また、block_locatorは

block_locatorは自分の所持している最終ブロックのハッシュを指定する。 hash_stopは、ここまでで送信をストップする、というブロックのハッシュを指定する。(0を指定した場合は500個までinvしてくる)

ということなので、最終blockのhashをgetblocksでおくって、そのhashの続きを取得する事になりそうだ。

じゃぁ、これおくってるっぽいのになぜとまっているのか??

getblocksのblock_locatorで指定しているhashが正しく指定されてないんじゃないかなぁ。
っと、思ったが@last_hashは調べるとちゃんと更新されている。

getblocks をコマンド送信したあとに read_packetしようとして とまる。
これは、getblocks

getblocks -1 to end limit 500

これで、サーバー側がかえせなくて止まるんだよねぇ。なんで、-1 になるのか??

https://github.com/bcoin-org/bcoin/issues/129

This log is appearing because you're fully synced, and the first hash in the locator is the tip. Bitcoind doesn't have the next block.

見る限り、bitcoind側で求められたhashの次のブロックがさがしだせなさそう。
やはり block_locatorへの指定で @last_hash[:hash] が正しいhashを返せてないようだ。

ためしに、getblocksのblock_locatorにどんなときでも「genesis blocks」のhashを getblocksのblock_locatorに突っ込んだところ、途中でプログラムをきってdata_testnetが残っている上で何度もプログラム実行しても処理が進む。

やはり、getblocksでおくっている hash の続きが bitcoind側で確認できず処理を停止させてしまっている。
では、なんでもともと通信できていてhashを記録しているはずなのに、bitcoind側で把握できないのか?

getblocksの投げたblock_locatorを記録していき、停止したタイミングのhashを投げたら再開できるのだろうか?

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならコインチェックがおすすめです。

※アプリは指値売買ができず手数料が高いので、アプリをダウンロードするのではなくメール&パスワード登録へ!まずは5万円ほど入金して仮想通貨とブロックチェーンの世界を楽しんでください!

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

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

コメントを残す

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

CAPTCHA


miningpoolhub
miningpoolhubのAPIを使って自動スイッチングを試してみる in ethOS

* アイキャッチの男性は、Flicker上のライセンスフリーの画像ひっぱってきているだけで、本文とま …

NEM
[memo] NEMを送金しようとするとFAILURE_TIMESTAMP_TOO_FAR_IN_FUTUREが出る

Docker上のコンテナで、NEM-libraryを使ってmosaicの送金を試していたところ FA …

NEM
NEMのテストネットワークで独自通貨を試す

NEMアプリケーションを作る際にテストネットワークでのテスト非常に重要になってきます。 このため今回 …