solidity的struct对象,web3j java解析输出参数

package com.kevin; import org.junit.Before; import org.junit.Test; import org.web3j.abi.FunctionEncoder; import org.web3j.abi.FunctionReturnDecoder; import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.Utf8String; import org.web3j.abi.datatypes.generated.Uint256; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.methods.request.Transaction; import org.web3j.protocol.core.methods.response.EthCall; import org.web3j.protocol.http.HttpService; import java.io.IOException; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; public class StructDemoTest2 { private Web3j web3jClint; private Long chainId = 5777L; @Before public void init(){ web3jClint = Web3j.build(new HttpService("http://127.0.0.1:8545", true)); } @Test public void getStudent() throws IOException, ExecutionException, InterruptedException { // 构建输入参数 List<TypeReference<?>> outputParameters = new ArrayList<>(); outputParameters.add(new TypeReference<Uint256>() {}); outputParameters.add(new TypeReference<Utf8String>() {}); Function newStu = new Function("student", Collections.emptyList(), outputParameters); String encode = FunctionEncoder.encode(newStu); String from = "0x148F0cF0d183027D3f35dF8553012bD980F99ae5"; String contractAddress = "0x57BF94B4Cca86d6e83347F520Ba2cDfC4FA318F9"; Transaction ethCallTransaction = Transaction.createEthCallTransaction(from, contractAddress, encode); CompletableFuture<EthCall> ethCallCompletableFuture = web3jClint.ethCall(ethCallTransaction, DefaultBlockParameterName.LATEST).sendAsync(); EthCall ethCall = ethCallCompletableFuture.get(); String input = ethCall.getValue(); System.out.println(input); List<Type> decode = FunctionReturnDecoder.decode(ethCall.getValue(), newStu.getOutputParameters()); Student stu = new Student(((BigInteger) decode.get(0).getValue()).longValue(), (String) decode.get(1).getValue()); System.out.println("stu-->" + stu); } }
上一篇:机器学习中回归任务、分类任务常用的算法-二、分类任务


下一篇:java异步多线程精讲和多种写法