bcwallet.rb で ついにブロック同期の保存ができたか!?

技術メモ

いろいろ調べた結果、同期したブロックをファイルに保存しているところまではOKだが、一度中断したあとに、どこまでブロックがすすんでいたか読み出す処理にバグ?があるようだ。
もう少し検証は必要だけど

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

  def calc_last_hash
    # These hashes are genesis blocks' ones.
    last_hash = { timestamp: 0,
                   hash: [IS_TESTNET ?
                     '000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943' :
                     '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'].pack('H*').reverse }

    @data[:blocks].each do |hash, block|
      if block[:timestamp] > last_hash[:timestamp]
        last_hash = { timestamp: block[:timestamp], hash: hash }
      end
    end

      if block[:timestamp] > last_hash[:timestamp]
        last_hash = { timestamp: block[:timestamp], hash: hash }
      end

これを

      # if block[:timestamp] > last_hash[:timestamp]
        last_hash = { timestamp: block[:timestamp], hash: hash }
      # end

こうする。
どうも、timestampで判断してしまうと、ブロックの順番がくずれるみたいだ。

もう少し検証してOKそうであれば、PR投げてみる。

ただ、よくわかってないのは、どのブロックもbitcoinサーバーからブロック同期してるはずなんだけど、他のブロック(ようは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を使用して支払いを …