From f5e6133809c553cfd9fb28ee61019927c547c374 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 08 Dec 2021 15:58:33 +0800
Subject: [PATCH] 20211208 fish
---
src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java | 89 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 74 insertions(+), 15 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
index fbe30a5..83b1e24 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
@@ -20,6 +20,9 @@
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.tron.common.utils.ByteArray;
+import org.tron.trident.core.ApiWrapper;
+import org.tron.trident.core.contract.Contract;
+import org.tron.trident.core.contract.Trc20Contract;
import org.tron.walletserver.WalletApi;
import javax.annotation.Resource;
@@ -39,6 +42,10 @@
private static String TRC20_CONTRACT_ADDRESS = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";
+ /**
+ * 代币合约地址
+ */
+ public static String COIN_CONTRACT_ADDRESS = "TL2pea32CTtxJ48pJmnLQuoRHeoX79dLCT";
/**
* 手续费
*/
@@ -81,7 +88,7 @@
* @param addressList
* @param num
*/
- private void httpTransactionInfo(List<String> addressList, Long num) {
+ public void httpTransactionInfo(List<String> addressList, Long num) {
// 查询详情,包含了所有交易信息
String transactionInfoByBlockNum = getblockbynum(BigInteger.valueOf(num));
if (StringUtils.isBlank(transactionInfoByBlockNum)) {
@@ -259,14 +266,20 @@
}
BigDecimal amount = BigDecimal.ZERO;
- //相匹配的合约地址
- if (!TRC20_CONTRACT_ADDRESS.equals(contract_address)) {
+ // 相匹配的合约地址 USDT合约地址和代币合约地址
+ if (!TRC20_CONTRACT_ADDRESS.equals(contract_address) && !COIN_CONTRACT_ADDRESS.equals(contract_address)) {
return;
}
//币种
if (StringUtils.isNotEmpty(amountStr)) {
- amount = new BigDecimal(amountStr).divide(new BigDecimal(1 + TransformUtil.getSeqNumByLong(0L, 6)));
+ if (TRC20_CONTRACT_ADDRESS.equals(contract_address)) {
+ // USDT精度为6
+ amount = new BigDecimal(amountStr).divide(new BigDecimal(1 + TransformUtil.getSeqNumByLong(0L, 6)));
+ } else {
+ // 代币精度为8
+ amount = new BigDecimal(amountStr).divide(new BigDecimal(1 + TransformUtil.getSeqNumByLong(0L, 8)));
+ }
}
for (String address : addressList) {
if (address.equals(to_address)) {
@@ -274,7 +287,11 @@
// 金额
// 发送消息队列
EthUsdtChargeDto dto = new EthUsdtChargeDto(address, txId, amount);
- dto.setSymbol(EthUsdtChargeDto.Symbol.USDT_TRC20);
+ if (TRC20_CONTRACT_ADDRESS.equals(contract_address)) {
+ dto.setSymbol(EthUsdtChargeDto.Symbol.USDT_TRC20);
+ } else {
+ dto.setSymbol(EthUsdtChargeDto.Symbol.COIN_TRC20);
+ }
usdtUpdateProducer.sendMsg(JSONObject.toJSONString(dto));
log.info("===to_address:" + to_address + "===amount:" + amount);
}
@@ -295,16 +312,13 @@
return false;
}
if (trxBalance.compareTo(TRX_FEE) >= 0) {
- // 转
- BigDecimal trc20Balance = Trc20Service.getTrc20Balance(address);
- if (trc20Balance == null) {
+
+ boolean usdtResult = poolUsdt(address);
+ boolean coinResult = poolCoin(address);
+ if (usdtResult && coinResult) {
return false;
}
- MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbolTag(address, "USDT", "TRC20");
- if (coinAddressEntity == null) {
- return false;
- }
- Trc20Service.sendTrc20(coinAddressEntity.getPrivateKey(), Trc20Service.POOL_ADDRESS, trc20Balance);
+
// 需要将存在redis的待归集地址删除
Object trc20_pool = redisUtils.get("TRC20_POOL");
if (trc20_pool != null) {
@@ -331,16 +345,48 @@
if (trc20_pool != null) {
poolList = (List) trc20_pool;
}
- poolList.add(address);
+
+ if (!poolList.contains(address)){
+ poolList.add(address);
+ }
redisUtils.set("TRC20_POOL", poolList);
return true;
}
}
- // https://api.trongrid.io/wallet/getnowblock
+ public boolean poolUsdt(String address) {
+ // 转
+ BigDecimal trc20Balance = Trc20Service.getTrc20Balance(address);
+ if (trc20Balance == null || BigDecimal.ZERO.compareTo(trc20Balance) <= 0) {
+ return false;
+ }
+ MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbolTag(address, "USDT", "TRC20");
+ if (coinAddressEntity == null) {
+ return false;
+ }
+ Trc20Service.sendTrc20(coinAddressEntity.getPrivateKey(), Trc20Service.POOL_ADDRESS, trc20Balance);
+ return true;
+ }
+
+ public boolean poolCoin(String address) {
+ MemberCoinAddressEntity coinAddress = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.XCC.name());
+ if (coinAddress == null) {
+ return false;
+ }
+
+ Trc20Contract token = contractToken(coinAddress.getAddress(), coinAddress.getPrivateKey());
+ BigInteger balance = token.balanceOf(address);
+ if (balance == null || balance.compareTo(BigInteger.ZERO) <= 0) {
+ return false;
+ }
+
+ token.transfer(Trc20Service.POOL_ADDRESS, balance.longValue(), 0, "memo", 100000000L);
+ return true;
+ }
/**
* 获取最新区块
+ * https://api.trongrid.io/wallet/getnowblock
*
* @return
*/
@@ -375,4 +421,17 @@
String wholeBlockCount = JSON.parseObject(forObject).getString("whole_block_count");
return Long.valueOf(wholeBlockCount);
}
+
+ /**
+ * 获取对应代币合约token
+ *
+ * @param address 地址
+ * @param privateKey 密钥
+ * @return
+ */
+ public Trc20Contract contractToken(String address, String privateKey) {
+ ApiWrapper wrapper = ApiWrapper.ofMainnet(privateKey, Trc20Service.API_KEY);
+ Contract trc20Contract = wrapper.getContract(COIN_CONTRACT_ADDRESS);
+ return new Trc20Contract(trc20Contract, address, wrapper);
+ }
}
--
Gitblit v1.9.1