module Nis::Util::Deserializer
Public Class Methods
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
# File lib/nis/util/deserializer.rb, line 152 def self.deserialize_a(ua) Nis::Util::Convert.hex2a(deserialize_hex(ua)) end
# 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
# File lib/nis/util/deserializer.rb, line 148 def self.deserialize_hex(ua) Nis::Util::Convert.ua2hex(ua) end
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
# File lib/nis/util/deserializer.rb, line 144 def self.deserialize_int(ua) Nis::Util::Convert.ua2hex(ua.reverse).to_i(16) end
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 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 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 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 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 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 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