class EthereumContractABI::Encoders::FunctionEncoder
Public Class Methods
new(function_inputs)
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 7 def initialize(function_inputs) @function_inputs = function_inputs end
Public Instance Methods
encode_dynamic_input(input_values)
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 11 def encode_dynamic_input(input_values) tail = encode_tail(input_values) tail_offsets = get_tail_offsets(input_values) head = @function_inputs.zip(input_values).map do |input, arg| if !input.type.is_dynamic input.encode_value(arg) else EthereumContractABI::Encoders::IntEncoder.encode(tail_offsets.shift) end end head.join('') + tail.join('') end
encode_static_input(input_values)
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 24 def encode_static_input(input_values) @function_inputs.zip(input_values).map do |input, arg| input.encode_value(arg) end.join('') end
Private Instance Methods
encode_tail(input_values)
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 45 def encode_tail(input_values) @function_inputs.zip(input_values).map do |input, arg| return unless input.type.is_dynamic input.encode_value(arg) end end
get_tail_offsets(input_values)
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 36 def get_tail_offsets(input_values) offset = head_length_in_bytes encode_tail(input_values).map do |item| item_offset = offset offset += item.bytesize item_offset end end
head_length_in_bytes()
click to toggle source
# File lib/ethereum-contract-abi/encoders/function_encoder.rb, line 32 def head_length_in_bytes @function_inputs.size * 32 end