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

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

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

コメントを残す

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

CAPTCHA


Ethereum(イーサリアム)
Ethereumの開発用ツールリストが公開されていた!

ALISのCTO石井さんがつぶやいてたんですが とてもありがたい #Ethereum 開発ツールの一 …

技術メモ
Counterpartyの環境構築が大変という話

暗号通貨の独自通貨を作ろうとするとEthereumが有名で簡単ですが、BitcoinでもCounte …

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

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