class ArkEcosystem::Crypto::Transactions::Serializer
The base serializer for transactions.
Public Class Methods
new(transaction)
click to toggle source
# File lib/arkecosystem/crypto/transactions/serializer.rb, line 6 def initialize(transaction) @transaction = transaction @handlers = %w[ Transfer SecondSignatureRegistration DelegateRegistration Vote MultiSignatureRegistration Ipfs TimelockTransfer MultiPayment DelegateResignation ] end
Public Instance Methods
serialize()
click to toggle source
# File lib/arkecosystem/crypto/transactions/serializer.rb, line 22 def serialize bytes = '' bytes << [0xff].pack('C') bytes << [@transaction[:version] || 0x01].pack('C') bytes << [@transaction[:network] || ArkEcosystem::Crypto::Configuration::Network.get.version].pack('C') bytes << [@transaction[:type]].pack('C') bytes << [@transaction[:timestamp]].pack('V') bytes << [@transaction[:senderPublicKey]].pack('H*') bytes << [@transaction[:fee]].pack('Q<') bytes = handle_vendor_field(bytes) bytes = handle_type(bytes) bytes = handle_signatures(bytes) BTC::Data.hex_from_data(bytes) end
Private Instance Methods
handle_signatures(bytes)
click to toggle source
# File lib/arkecosystem/crypto/transactions/serializer.rb, line 65 def handle_signatures(bytes) if @transaction[:signature] bytes << BTC::Data.data_from_hex(@transaction[:signature]) end if @transaction[:secondSignature] bytes << BTC::Data.data_from_hex(@transaction[:secondSignature]) elsif @transaction[:signSignature] bytes << BTC::Data.data_from_hex(@transaction[:signSignature]) end if @transaction[:signatures] bytes << [0xff].pack('C') bytes << BTC::Data.data_from_hex(@transaction[:signatures].join('')) end bytes end
handle_type(bytes)
click to toggle source
# File lib/arkecosystem/crypto/transactions/serializer.rb, line 41 def handle_type(bytes) serializer = @handlers[@transaction[:type]] serializer = Object.const_get("ArkEcosystem::Crypto::Transactions::Serializers::#{serializer}") serializer.new(@transaction, bytes).serialize end
handle_vendor_field(bytes)
click to toggle source
# File lib/arkecosystem/crypto/transactions/serializer.rb, line 47 def handle_vendor_field(bytes) if @transaction[:vendorField] vendor_field_length = @transaction[:vendorField].length bytes << [vendor_field_length].pack('C') bytes << @transaction[:vendorField] elsif @transaction[:vendorFieldHex] vendor_field_hex_length = @transaction[:vendorFieldHex].length bytes << [vendor_field_hex_length / 2].pack('C') bytes << @transaction[:vendorFieldHex] else bytes << [0x00].pack('C') end bytes end