2

我正在使用以下代码通过 web3j 执行智能合约的功能:

Credentials creds = getCredentialsFromPrivateKey("private-key");
            RawTransactionManager manager = new RawTransactionManager(web3j, creds);
            String contractAddress = "0x1278f8c858d799fe1010cfc0d1eeb56508243a4d";
            BigInteger sum = new BigInteger("10000000000"); // amount you want to send
            String data = encodeTransferData(sum);
            BigInteger gasPrice = web3j.ethGasPrice().send().getGasPrice();
            BigInteger gasLimit = BigInteger.valueOf(120000); // set gas limit here
            EthSendTransaction transaction = manager.sendTransaction(gasPrice, gasLimit, contractAddress, data, null);
            System.out.println(transaction.getTransactionHash());

它执行良好并且函数运行,但是我不知道如何读取合同给出的输出,我如何读取该输出?

4

2 回答 2

1

这将返回函数调用的十六进制值

  private static List<Type> executeCall(Function function) throws IOException {
          String encodedFunction = FunctionEncoder.encode(function);
          org.web3j.protocol.core.methods.response.EthCall ethCall = web3j.ethCall(
              Transaction.createEthCallTransaction(
                  "0x753ebAf6F6D5C2e3E6D469DEc5694Cd3Aa1A0c21", "0x47480bac30de77cd030b8a8dad2d6a2ecdb7f27a", encodedFunction),
              DefaultBlockParameterName.LATEST)
              .send();
          String value = ethCall.getValue();
          System.out.println(value);
          System.out.println(FunctionReturnDecoder.decode(value, function.getOutputParameters()));
          return FunctionReturnDecoder.decode(value, function.getOutputParameters());
        }
于 2021-02-15T08:58:47.283 回答
0

以太坊交易哈希是交易的唯一 id。使用此交易哈希,您可以从网络查询交易状态。

底层 JSON-RPC 调用称为eth_getTransactionReceipt。这是Web3.js 文档

如果你的智能合约发出事件,你也可以阅读那些.

于 2021-02-09T09:42:11.607 回答