class Tapyrus::Message::Version

bitcoin.org/en/developer-reference#version

Constants

COMMAND

Attributes

local_addr[RW]
nonce[RW]
relay[RW]
remote_addr[RW]
services[RW]
start_height[RW]
timestamp[RW]
user_agent[RW]
version[RW]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/tapyrus/message/version.rb, line 19
def initialize(opts = {})
  @version = Tapyrus.chain_params.protocol_version
  @services = DEFAULT_SERVICE_FLAGS
  @timestamp = Time.now.to_i
  @local_addr = NetworkAddr.local_addr
  @remote_addr = NetworkAddr.local_addr
  @nonce = SecureRandom.random_number(0xffffffffffffffff)
  @user_agent = Tapyrus::Message::USER_AGENT
  @start_height = 0
  opts.each { |k, v| send "#{k}=", v }
  @relay = opts[:relay] || false
end
parse_from_payload(payload) click to toggle source
# File lib/tapyrus/message/version.rb, line 32
def self.parse_from_payload(payload)
  version, services, timestamp, local_addr, remote_addr, nonce, rest = payload.unpack('VQQa26a26Qa*')
  v = new
  v.version = version
  v.services = services
  v.timestamp = timestamp
  v.local_addr = NetworkAddr.parse_from_payload(local_addr)
  v.remote_addr = NetworkAddr.parse_from_payload(remote_addr)
  v.nonce = nonce
  user_agent, rest = unpack_var_string(rest)
  start_height, rest = rest.unpack('Va*')
  v.user_agent = user_agent
  v.start_height = start_height
  v.relay = v.unpack_relay_field(rest).first
  v
end

Public Instance Methods

to_payload() click to toggle source
# File lib/tapyrus/message/version.rb, line 49
def to_payload
  [
    [version, services, timestamp].pack('VQQ'),
    local_addr.to_payload(true),
    remote_addr.to_payload(true),
    [nonce].pack('Q'),
    pack_var_string(user_agent),
    [start_height].pack('V'),
    pack_boolean(relay)
  ].join
end
unpack_relay_field(payload) click to toggle source
# File lib/tapyrus/message/version.rb, line 61
def unpack_relay_field(payload)
  (version >= 70_001 && payload) ? unpack_boolean(payload) : [true, nil]
end