| | |
| | | package cc.mrbird.febs.mall.chain.enums; |
| | | |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.mall.chain.constants.ChainConstants; |
| | | import cc.mrbird.febs.mall.chain.service.ChainService; |
| | | import cc.mrbird.febs.mall.chain.service.ContractChainService; |
| | | import cc.mrbird.febs.mall.entity.MemberCoinAddressEntity; |
| | | import cc.mrbird.febs.mall.mapper.MemberCoinAddressDao; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.http.HttpUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.web3j.abi.FunctionEncoder; |
| | | import org.web3j.abi.FunctionReturnDecoder; |
| | | import org.web3j.abi.TypeReference; |
| | |
| | | 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.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.core.methods.response.*; |
| | | import org.web3j.protocol.http.HttpService; |
| | | import org.web3j.utils.Convert; |
| | | import org.web3j.utils.Numeric; |
| | |
| | | * @date 2022-04-15 |
| | | **/ |
| | | public class EthService implements ContractChainService { |
| | | |
| | | |
| | | @Autowired |
| | | private RedisUtils redisUtils; |
| | | @Autowired |
| | | private MemberCoinAddressDao memberCoinAddressDao; |
| | | |
| | | private Web3j web3j; |
| | | private String url; |
| | |
| | | JSONObject data = JSONObject.parseObject(resp); |
| | | gas = data.getString("FastGasPrice"); |
| | | } |
| | | return StrUtil.isBlank(gas) ? "35" : gas; |
| | | return StrUtil.isBlank(gas) ? "5" : gas; |
| | | } |
| | | |
| | | @Override |
| | | public String transfer(String address) { |
| | | BigDecimal balance = balanceOf(address); |
| | | BigDecimal balance = new BigDecimal(1); |
| | | |
| | | return transfer(address, balance); |
| | | } |
| | |
| | | public String transfer(String address, BigDecimal amount) { |
| | | try { |
| | | return tokenTransfer(privateKey, ownerAddress, address, amount.toPlainString()); |
| | | } catch (ExecutionException | InterruptedException e) { |
| | | e.printStackTrace(); |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public String transfer(String privateKey, String fromAddress, String toAddress, String amount) { |
| | | try { |
| | | return tokenTransfer(privateKey, fromAddress, toAddress, amount); |
| | | } catch (ExecutionException | InterruptedException e) { |
| | | e.printStackTrace(); |
| | | return ""; |
| | |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public BigDecimal balanceOfBaseToken(String address) { |
| | | EthGetBalance balanceWei; |
| | | try { |
| | | balanceWei = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send(); |
| | | if (balanceWei.getResult() == null) { |
| | | return null; |
| | | } |
| | | return Convert.fromWei(balanceWei.getBalance().toString(), Convert.Unit.ETHER); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String transferBaseToken(String address, BigDecimal amount) { |
| | | String gas = getGas(); |
| | | // String gas ="5"; |
| | | try { |
| | | Credentials credentials = Credentials.create(privateKey); |
| | | |
| | | EthGetTransactionCount ethGetTransactionCount = web3j |
| | | .ethGetTransactionCount(ownerAddress, DefaultBlockParameterName.LATEST).sendAsync().get(); |
| | | |
| | | BigInteger nonce = ethGetTransactionCount.getTransactionCount(); |
| | | BigInteger value = Convert.toWei(amount, Convert.Unit.ETHER).toBigInteger(); |
| | | RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce, |
| | | Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(), |
| | | Convert.toWei("100000", Convert.Unit.WEI).toBigInteger(), address, value); |
| | | byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials); |
| | | String hexValue = Numeric.toHexString(signedMessage); |
| | | |
| | | EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get(); |
| | | if (ethSendTransaction.hasError()) { |
| | | return ""; |
| | | } else { |
| | | String transactionHash = ethSendTransaction.getTransactionHash(); |
| | | return transactionHash; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | } |