bcwallet.rb で見ていくbitcoinのhandshake

技術メモ

前回も ruby bcwallet.rb balance が終わらず四苦八苦していたが、今回も再度挑戦。

|=============================================_____| 1020596 / 1123849 -

うぉー、またもうちょっとというところでPG止めなければいけない、、、
同期に1時間かかるので、なぜ時間かかるか調べていたところ

bcwallet.rbは

何故bcwallet.rbは他のSPVクライアントより遅いのか 上のbcwallet.rbを実際に試して頂いた方で、MultiBitなどの他のSPVのBitcoinクライアントを使ったことのある方は、どうしてbcwallet.rbの初回起動時の同期は遅いのかと思われた方も居るかもしれない。

これは、他のSPVクライアントは、アドレスの作成日時・作成時点での最終ブロックなどの情報を用いて、それより前のブロックのダウンロードを省いているからである。bcwallet.rbは教育用であり、このような複雑な処理を省いて単純化をはかる代わり、はじめに全てのブロックをダウンロードしている。

とのこと。最終ブロックのダウンロードだけするように改造できるということか。
ただ、やり方が現時点ではさっぱりわからず、、、

ということで、同期をとっている時にどのブロックまで取得しているか?を計測できるか調べてみる。

handshakeコマンドのやりとり

ログを仕込んで、socketで write, read しているところのやりとりみると

# ruby bcwallet.rb balance
"write = version"
"read  = version"
"write = verack"
"read  = verack"
"read  = alert"
"read  = ping"
"write = pong"
"write = filterload"
"write = mempool"
"write = getdata"
"write = getblocks"
"read  = merkleblock"
"write = getblocks"
"read  = inv"
"write = getdata"
"read  = inv"
"write = getdata"
"read  = merkleblock"
"read  = merkleblock"
  :
  :

となっている。
上から順に見ていくと

"write = version"
"read  = version"
"write = verack"
"read  = verack"

http://bitcoinbook-builds.mkvd.net/translations/ja/chapter-6.html
Mastering Bitcoinの第6章の図を見るとまず、ネットワーク開始するときに version, verackのやりとりをやりあう。

その次は alert だが、これは前回はまったところで、bcwallet.rb がalertに対応していなくて落ちた。

"read  = alert"

これは一旦スルー。

その次。

"read  = ping"
"write = pong"

これもhandshakeの一環。ping, pong この辺り参照。

https://github.com/peryaudo/bcwallet/blob/master/bcwallet.rb#L1119

にも書いてあるけど

    # Local -- version -> Remote
# Local Remote
# Local

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