Class: MixinBot::Transaction::Encoder
- Inherits:
-
Object
- Object
- MixinBot::Transaction::Encoder
- Defined in:
- lib/mixin_bot/transaction/encoder.rb
Overview
Builds the binary encoding for a MixinBot::Transaction instance.
Instance Method Summary collapse
- #encode ⇒ Object
-
#initialize(transaction) ⇒ Encoder
constructor
A new instance of Encoder.
Constructor Details
#initialize(transaction) ⇒ Encoder
Returns a new instance of Encoder.
9 10 11 |
# File 'lib/mixin_bot/transaction/encoder.rb', line 9 def initialize(transaction) @tx = transaction end |
Instance Method Details
#encode ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/mixin_bot/transaction/encoder.rb', line 13 def encode raise InvalidTransactionFormatError, 'asset is required' if @tx.asset.blank? raise InvalidTransactionFormatError, 'inputs is required' if @tx.inputs.blank? raise InvalidTransactionFormatError, 'outputs is required' if @tx.outputs.blank? bytes = [] bytes += Transaction::MAGIC bytes += [0, @tx.version] bytes += [@tx.asset].pack('H*').bytes bytes += encode_inputs bytes += encode_outputs bytes += encode_references if @tx.version >= Transaction::REFERENCES_TX_VERSION && @tx.references.present? extra_bytes = @tx.extra.bytes raise InvalidTransactionFormatError, 'extra is too long' if extra_bytes.size > Transaction::MAX_EXTRA_SIZE bytes += MixinBot.utils.encode_uint32 extra_bytes.size bytes += extra_bytes bytes += if @tx.aggregated.nil? encode_signatures else encode_aggregated_signature end @tx.hash = SHA3::Digest::SHA256.hexdigest bytes.pack('C*') @tx.hex = bytes.pack('C*').unpack1('H*') @tx end |