Web3j在智能合约中调用变量

时间:2020-07-18 15:45:12

标签: java solidity smartcontracts geth web3-java

我正在尝试使用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值。

有人可以帮忙吗?

谢谢

1 个答案:

答案 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());