class ArkEcosystem::Crypto::Transactions::Deserializer
The base deserializer for transactions.
Public Class Methods
new(serialized)
click to toggle source
# File lib/arkecosystem/crypto/transactions/deserializer.rb, line 8 def initialize(serialized) @serialized = serialized @binary = BTC::Data.data_from_hex(@serialized) @handlers = %w[ Transfer SecondSignatureRegistration DelegateRegistration Vote MultiSignatureRegistration Ipfs TimelockTransfer MultiPayment DelegateResignation ] end
Public Instance Methods
deserialize()
click to toggle source
# File lib/arkecosystem/crypto/transactions/deserializer.rb, line 25 def deserialize transaction = ArkEcosystem::Crypto::Transactions::Transaction.new() 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
Private Instance Methods
handle_type(asset_offset, transaction)
click to toggle source
# File lib/arkecosystem/crypto/transactions/deserializer.rb, line 58 def handle_type(asset_offset, transaction) deserializer = @handlers[transaction.type] deserializer = Object.const_get("ArkEcosystem::Crypto::Transactions::Deserializers::#{deserializer}") deserializer.new(@serialized, @binary, asset_offset, transaction).deserialize end
handle_version_one(transaction)
click to toggle source
# File lib/arkecosystem/crypto/transactions/deserializer.rb, line 64 def handle_version_one(transaction) if transaction.second_signature transaction.sign_signature = transaction.second_signature end if transaction.type == ArkEcosystem::Crypto::Enums::Types::VOTE transaction.recipient_id = ArkEcosystem::Crypto::Identities::Address.from_public_key(transaction.sender_public_key, transaction.network) end if transaction.type == ArkEcosystem::Crypto::Enums::Types::MULTI_SIGNATURE_REGISTRATION transaction.asset[:multisignature][:keysgroup] = transaction.asset[:multisignature][:keysgroup].map! { |key| '+' + key } end if transaction.vendor_field_hex transaction.vendor_field = BTC::Data.data_from_hex(transaction.vendor_field_hex) end unless transaction.id transaction.id = transaction.get_id end if transaction.type == ArkEcosystem::Crypto::Enums::Types::SECOND_SIGNATURE_REGISTRATION transaction.recipient_id = ArkEcosystem::Crypto::Identities::Address.from_public_key(transaction.sender_public_key, transaction.network) end if transaction.type == ArkEcosystem::Crypto::Enums::Types::MULTI_SIGNATURE_REGISTRATION transaction.recipient_id = ArkEcosystem::Crypto::Identities::Address::from_public_key(transaction.sender_public_key, transaction.network); end transaction end