From 8d053c03d0738efabc33183c1db20e05ced5cfb0 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 25 Nov 2021 16:01:23 +0800
Subject: [PATCH] fix
---
src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java | 76 +++++++++++++++++++++++++++++++------
1 files changed, 63 insertions(+), 13 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..1643e11 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 = "TRTE68V3TJBLduBoJPLMgBsvwkq8LJBin6";
/**
* 手续费
*/
@@ -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,8 +266,8 @@
}
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;
}
@@ -274,7 +281,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 +306,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) {
@@ -337,10 +345,39 @@
}
}
- // https://api.trongrid.io/wallet/getnowblock
+ public boolean poolUsdt(String address) {
+ // 转
+ BigDecimal trc20Balance = Trc20Service.getTrc20Balance(address);
+ if (trc20Balance == null) {
+ 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.XCT.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 +412,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