class Bitcoin::Message::Base
Base
message class
Public Class Methods
from_pkt(message)
click to toggle source
Decode message data to message object. @param [String] message with binary format. @return [Bitcoin::Message::XXX] An instance of a class that inherits Bitcoin::Message::Base
@raise [ArgumentError] Occurs for data that cannot be decoded.
# File lib/bitcoin/message/base.rb, line 30 def self.from_pkt(message) buf = StringIO.new(message) magic = buf.read(4) raise ArgumentError, 'Invalid magic.' unless magic == Bitcoin.chain_params.magic_head.htb command = buf.read(12).delete("\x00") length = buf.read(4).unpack1('V') checksum = buf.read(4) payload = buf.read(length) raise ArgumentError, 'Checksum do not match.' unless checksum == Bitcoin.double_sha256(payload)[0...4] Bitcoin::Message.decode(command, payload&.bth) end
Public Instance Methods
to_payload()
click to toggle source
abstract method
# File lib/bitcoin/message/base.rb, line 22 def to_payload raise 'to_payload must be implemented in a child class.' end
to_pkt()
click to toggle source
generate message header (binary format) bitcoin.org/en/developer-reference#message-headers
# File lib/bitcoin/message/base.rb, line 12 def to_pkt payload = to_payload magic = Bitcoin.chain_params.magic_head.htb command_name = self.class.const_get(:COMMAND, false).ljust(12, "\x00") payload_size = [payload.bytesize].pack('V') checksum = Bitcoin.double_sha256(payload)[0...4] magic << command_name << payload_size << checksum << payload end