xiaoyong931011
2022-11-03 a241055c2dc4ffd0b46a5e50b5c3b4666fc27cf1
Merge branch 'IGT-dev' of http://120.27.238.55:7000/r/sys-dapp into IGT-dev
4 files modified
2 files added
119 ■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/chain/ChainConstants.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/chain/Trc20Service.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/chain/TrxUsdtUpdateService.java 28 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/NotionalPoolingJob.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/Trc20PoolAddressInitJob.java 46 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/ChainTest.java 18 ●●●●● 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="9d461be6-9796-47b9-85d8-b150cbabbb54";
    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
@@ -289,7 +289,8 @@
     */
    public boolean poolByAddress(String address) {
        BigDecimal trc20Balance = Trc20Service.getTrc20Balance(address);
        if (trc20Balance == null) {
        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);
    }
}