From 28eb26d68f7a2a4e6b316c3ea9f511aa143db66e Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 30 Sep 2024 16:57:18 +0800
Subject: [PATCH] 55测试环境
---
src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java | 62 ++++++++++++++++++++++++------
1 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
index a67b220..65fd5f1 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
@@ -1,6 +1,12 @@
package com.xcong.excoin.modules.blackchain.service;
+import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.modules.blackchain.model.EthUsdtChargeDto;
+import com.xcong.excoin.modules.member.dao.MemberCoinAddressDao;
+import com.xcong.excoin.rabbit.producer.UsdtUpdateProducer;
import com.xcong.excoin.utils.RedisUtils;
+import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
@@ -14,15 +20,24 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
@Service
public class UsdtErc20UpdateService {
+
+ @Resource
+ private UsdtUpdateProducer usdtUpdateProducer;
+
+ @Resource
+ private MemberCoinAddressDao coinWalletDao;
+
public final static List<String> ALL_ADDRESS_LIST = new ArrayList<>();
- public final static String USDT_BLOCK_NUM = "USDT_BLOCK_NUM";
+ public final static String USDT_BLOCK_NUM_GOLDEN = "USDT_BLOCK_NUM_GOLDEN";
- private final static BigInteger DIVIDE_USDT = new BigInteger("1000000");
+ private final static BigDecimal DIVIDE_USDT = new BigDecimal("1000000");
private static Web3j web3;
@@ -47,7 +62,7 @@
return Web3j.build(httpService);
}
- private static String blockchainNode = "http://120.55.86.146:8545";
+ private static String blockchainNode = "http://114.55.250.231:8545";
private static String contractAddr = "0xdac17f958d2ee523a2206206994597c13d831ec7";
@@ -58,26 +73,48 @@
@Resource
private RedisUtils redisUtils;
+
+
public void updateUsdt(){
+ // 首先查询所有的钱包地址
+ List<String> tdCoinWallets = coinWalletDao.selectAllSymbolAddress(CoinTypeEnum.USDT.toString(),"ERC20");
+ if(tdCoinWallets!=null){
+ ALL_ADDRESS_LIST.addAll(tdCoinWallets);
+ }
// 获取最新区块
- String string = redisUtils.getString(USDT_BLOCK_NUM);
+ String string = redisUtils.getString(USDT_BLOCK_NUM_GOLDEN);
+ if(string==null){
+ string = "11014249";
+ }
BigInteger blockNum = new BigInteger(string);
Credentials credentials = Credentials.create(privateKey);
- EthUsdtContract contract = EthUsdtContract.load(contractAddr, web3, credentials, getStaticGasProvider());
- EthFilter filter = getFilter(new BigInteger("10943021"));
+ EthUsdtContract contract = EthUsdtContract.load(contractAddr, getInstance(), credentials, getStaticGasProvider());
+ EthFilter filter = getFilter(blockNum);
+ Map<String,BigInteger> map = new HashMap<String,BigInteger>();
+ map.put("blockNum",blockNum);
contract.transferEventFlowable(filter).subscribe(e->{
- if(e!=null){
+ if(e!=null && StringUtils.isNotBlank(e.to) && e.log.getBlockNumber()!=null){
String transactionHash = e.log.getTransactionHash();
+ BigInteger blockNumber1 = e.log.getBlockNumber();
String toAddress = e.to;
BigInteger tokenBalance = e.tokens;
- // 金额
- BigInteger divide = tokenBalance.divide(DIVIDE_USDT);
- // 发送消息队列 TODO
-
+ if(ALL_ADDRESS_LIST.contains(toAddress)){
+ System.out.println("存在本地的地址:"+toAddress);
+ // 金额
+ BigDecimal divide = new BigDecimal(tokenBalance.toString()).divide(DIVIDE_USDT);
+ // 发送消息队列
+ EthUsdtChargeDto dto = new EthUsdtChargeDto(toAddress,transactionHash,divide);
+ usdtUpdateProducer.sendMsg(JSONObject.toJSONString(dto));
+ }
+ if(map.get("blockNum").compareTo(blockNumber1)!=0){
+ redisUtils.set(USDT_BLOCK_NUM_GOLDEN,blockNumber1.toString());
+ map.put("blockNum",blockNumber1);
+ }
}
});
}
+
private static EthFilter getFilter(BigInteger startBlock) {
if (startBlock != null) {
@@ -88,7 +125,6 @@
return new EthFilter(DefaultBlockParameterName.EARLIEST,
DefaultBlockParameterName.LATEST, contractAddr);
}
-
-
}
+
}
--
Gitblit v1.9.1