内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
以下是使用的代码:
pragma solidity ^0.4.0; contract Contract { uint price; constructor(uint _price) public { price = _price; } function getPrice() public constant returns (uint) { return price; } }
EthBlock.Block block = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, true).send().getBlock(); Transaction transaction = web3j.ethGetTransactionByBlockHashAndIndex(block.getHash(), BigInteger.ZERO).send().getTransaction().get(); String hash = transaction.getHash(); Function function = new Function(DataExchangeOfferContract.FUNC_GETPRICE, Collections.emptyList(), Collections.singletonList(new TypeReference<Uint256>() {})); String functionEncoder = FunctionEncoder.encode(function); Transaction transaction = Transaction.createEthCallTransaction(address, functionEncoder, null); EthCall response = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send(); List<Type> types = FunctionReturnDecoder.decode(response.getValue(), function.getOutputParameters()); BigInteger price = (BigInteger) types.get(0).getValue();
代码应该如下所示:
Web3j web3j = Web3j.build(new HttpService()); TransactionManager manager = new ReadonlyTransactionManager(web3j, "YOUR_ADDRESS"); DataExchangeOfferContract contract = DataExchangeOfferContract.load("CONTRACT_ADDRESS", web3j, manager, Contract.GAS_PRICE, Contract.GAS_LIMIT); RemoteCall<BigInteger> remoteCall = contract.getPrice(); BigInteger price = remoteCall.send();