class BitcoinNode::Protocol::Message
Attributes
command[R]
Public Class Methods
new(payload)
click to toggle source
# File lib/bitcoin_node/protocol.rb, line 50 def initialize(payload) raise ArgumentError, 'Expected Payload type' unless Payload === payload @payload = payload @command = payload.name end
validate(raw_message)
click to toggle source
# File lib/bitcoin_node/protocol.rb, line 68 def self.validate(raw_message) network, command, expected_length, checksum = Header.unpack(raw_message) raw_payload = raw_message[Header::SIZE...(Header::SIZE + expected_length)] if (actual = raw_payload.bytesize) < expected_length raise BN::P::IncompleteMessageError.new("Incomplete message (missing #{expected_length - actual} bytes)") elsif checksum != BN::Protocol.digest(raw_payload)[0...4] raise BN::P::InvalidChecksumError.new("Invalid checksum on command #{command}") else [raw_payload, command] end end
Public Instance Methods
bytesize()
click to toggle source
# File lib/bitcoin_node/protocol.rb, line 64 def bytesize raw.bytesize end
raw()
click to toggle source
# File lib/bitcoin_node/protocol.rb, line 56 def raw @raw ||= begin [Header.build_from(@payload).raw, @payload.raw] .join .force_encoding('binary') end end