合约大概是这样的,需要两个数组参数:
* Method: `setMultiPlyRewardInfo(address[] memory plyAddrs,uint256[] memory _rewards ) public onlyManager()`现在问题是java这边如何给它传参数,目前写的代码是这样,会报错public static String setMultiPlyRewardInfo(){
try {
String privateKey_ = "123456";
String contractAddress_ = "111111";
Credentials credentials = Credentials.create(privateKey_);
String fromAddress = credentials.getAddress();
EthGetTransactionCount ethGetTransactionCount = web3j
.ethGetTransactionCount(fromAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
BigInteger nonce = ethGetTransactionCount.getTransactionCount();
List<Type> inputParameters = new ArrayList<>();
Address[] address = {new Address("0x092754..."),new Address("0x2b6186.....")};
Uint256[] theBalance = {new Uint256(10),new Uint256(20)};
//这里加入会报错
inputParameters.add(Arrays.asList(address));
inputParameters.add(Arrays.asList(theBalance));
List<TypeReference<?>> outputParameters = new ArrayList<>();
TypeReference<Bool> result = new TypeReference<Bool>() {};
outputParameters.add(result);
Function function = new Function("setMultiPlyRewardInfo",
inputParameters,outputParameters);
String encodedFunction = FunctionEncoder.encode(function);
RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
Convert.toWei("1", Convert.Unit.GWEI).toBigInteger(),
new BigInteger("5000000"), contractAddress_, encodedFunction);
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction,18928,credentials);
String hexValue = Numeric.toHexString(signedMessage); EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();
return ethSendTransaction.getTransactionHash();
} catch (InterruptedException e) {
e.printStackTrace();
return "";
} catch (ExecutionException e) {
e.printStackTrace();
return "";
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货