1

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

有人可以帮忙吗?

谢谢

将要

4

1 回答 1

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()); 
于 2020-09-22T17:55:10.480 回答