Example #1
0
    def format_abi_args(self, fn_name: str, fn_args, needCover=False):
        """
        format args
        """
        if not self.contract_bin_path.endswith(".wasm"):
            self.gen_contract_abi(needCover)
        data_parser = DatatypeParser(self.contract_abi_path)
        contract_abi = data_parser.contract_abi
        self.dataparser = data_parser
        args = None
        if fn_args is None:
            return (contract_abi, fn_args)
        if fn_name in data_parser.func_abi_map_by_name.keys() is None:
            raise BcosException(
                "invalid function: {}, the right function list:".format(
                    fn_name, ''.join(data_parser.func_abi_map_by_name.keys())))
        if fn_name is not None:
            fn_abi = data_parser.func_abi_map_by_name[fn_name]
            inputabi = data_parser.get_function_inputs_abi(fn_name)
            #inputabi = data_parser.get_function_abi(fn_name)

            args = format_args_by_function_abi(fn_args, inputabi)
            #print("args after format:",args)
        # the constructor with params
        elif fn_args is not None and contract_abi is not None:
            abidata = get_constructor_abi(contract_abi)
            if abidata is not None:
                inputabi = abidata["inputs"]
                args = format_args_by_function_abi(fn_args, inputabi)
        return (contract_abi, args)
    matchpattern = r"\[(.*?)\]"
    res = re.findall(matchpattern, "address[]")
    print(res)
    res = re.findall(matchpattern, "address[3]")
    print(res)
    # 数组参数需要加上中括号,比如[1, 2, 3],数组中是字符串或字节类型,加双引号或单引号,例如[“alice”, ”bob”],注意数组参数中不要有空格;布尔类型为true或者false。
    strarrayparam = "[\"aaa\",\"bbb\",\"ccc\"]"
    intarrayparam = "[1,2,3]"
    boolarrayparam = "[true,true,false]"
    boolstrarrayparam = "[\"True\",\"false\",\"true\"]"
    addrarrayparam = "[\"0x7029c502b4f824d19bd7921e9cb74ef92392fb1b\"," \
                     "\"0x9029c502b4f824d19bd7921e9cb74ef92392fb1b\"," \
                     "\"0xa029c502b4f824d19bd7921e9cb74ef92392fb1b\"]"
    res = format_array_args_by_abi(addrarrayparam, "address[]")
    print(res)
    res = format_array_args_by_abi(intarrayparam, "int256[]")
    print(res)
    res = format_array_args_by_abi(strarrayparam, "string[]")
    print(res)
    res = format_array_args_by_abi(boolarrayparam, "bool[]")
    print(res)
    res = format_array_args_by_abi(boolstrarrayparam, "bool[]")
    print(res)

    from client.datatype_parser import DatatypeParser

    parser = DatatypeParser("contracts/NoteGroup.abi")
    fn_abi = parser.get_function_inputs_abi("set_addr")
    fmt_args = format_args_by_function_abi([addrarrayparam, "testing"], fn_abi)
    print(fmt_args)