'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.'

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)
