class EthereumContractABI::Encoders::BytesEncoder

Public Class Methods

encode(bytes_to_encode, num_bytes = nil) click to toggle source
# File lib/ethereum-contract-abi/encoders/bytes_encoder.rb, line 9
def self.encode(bytes_to_encode, num_bytes = nil)
  if bytes_to_encode.methods.include?(:start_with?) && bytes_to_encode.start_with?("0x")
    bytes_to_encode = Util.toHexByteString(bytes_to_encode.slice(2, bytes_to_encode.length))
  end

  unless num_bytes.nil?
    raise ArgumentError.new("Too many bytes to encode") unless bytes_to_encode.bytesize <= num_bytes
    return self.encode_bytes(bytes_to_encode)
  end

  num_bytes_encoded = IntEncoder.encode(bytes_to_encode.bytesize)
  num_bytes_encoded + self.encode_bytes(bytes_to_encode)
end

Private Class Methods

encode_bytes(bytes_to_encode) click to toggle source
# File lib/ethereum-contract-abi/encoders/bytes_encoder.rb, line 25
def self.encode_bytes(bytes_to_encode)
  final_length = (bytes_to_encode.bytesize / 32.to_f).ceil * 32
  bytes_to_encode + Constants::BYTE_ZERO * (final_length - bytes_to_encode.bytesize)
end