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
コメントはまだありません

コメントを残す

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

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …