module Nis::Util::Deserializer

Public Class Methods

deserialize_transaction(serialized) click to toggle source

Deserialize a transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 6
def self.deserialize_transaction(serialized)
  s = Nis::Util::Convert.hex2ua(serialized)
  common = s[0, 60]
  specific = s[60, s.size]
  type = deserialize_int(common[0, 4])
  method = case type
           when 0x0101 then method(:deserialize_transfer)
           when 0x0801 then method(:deserialize_importance_transfer)
           when 0x1001 then method(:deserialize_multisig_aggregate_modification)
           when 0x1002 then method(:deserialize_multisig_signature)
           when 0x1004 then method(:deserialize_multisig)
           when 0x2001 then method(:deserialize_provision_namespace)
           when 0x4001 then method(:deserialize_mosaic_definition_creation)
           when 0x4002 then method(:deserialize_mosaic_supply_change)
    else raise "Not implemented entity type: #{type}"
  end
  deserialize_common(common).merge(method.call(specific))
end

Private Class Methods

deserialize_a(ua) click to toggle source
# File lib/nis/util/deserializer.rb, line 152
def self.deserialize_a(ua)
  Nis::Util::Convert.hex2a(deserialize_hex(ua))
end
deserialize_common(s) click to toggle source
# File lib/nis/util/deserializer.rb, line 132
def self.deserialize_common(s)
  {
    type: deserialize_int(s[0, 4]),
    version: deserialize_int(s[4, 4]),
    timeStamp: deserialize_int(s[8, 4]),
    # s[12,4] # length of public key,
    signer: deserialize_hex(s[16, 32]),
    fee: deserialize_int(s[48, 8]),
    deadline: deserialize_int(s[56, 4])
  }
end
deserialize_hex(ua) click to toggle source
# File lib/nis/util/deserializer.rb, line 148
def self.deserialize_hex(ua)
  Nis::Util::Convert.ua2hex(ua)
end
deserialize_importance_transfer(s) click to toggle source

Deserialize a importance transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 51
def self.deserialize_importance_transfer(s)
  {
    mode: deserialize_int(s[0, 4]),
    remoteAccount: deserialize_hex(s[8, 32])
  }
end
deserialize_int(ua) click to toggle source
# File lib/nis/util/deserializer.rb, line 144
def self.deserialize_int(ua)
  Nis::Util::Convert.ua2hex(ua.reverse).to_i(16)
end
deserialize_mosaic_definition_creation(s) click to toggle source

Deserialize a mosaic definition creation transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 108
def self.deserialize_mosaic_definition_creation(s)
  raise 'Not yet implimented.'
  # TODO: deserializing
  tx = {}
  tx
end
deserialize_mosaic_supply_change(s) click to toggle source

Deserialize a mosaic supply change transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 118
def self.deserialize_mosaic_supply_change(s)
  tx = {}
  # s[0, 4] # Length of mosaic id structure
  ns_len = deserialize_int(s[4, 4])
  mo_len = deserialize_int(s[8 + ns_len, 4])
  tx[:mosaicId] = {
    namespaceId: deserialize_a(s[8, ns_len]),
    name: deserialize_a(s[8 + ns_len + mo_len, mo_len])
  }
  tx[:supplyType] = deserialize_int(s[8 + ns_len + 4 + mo_len, 4])
  tx[:delta] = deserialize_int(s[8 + ns_len + 4 + mo_len + 4, 8])
  tx
end
deserialize_multisig(s) click to toggle source

Deserialize a multisig transfer transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 81
def self.deserialize_multisig(s)
  raise 'Not yet implimented.'
  # TODO: deserializing
  tx = {}
  tx
end
deserialize_multisig_aggregate_modification(s) click to toggle source

Deserialize a multisig aggregate modification transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 61
def self.deserialize_multisig_aggregate_modification(s)
  raise 'Not yet implimented.'
  # TODO: deserializing
  tx = {}
  tx
end
deserialize_multisig_signature(s) click to toggle source

Deserialize a multisig signature transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 71
def self.deserialize_multisig_signature(s)
  {
    otherHash: { data: deserialize_hex(s[8, 32]) },
    otherAccount: deserialize_a(s[44, 40])
  }
end
deserialize_provision_namespace(s) click to toggle source

Deserialize a provision namespace transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 91
def self.deserialize_provision_namespace(s)
  tx = {}
  tx[:rentalFeeSink] = deserialize_a(s[4, 40])
  tx[:rentalFee] = deserialize_int(s[44, 8])
  newpart_len = deserialize_int(s[52, 4])
  tx[:newPart] = deserialize_a(s[56, newpart_len])
  parent_len = deserialize_int(s[56 + newpart_len, 4])
  parent = s[56 + newpart_len, parent_len]
  unless parent.all? { |val| val == 0xff }
    tx[:parent] = deserialize_a(parent)
  end
  tx
end
deserialize_transfer(s) click to toggle source

Deserialize a transfer transaction object @param [String] serialized @return [Hash]

# File lib/nis/util/deserializer.rb, line 30
def self.deserialize_transfer(s)
  tx = {}
  tx[:recipient] = deserialize_a(s[4, 40])
  tx[:amount] = deserialize_int(s[44, 8])
  tx[:message] = {}
  message_len = deserialize_int(s[52, 4])
  if message_len > 0
    # s[60, 4] # length of payload
    tx[:message] = {
      type: deserialize_int(s[56, 4]),
      payload: Nis::Util::Convert.hex_to_utf8(deserialize_hex(s[64, s.size]))
    }
  else
    tx[:message] = { type: 1, payload: '' }
  end
  tx
end