bcwallet.rb でブロック同期をファイルに保存している仕組み

技術メモ

bcwallet.rbではブロックチェーンの同期でファイル保存している箇所は詳しく見ていく。

ブロック同期を保存している実装

@data という ruby オブジェクトを @data_file_name ファイルに Marshal.dump を使って保存している。

class Blockchain
 :
 :
  def save_data
    open(@data_file_name, 'wb') do |file|
      Marshal.dump @data, file
    end
  end

@data はというと

  def init_data(keys_hash)
    @data = { blocks: {}, txs: {}, last_height: 0, keys_hash: keys_hash }
  end

こんな感じ。blocksだったりhashだったりここに保存されている。
そして、実際にblocksを保存しているのは、

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

  def dispatch_merkleblock(message)
    @received_data += 1

    @blockchain.blocks[message[:hash]] = message

    # Described in Blockchain#is_young_block.
    # It supposes that blocks are sent in its height order. Don't try this in production code.
    unless @blockchain.is_young_block(message[:hash])
      @last_hash = { timestamp: message[:timestamp], hash: message[:hash] }
    end

    @requested_data  @blockchain.last_height
      @blockchain.save_data
      return true
    end

2. send_transaction

transactionをこちらから投げる場合。最初のブロック同期時にはsend_transactionは投げなさそう。
transactionを作成していないのと、getdataコマンド受信していない限り

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

  def send_transaction
    @message.write(@socket, @created_transaction)

    @socket.flush

    sleep 30

    @blockchain.txs[@created_transaction[:hash]] = @created_transaction

    @blockchain.save_data
  end

3. dispatch_version 時にファイル保存

handshake の最初にversion情報をなげるが、その際にファイル保存。
https://github.com/peryaudo/bcwallet/blob/master/bcwallet.rb#L1128

  def dispatch_version(message)
# This is handshake process:

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

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

コメントを残す

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

CAPTCHA


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

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

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

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

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

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