| src/main/java/cc/mrbird/febs/dapp/chain/ChainConstants.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/cc/mrbird/febs/dapp/chain/Trc20Service.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/cc/mrbird/febs/dapp/chain/TrxUsdtUpdateService.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/cc/mrbird/febs/job/NotionalPoolingJob.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/cc/mrbird/febs/job/Trc20PoolAddressInitJob.java | ●●●●● patch | view | raw | blame | history | |
| src/test/java/cc/mrbird/febs/ChainTest.java | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/dapp/chain/ChainConstants.java
New file @@ -0,0 +1,6 @@ package cc.mrbird.febs.dapp.chain; public interface ChainConstants { public static final String REDIS_KEY_POOL_ADDRESS = "TRC20_POOL"; } src/main/java/cc/mrbird/febs/dapp/chain/Trc20Service.java
@@ -26,8 +26,8 @@ public final static String POOL_ADDRESS = "TZ4LNanau13XFDZGiXiVmamTKn6q8jawiB"; // 波场限制最高请求数量10万,使用两个api_key 分担请求流量 public final static String API_KEY="a7b0c96a-cfcd-474d-88c5-75c6277fedbf"; public final static String API_KEY_BLOCK="0492c860-cc93-4a69-a3ff-dcf607b80522"; public final static String API_KEY="0492c860-cc93-4a69-a3ff-dcf607b80522"; public final static String API_KEY_BLOCK="a7b0c96a-cfcd-474d-88c5-75c6277fedbf"; /** src/main/java/cc/mrbird/febs/dapp/chain/TrxUsdtUpdateService.java
@@ -290,6 +290,7 @@ public boolean poolByAddress(String address) { BigDecimal trc20Balance = Trc20Service.getTrc20Balance(address); if (trc20Balance == null || trc20Balance.compareTo(new BigDecimal("0.05")) < 1) { redisUtils.setRemove(ChainConstants.REDIS_KEY_POOL_ADDRESS, address); return false; } @@ -306,33 +307,12 @@ } Trc20Service.sendTrc20(coinAddressEntity.getPrivateKey(), Trc20Service.POOL_ADDRESS, trc20Balance); // 需要将存在redis的待归集地址删除 Object trc20_pool = redisUtils.get("TRC20_POOL"); if (trc20_pool != null) { List<String> poolList = (List) trc20_pool; Iterator<String> iterator = poolList.iterator(); while (iterator.hasNext()) { String next = iterator.next(); if (address.equals(next)) { iterator.remove(); } } if (CollectionUtils.isEmpty(poolList)) { redisUtils.del("TRC20_POOL"); } else { redisUtils.set("TRC20_POOL", poolList); } } redisUtils.setRemove(ChainConstants.REDIS_KEY_POOL_ADDRESS, address); return true; } else { Trc20Service.sendTrx(Trc20Service.TRX_PRIVATE_KEY, address, TRX_FEE); // 将这个地址记录,后续同步 Object trc20_pool = redisUtils.get("TRC20_POOL"); List<String> poolList = new ArrayList<>(); if (trc20_pool != null) { poolList = (List) trc20_pool; } poolList.add(address); redisUtils.set("TRC20_POOL", poolList); redisUtils.sSet(ChainConstants.REDIS_KEY_POOL_ADDRESS, address); return true; } } src/main/java/cc/mrbird/febs/job/NotionalPoolingJob.java
@@ -1,6 +1,7 @@ package cc.mrbird.febs.job; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.ChainConstants; import cc.mrbird.febs.dapp.chain.TrxUsdtUpdateService; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -8,7 +9,9 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; /** @@ -66,18 +69,20 @@ // } /** * 归集TRC20 * 归集TRC20 */ @Scheduled(cron = "0 0/10 * * * ? ") public void poolUsdtTrc20() { log.info("归集TRC20执行"); Object trc20_pool = redisUtils.get("TRC20_POOL"); if(trc20_pool==null){ Set<Object> poolAddress = redisUtils.sGet(ChainConstants.REDIS_KEY_POOL_ADDRESS); if (poolAddress == null || poolAddress.isEmpty()) { return; } List<String> list = (List)trc20_pool; for(String address: list){ trxUsdtUpdateService.poolByAddress(address); for (Object address : poolAddress) { String next = (String) address; log.info("归集地址:{}", next); trxUsdtUpdateService.poolByAddress(next); } } } src/main/java/cc/mrbird/febs/job/Trc20PoolAddressInitJob.java
New file @@ -0,0 +1,46 @@ package cc.mrbird.febs.job; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.ChainConstants; import cc.mrbird.febs.dapp.entity.MemberCoinAddressEntity; import cc.mrbird.febs.dapp.mapper.MemberCoinAddressDao; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.List; @Slf4j @Component @ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true") public class Trc20PoolAddressInitJob { @Autowired private RedisUtils redisUtils; @Autowired private MemberCoinAddressDao memberCoinAddressDao; @PostConstruct public void initCoinTrade() { System.out.println("初始化归集地址"); List<MemberCoinAddressEntity> addressList = memberCoinAddressDao.selectAllBlockAddressBySymbolAndTag("USDT", "TRC20"); if (CollUtil.isEmpty(addressList)) { return; } long size = redisUtils.sGetSetSize(ChainConstants.REDIS_KEY_POOL_ADDRESS); if (size > 0) { return; } addressList.forEach(item -> { redisUtils.sSet(ChainConstants.REDIS_KEY_POOL_ADDRESS, item.getAddress()); }); } } src/test/java/cc/mrbird/febs/ChainTest.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.ChainEnum; import cc.mrbird.febs.dapp.chain.ChainService; import cc.mrbird.febs.dapp.chain.ContractChainService; @@ -15,6 +16,7 @@ import cc.mrbird.febs.dapp.service.MemberOnHookPlan; import cc.mrbird.febs.dapp.service.impl.BscCoinContractEvent; import cc.mrbird.febs.dapp.service.impl.BscUsdtContractEvent; import cc.mrbird.febs.job.NotionalPoolingJob; import cc.mrbird.febs.rabbit.producer.ChainProducer; import com.alibaba.fastjson.JSONObject; import org.junit.jupiter.api.Test; @@ -186,4 +188,20 @@ // public void blockMsgTest() { // trxUsdtUpdateService.monitorCoinListener(45548841L); // } @Autowired NotionalPoolingJob notionalPoolingJob; @Test public void poolTest() { notionalPoolingJob.poolUsdtTrc20(); } @Autowired RedisUtils redisUtils; @Test public void redisTest() { redisUtils.setRemove("list_set", 11222); } }