Sha256: dbe727357887c62f563131eaa382d6b992a0da96162afb06ae3df3b4f09b7743

Contents?: true

Size: 1.14 KB

Versions: 8

Compression:

Stored size: 1.14 KB

Contents

module Bitcoin
  module Message

    # merckleblock message
    # https://bitcoin.org/en/developer-reference#merkleblock
    class MerkleBlock < Base

      COMMAND = 'merkleblock'

      attr_accessor :header
      attr_accessor :tx_count
      attr_accessor :hashes
      attr_accessor :flags

      def initialize
        @hashes = []
      end

      def self.parse_from_payload(payload)
        m = new
        buf = StringIO.new(payload)
        m.header = Bitcoin::BlockHeader.parse_from_payload(buf.read(80))
        m.tx_count = buf.read(4).unpack('V').first
        hash_count = Bitcoin.unpack_var_int_from_io(buf)
        hash_count.times do
          m.hashes << buf.read(32).reverse.bth
        end
        flag_count = Bitcoin.unpack_var_int_from_io(buf)
        # A sequence of bits packed eight in a byte with the least significant bit first.
        m.flags = buf.read(flag_count).bth
        m
      end

      def to_payload
        header.to_payload << [tx_count].pack('V') << Bitcoin.pack_var_int(hashes.size) <<
            hashes.map{|h|h.htb.reverse}.join << Bitcoin.pack_var_int(flags.htb.bytesize) << flags.htb
      end

    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
bitcoinrb-0.1.7 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.6 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.5 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.4 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.3 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.2 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.1.1 lib/bitcoin/message/merkle_block.rb
bitcoinrb-0.0.1 lib/bitcoin/message/merkle_block.rb