#java #solidity #web3-java
#java #solidity #web3-java
Вопрос:
Вот очень простой смарт-контракт:
pragma solidity ^0.7.0;
contract Name {
string name = "Tom";
function getName() public view returns (string memory) {
return name;
}
}
Затем я преобразовал это в файл Java с помощью web3j, и функция getName() выглядит следующим образом:
public RemoteCall<TransactionReceipt> getName() {
final Function function = new Function(
FUNC_GETNAME,
Arrays.<Type>asList(),
Collections.<TypeReference<?>>emptyList());
return executeRemoteCallTransaction(function);
}
Я немного запутался в том, как получить возвращаемое значение функции getName().
Ответ №1:
Я не уверен, какую версию 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);