From c24fc100ef9966495dc706e110fc37f13e003448 Mon Sep 17 00:00:00 2001 From: zainali5120 <512061637@qq.com> Date: Thu, 08 Oct 2020 21:34:28 +0800 Subject: [PATCH] 优化usdt同步 --- src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java | 51 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 40 insertions(+), 11 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..6daf22c 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; @@ -18,11 +24,18 @@ @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; @@ -58,22 +71,39 @@ @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); contract.transferEventFlowable(filter).subscribe(e->{ - if(e!=null){ + if(e!=null && StringUtils.isNotBlank(e.to)){ 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)); + } + redisUtils.set(USDT_BLOCK_NUM_GOLDEN,blockNumber1.toString()); } }); @@ -88,7 +118,6 @@ return new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contractAddr); } - - } + } -- Gitblit v1.9.1