Class: ArkEcosystem::Crypto::Deserialiser

Inherits:
Object
  • Object
show all
Defined in:
lib/arkecosystem/crypto/deserialiser.rb

Overview

The base deserialiser for transactions.

Instance Method Summary collapse

Constructor Details

#initialize(serialised) ⇒ Deserialiser

Returns a new instance of Deserialiser.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/arkecosystem/crypto/deserialiser.rb', line 7

def initialize(serialised)
  @serialised = serialised
  @binary = BTC::Data.data_from_hex(@serialised)

  @handlers = %w[
    Transfer
    SecondSignatureRegistration
    DelegateRegistration
    Vote
    MultiSignatureRegistration
    Ipfs
    TimelockTransfer
    MultiPayment
    DelegateResignation
  ]
end

Instance Method Details

#deserialiseObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/arkecosystem/crypto/deserialiser.rb', line 24

def deserialise
  transaction = {}
  transaction[:version] = @binary.unpack('C2').last
  transaction[:network] = @binary.unpack('C3').last
  transaction[:type] = @binary.unpack('C4').last
  transaction[:timestamp] = @binary.unpack('V2').last
  transaction[:sender_public_key] = @binary.unpack('H16H66').last
  transaction[:fee] = @binary.unpack('C41Q<').last

  vendor_field_length = @binary.unpack('C49C1').last

  if vendor_field_length > 0
    vendor_field_offset = (41 + 8 + 1) * 2
    vendor_field_take = vendor_field_length * 2

    transaction[:vendor_field_hex] = @binary.unpack("H#{vendor_field_offset}H#{vendor_field_take}").last
  end

  asset_offset = (41 + 8 + 1) * 2 + vendor_field_length * 2

  transaction = handle_type(asset_offset, transaction)

  transaction[:amount] = 0 unless transaction[:amount]

  if transaction[:version] == 1 || transaction[:version].empty?
    transaction = handle_version_one(transaction)
  end

  transaction
end