1

这是一个非常简单的智能合约:

pragma solidity ^0.7.0;
        
contract Name {
    
    string name = "Tom";
    
    function getName() public view returns (string memory) {
        return name;
    }
}

然后我使用 web3j 将其转换为 java 文件,getName() 函数如下所示:

public RemoteCall<TransactionReceipt> getName() {
    final Function function = new Function(
            FUNC_GETNAME, 
            Arrays.<Type>asList(), 
            Collections.<TypeReference<?>>emptyList());
    return executeRemoteCallTransaction(function);
}

我对如何获取 getName() 函数的返回值有点困惑。

4

1 回答 1

0

我不确定您使用的是哪个版本的 web3j。目前我正在使用 Web3j 1.4.1。当我创建包装类时,它的返回类型与您提到的不同。

public RemoteFunctionCall<String> getName() {
    final org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function(FUNC_GETNAME, 
            Arrays.<Type>asList(), 
            Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
    return executeRemoteCallSingleValueReturn(function, String.class);
}

下面是代码,我试图解决。它返回公共变量中提到的名称。

nameContract = Name.deploy(this.web3j, this.credential, (new ContractGasProviderImplementations())).send();
        
String name = nameContract.getName().send();
        
System.out.println(name);
于 2021-12-11T09:04:46.737 回答