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)