123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package com.ichaoj.ams.script;
- import cn.hutool.core.thread.ThreadUtil;
- import com.ichaoj.ams.script.model.AirdropParam;
- import com.ichaoj.ams.script.model.AirdropWallet;
- import com.ichaoj.ams.script.util.Web3Util;
- import io.zksync.protocol.ZkSync;
- import lombok.SneakyThrows;
- 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.Response;
- import org.web3j.protocol.core.methods.response.EthSendTransaction;
- import org.web3j.protocol.core.methods.response.EthTransaction;
- import org.web3j.protocol.core.methods.response.Transaction;
- import org.web3j.protocol.core.methods.response.TransactionReceipt;
- import org.web3j.utils.Convert;
- import org.web3j.utils.Numeric;
- import java.math.BigInteger;
- import java.util.Map;
- import java.util.Optional;
- import java.util.concurrent.TimeUnit;
- /**
- * 脚本接口
- *
- * @author wren
- */
- public abstract class IScript {
- /**
- * 运行脚本
- *
- * @param params 参数
- * @return txId
- */
- public abstract SResult run(Map<String, AirdropParam> params, AirdropWallet airdropWallet);
- @SneakyThrows
- protected SResult sendTxForEvm(AirdropWallet airdropWallet, Web3j web3j, RawTransaction etherTransaction) {
- Credentials credentials = Web3Util.getCredentials(airdropWallet);
- byte[] signMessage = TransactionEncoder.signMessage(etherTransaction, credentials);
- String hexValue = Numeric.toHexString(signMessage);
- EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();
- Response.Error error = ethSendTransaction.getError();
- BigInteger balance1 = web3j.ethGetBalance(airdropWallet.getAddress(), DefaultBlockParameterName.LATEST).send().getBalance();
- System.out.println("balance1:" + balance1);
- if (error != null) {
- throw new RuntimeException(error.getMessage());
- }
- TransactionReceipt receipt = null;
- long currentTimeMillis = System.currentTimeMillis();
- while (true) {
- if (currentTimeMillis + 600000 < System.currentTimeMillis()) {
- throw new RuntimeException("transaction time out");
- }
- Optional<TransactionReceipt> receiptOptional = web3j
- .ethGetTransactionReceipt(ethSendTransaction.getTransactionHash()).send().getTransactionReceipt();
- if (receiptOptional.isPresent()) {
- receipt = receiptOptional.get();
- break;
- } else {
- ThreadUtil.sleep(3, TimeUnit.SECONDS);
- }
- }
- EthTransaction ethTransaction = web3j.ethGetTransactionByHash(receipt.getTransactionHash()).send();
- Transaction transaction = ethTransaction.getTransaction().get();
- BigInteger gasAmount = receipt.getGasUsed().multiply(transaction.getGasPrice());
- SResult sResult = new SResult();
- BigInteger balance = web3j.ethGetBalance(airdropWallet.getAddress(), DefaultBlockParameterName.LATEST).send().getBalance();
- sResult.setGas(Convert.fromWei(gasAmount.toString(), Convert.Unit.ETHER).toString());
- sResult.setTxId(transaction.getHash());
- sResult.setStatus("0x1".equals(receipt.getStatus()) ? 1 : 2);
- sResult.setCurrentBalance(Convert.fromWei(balance.toString(), Convert.Unit.ETHER).toString());
- return sResult;
- }
- }
|