code: def encode_function_call(self, function_name, args):
          
          if function_name not in self.function_data:
              raise ValueError('Unkown function {}'.format(function_name))
  
          description = self.function_data[function_name]
  
          function_selector = zpad(encode_int(description['prefix']), 4)
          arguments = encode_abi(description['encode_types'], args)
  
          return function_selector + arguments
docs: Return the encoded function call.
  
          Args:
              function_name (str): One of the existing functions described in the
                  contract interface.
              args (List[object]): The function arguments that wll be encoded and
                  used in the contract execution in the vm.
  
          Return:
              bin: The encoded function name and arguments so that it can be used
                   with the evm to execute a funcion call, the binary string follows
                   the Ethereum Contract ABI.