首先: solidity代码
function getList(address[][] memory paths)
public
pure
returns (address )
{
return paths[0][0];
}
通过web3j的生成器,用abi生成
org.web3j.codegen.SolidityFunctionWrapperGenerator.main(
new String[]{
// solidityContractPath,
"-a" + a, // 使用正确的选项和参数
// "-b" + b, // 使用正确的选项和参数
"-p", packageName,
"-o", outputDir
}
);
生成之后代码如下:
public RemoteFunctionCall<String> getList(List<List<String>> paths) {
final Function function = new Function(FUNC_GETLIST,
Arrays.<Type>asList(new DynamicArray<>( DynamicArray.class,
Utils.typeMap(paths, DynamicArray.class, Address.class))),
Arrays.asList(new TypeReference<Address>() {
}));
return executeRemoteCallSingleValueReturn(function, String.class);
}
通过java调用,返回 Exception in thread "main" org.web3j.tx.exceptions.ContractCallException: Contract Call has been reverted by the EVM with the reason: 'execution reverted'.
但是上述solidity代码再remix里面部署是可以用的,然后其他方法,只要入参不是二维数组和结构体,都正常可以用,web3j的版本是5.0.0, 有没有会java的哥们教一下怎么办,解决之后,我 V10U作为感谢!!