我正在尝试使用solidity,geth和web3j来获取智能合约中变量的值。
HelloWorld合同很简单:
pragma solidity ^0.6.10;
contract HelloWorld {
uint256 public counter = 5;
function add() public { //increases counter by 1
counter++;
}
function subtract() public { //decreases counter by 1
counter--;
}
function getCounter() public view returns (uint256) {
return counter;
}
}
web3j没有call()函数,只有send()令人惊讶。
当我尝试按照web3j的说明进行操作时:
contract.getCounter().send()
我得到的是交易收据,而不是uint256值。
有人可以帮忙吗?
谢谢
会
答案 0 :(得分:0)
您需要在生成的HelloWorld.java文件中修改getCounter()函数。
public RemoteCall<Type> getCounter() {
final Function function = new Function(
FUNC_GETCOUNTER,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Uint>() {}));
return executeRemoteCallSingleValueReturn(function);
}
要获取值,请使用以下代码:
Type message = contract.getCounter().send();
System.out.println(message.getValue());