示例#1
0
def mk_full_signature(code, *args, **kwargs):
    abi = parser.mk_full_signature(parser.parse(code))
    # Add gas estimates for each function to ABI
    gas_estimates = gas_estimate(code)
    for idx, func in enumerate(abi):
        func_name = func['name'].split('(')[0]
        # Skip __init__, has no estimate
        if func_name in gas_estimates and func_name != '__init__':
            abi[idx]['gas'] = gas_estimates[func_name]
    return abi
示例#2
0
def extract_sigs(sig_code):
    if sig_code['type'] == 'vyper':
        return parser.mk_full_signature(parser.parse_to_ast(sig_code['code']),
                                        sig_formatter=lambda x, y: x)
    elif sig_code['type'] == 'json':
        return mk_full_signature_from_json(sig_code['code'])
    else:
        raise Exception(
            ("Unknown interface signature type '{}' supplied. "
             "'vyper' & 'json' are supported").format(sig_code['type']))
示例#3
0
def mk_full_signature(code, *args, **kwargs):
    abi = parser.mk_full_signature(parser.parse_to_ast(code), *args, **kwargs)
    # Add gas estimates for each function to ABI
    gas_estimates = gas_estimate(code, *args, **kwargs)
    for idx, func in enumerate(abi):
        func_name = func.get('name', '').split('(')[0]
        # Skip __init__, has no estimate
        if func_name in gas_estimates:
            abi[idx]['gas'] = gas_estimates[func_name]
    return abi
示例#4
0
def mk_full_signature(code, *args, **kwargs):
    abi = parser.mk_full_signature(parser.parse_to_ast(code), *args, **kwargs)
    # Add gas estimates for each function to ABI
    gas_estimates = gas_estimate(code, *args, **kwargs)
    for func in abi:
        try:
            func_signature = func['name']
        except KeyError:
            # constructor and fallback functions don't have a name
            continue

        func_name, _, _ = func_signature.partition('(')
        # This check ensures we skip __init__ since it has no estimate
        if func_name in gas_estimates:
            # TODO: mutation
            func['gas'] = gas_estimates[func_name]
    return abi
示例#5
0
def extract_external_interface(code, contract_name):
    sigs = parser.mk_full_signature(parser.parse_to_ast(code), sig_formatter=lambda x, y: (x, y))
    functions = [sig for sig, _ in sigs if isinstance(sig, FunctionSignature)]
    cname = os.path.basename(contract_name).split('.')[0].capitalize()

    out = ""
    offset = 4 * " "
    for idx, func in enumerate(functions):
        if idx == 0:
            out += "\n# External Contracts\ncontract %s:\n" % cname
        if not func.private and func.name != '__init__':
            out += offset + "def {name}({args}){ret}: {func_type}\n".format(
                name=func.name,
                args=", ".join([arg.name + ": " + str(arg.typ) for arg in func.args]),
                ret=render_return(func),
                func_type="constant" if func.const else "modifying",
            )
    out += "\n"
    return out
示例#6
0
def extract_interface_str(code, contract_name, interface_codes=None):
    sigs = parser.mk_full_signature(
        parser.parse_to_ast(code),
        sig_formatter=lambda x, y: (x, y),
        interface_codes=interface_codes,
    )
    events = [sig for sig, _ in sigs if isinstance(sig, EventSignature)]
    functions = [sig for sig, _ in sigs if isinstance(sig, FunctionSignature)]
    out = ""
    # Print events.
    for idx, event in enumerate(events):
        if idx == 0:
            out += "# Events\n\n"
        out += "{event_name}: event({{{args}}})\n".format(
            event_name=event.name,
            args=", ".join(
                [arg.name + ": " + str(arg.typ) for arg in event.args]))

    # Print functions.
    def render_decorator(sig):
        o = "\n"
        if sig.const:
            o += "@constant\n"
        if not sig.private:
            o += "@public\n"
        return o

    for idx, func in enumerate(functions):
        if idx == 0:
            out += "\n# Functions\n"
        if not func.private and func.name != '__init__':
            out += "{decorator}def {name}({args}){ret}:\n    pass\n".format(
                decorator=render_decorator(func),
                name=func.name,
                args=", ".join(
                    [arg.name + ": " + str(arg.typ) for arg in func.args]),
                ret=render_return(func))
    out += "\n"

    return out
示例#7
0
def extract_sigs(code):
    sigs = parser.mk_full_signature(parser.parse_to_ast(code),
                                    sig_formatter=lambda x, y: x)
    return sigs