From d4819e728d81b311621d41a92a69f5d26f1a9f70 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 02 Jul 2024 18:03:08 +0800 Subject: [PATCH] 逻辑 --- src/main/java/cc/mrbird/febs/dapp/chain/EthService.java | 66 ++++++++++++++++++++++++++++++--- 1 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java index 609cdfd..4f1eff4 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java @@ -1,10 +1,9 @@ package cc.mrbird.febs.dapp.chain; -import cn.hutool.core.util.HexUtil; +import cc.mrbird.febs.dapp.dto.BatchTransferDto; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import org.bouncycastle.jcajce.provider.digest.SHA3; import org.web3j.abi.FunctionEncoder; import org.web3j.abi.FunctionReturnDecoder; import org.web3j.abi.TypeReference; @@ -12,12 +11,17 @@ import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Uint256; -import org.web3j.crypto.*; +import org.web3j.crypto.Credentials; +import org.web3j.crypto.RawTransaction; +import org.web3j.crypto.TransactionEncoder; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.Request; import org.web3j.protocol.core.methods.request.Transaction; -import org.web3j.protocol.core.methods.response.*; +import org.web3j.protocol.core.methods.response.EthBlockNumber; +import org.web3j.protocol.core.methods.response.EthCall; +import org.web3j.protocol.core.methods.response.EthGetTransactionCount; +import org.web3j.protocol.core.methods.response.EthSendTransaction; import org.web3j.protocol.http.HttpService; import org.web3j.utils.Convert; import org.web3j.utils.Numeric; @@ -26,8 +30,9 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; -import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -425,4 +430,53 @@ return ""; } } + + @Override + public void transferList(List<BatchTransferDto> batchTransferDtos) { + String gas = getGas(); + Credentials credentials = Credentials.create(privateKey); + BigInteger nonce = null; + try { + nonce = web3j.ethGetTransactionCount(credentials.getAddress(), DefaultBlockParameterName.LATEST).send().getTransactionCount(); + } catch (IOException e) { + e.printStackTrace(); + } + + for(BatchTransferDto batchTransferDto : batchTransferDtos){ + + String amount = batchTransferDto.getAmount().toPlainString(); + String toAddress = batchTransferDto.getToAddress(); + + BigDecimal amountPow = new BigDecimal(amount).multiply(BigDecimal.TEN.pow(18)); + amount = amountPow.toPlainString(); + if (amount.contains(".")) { + amount = amount.substring(0, amount.lastIndexOf(".")); + } + + Function function = new Function("transfer", + Arrays.asList(new Address(toAddress), new Uint256(new BigInteger(amount))), + Arrays.asList(new TypeReference<Type>() { + })); + + String encodedFunction = FunctionEncoder.encode(function); + + RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, + Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(),// 给矿工开的转账单价 单价越高越快 + Convert.toWei("100000", Convert.Unit.WEI).toBigInteger(), contractAddress, encodedFunction);//里程上限 + + byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials); + String hexValue = Numeric.toHexString(signedMessage); + + CompletableFuture<EthSendTransaction> ethSendTransactionCompletableFuture = web3j.ethSendRawTransaction(hexValue).sendAsync(); + try { + EthSendTransaction ethSendTransaction = ethSendTransactionCompletableFuture.get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + nonce = nonce.add(BigInteger.ONE); + } + + } } -- Gitblit v1.9.1