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 |
# 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.concat Transaction::MAGIC bytes.push(0, @tx.version) bytes.concat [@tx.asset].pack('H*').bytes bytes.concat encode_inputs bytes.concat encode_outputs bytes.concat encode_references if @tx.version >= Transaction::REFERENCES_TX_VERSION extra_bytes = @tx.extra.bytes raise InvalidTransactionFormatError, 'extra is too long' if extra_bytes.size > Transaction::MAX_EXTRA_SIZE bytes.concat MixinBot.utils.encode_uint32 extra_bytes.size bytes.concat extra_bytes bytes.concat(@tx.aggregated.nil? ? encode_signatures : encode_aggregated_signature) packed = bytes.pack('C*') @tx.hash = SHA3::Digest::SHA3_256.hexdigest packed @tx.hex = packed.unpack1('H*') @tx end |