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)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

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

コメントを残す

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

CAPTCHA


Ethereum(イーサリアム)
Error: The contract code couldn’t be stored, please check your gas amount.

ALISのICOソースのzeppelinバージョンを1.2から1.8にあげようとしたときにはまったエ …

Dapps
日本の都道府県を所有できるDApps & ERC721 のサンプルを公開してみました

最近、Ethereum上でカードなどを所有できるdAppsが流行っているので、試しに日本の都道府県を …

Ethereum(イーサリアム)
TX doesn’t have the correct nonce – Metamask

EthereumのdAppsを作ろうとしていてはまったのでメモ。 Metamaskを使用して支払いを …