From abf16ade315ba2626339713e798d87eba336c37f Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 01 Jun 2022 18:30:18 +0800
Subject: [PATCH] fix prd to test chain
---
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java | 24 ++++++-
src/main/java/cc/mrbird/febs/job/ChainListenerJob.java | 25 +++++++
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java | 16 ++++
src/main/java/cc/mrbird/febs/common/contants/AppContants.java | 6 ++
src/main/java/cc/mrbird/febs/job/SystemTradeJob.java | 18 ++++-
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 33 ++++++++--
src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java | 35 ++++++-----
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java | 2
9 files changed, 123 insertions(+), 38 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
index 7c9381f..0d07cff 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -137,12 +137,18 @@
*/
public static final String REDIS_KEY_MINE_TRANSFER_POOL_TRADE_CNT = "MINE_TRANSFER_POOL_TRADE_CNT";
+ public static final String REDIS_KEY_BLOCK_COIN_NUM = "BLOCK_COIN_NUM";
+ public static final String REDIS_KEY_BLOCK_USDT_NUM = "BLOCK_USDT_NUM";
+
public static final String DIC_TYPE_DISTRIBUTE_PROP = "DISTRIBUTE_PROP";
public static final String DIC_TYPE_SYSTEM_SETTING = "SYSTEM_SETTING";
public static final String DIC_TYPE_SLIP_POINT_SETTING = "SLIP_POINT_SETTING";
public static final String DIC_VALUE_MINI_HOLD_COIN_LIMIT = "MINI_HOLD_COIN_LIMIT";
+ public static final String DIC_VALUE_SYSTEM_START_TARGET = "SYSTEM_START_TARGET";
+ public static final String DIC_VALUE_SYSTEM_SOURCE_POOL_VOL = "SYSTEM_SOURCE_POOL_VOL";
+ public static final String DIC_VALUE_SYSTEM_NODE_CNT_LIMIT = "SYSTEM_NODE_CNT_LIMIT";
public static final String DESTROY_ADDRESS = "0x0000000000000000000000000000000000000000";
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
index 3e4500b..8a98bda 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -26,11 +26,12 @@
/**
* 币安 usdt合约
+ * 0x55d398326f99059fF775485246999027B3197955
*/
BSC_USDT("BSC", "0x971c09aA9735EB98459B17EC8b48932D24CbB931",
"0x5f38d0e63157f535fc21f89ea13ec3cd245691c20795c1d2cb60233b3ba7bb47",
- "https://bsc-dataseed1.ninicoin.io",
- "0x55d398326f99059fF775485246999027B3197955",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0x337610d27c682E347C9cD60BD4b3b107C9d34dDd",
""),
/**
@@ -38,8 +39,8 @@
*/
BSC_TFC("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
"0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf",
- "https://bsc-dataseed1.ninicoin.io",
- "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0xdd92ea2f41d807a60b29004bf7db807d8ac09212",
""),
/**
@@ -47,35 +48,35 @@
*/
BSC_TFC_SOURCE("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
"0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf",
- "https://bsc-dataseed1.ninicoin.io",
- "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0xdd92ea2f41d807a60b29004bf7db807d8ac09212",
""),
/**
* 源池U
*/
- BSC_USDT_SOURCE("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
- "0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf",
- "https://bsc-dataseed1.ninicoin.io",
- "0x55d398326f99059fF775485246999027B3197955",
+ BSC_USDT_SOURCE("BSC", "0x4EbDCA102623b46a47042D580dddAdE2a53D057F",
+ "0x81c2c02d0c106c1e32ab060a37f6eb279c0649c30ea5cc1c4951e6a8dd4e963c",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0x337610d27c682E347C9cD60BD4b3b107C9d34dDd",
""),
/**
* 铸池币
*/
- BSC_TFC_MAKE("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
- "0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf",
- "https://bsc-dataseed1.ninicoin.io",
- "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68",
+ BSC_TFC_MAKE("BSC", "0xBae24dAa3aB94cfF8114a16A4267D769b3a651F8",
+ "0xc0cabaf5f1fce227e5f1b8a7f83a5dc28972389ffc59559d7852ce8d27c3bec4",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0xdd92ea2f41d807a60b29004bf7db807d8ac09212",
""),
/**
* 技术池
*/
- BSC_TFC_TECH("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
+ BSC_TFC_TECH("BSC", "0xD998DA7362360eFC6daDFEd6E9a32E70640d7600",
"",
- "https://bsc-dataseed1.ninicoin.io",
- "0x6c6835e60e7dbad7a60112a6371271e8eb79ee68",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "0xdd92ea2f41d807a60b29004bf7db807d8ac09212",
"");
private String chain;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
index 0d8af1b..e664354 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -60,4 +60,6 @@
* 账号类型 admin normal
*/
private String accountType;
+
+ private BigDecimal usdtBalance;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index b29af8f..3f61eee 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -36,4 +36,6 @@
void setNewestPrice(PriceSettingDto priceSettingDto);
DappMemberEntity insertMember(String address, String refererId);
+
+ DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
index 355909e..32c165d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -1,5 +1,7 @@
package cc.mrbird.febs.dapp.service.impl;
+import cc.mrbird.febs.common.contants.AppContants;
+import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
@@ -15,6 +17,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.web3j.utils.Numeric;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -33,18 +36,27 @@
@Resource
private DappFundFlowDao dappFundFlowDao;
+ @Resource
+ private RedisUtils redisUtils;
+
private final String ADDRESS = "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25";
+
+ public static void main(String[] args) {
+ System.out.println(Numeric.toBigInt("0x12e4e85"));
+ }
@Transactional(rollbackFor = Exception.class)
@Override
public void compile(EthUsdtContract.TransferEventResponse e) {
- int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
if (e.to != null) {
+ redisUtils.set(AppContants.REDIS_KEY_BLOCK_COIN_NUM, e.log.getBlockNumber());
+ int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+
// 合约创建时,同时创建地址
if ("0x0000000000000000000000000000000000000000".equals(e.from)) {
DappMemberEntity toMember = dappMemberDao.selectByAddress(e.to, null);
if (toMember == null) {
- toMember = dappMemberService.insertMember(e.to, "0");
+ toMember = dappMemberService.insertMember(e.to, "0", "BSC", "admin");
}
return;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
index 489d780..6e5ece7 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -7,9 +7,11 @@
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DappOnlineTransferEntity;
+import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DappOnlineTransferDao;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.util.StrUtil;
@@ -44,16 +46,27 @@
@Resource
private DappOnlineTransferDao dappOnlineTransferDao;
+ @Resource
+ private DataDictionaryCustomMapper dataDictionaryCustomMapper;
@Override
public void compile(EthUsdtContract.TransferEventResponse e) {
- ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
- int decimals = sourceUsdtInstance.decimals();
- int tfcDecimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+ if (e.to == null) {
+ return;
+ }
+ redisUtils.set(AppContants.REDIS_KEY_BLOCK_USDT_NUM, e.log.getBlockNumber());
// 判断对方打款地址是否为源池地址
if (ChainEnum.BSC_TFC_SOURCE.getAddress().equals(e.to)) {
+ ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
+ int decimals = sourceUsdtInstance.decimals();
+ int tfcDecimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+
+ if (e.from.equals("0xaa25aa7a19f9c426e07dee59b12f944f4d9f1dd3")) {
+ return;
+ }
+
DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
// 如果此时fromMember为null,则说明该用户未经过转账绑定关系,而是直接注册并购买币,则将关系绑定到顶级账户
if (fromMember == null) {
@@ -88,9 +101,12 @@
chainProducer.sendOnlineTransfer(JSONObject.toJSONString(map));
}
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_START_TARGET);
+ BigDecimal target = new BigDecimal(dic.getValue());
+
// 若源池中的USDT达到或超过8万U,则启动整个系统
BigDecimal balance = sourceUsdtInstance.balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
- if (BigDecimal.valueOf(80000).compareTo(balance) < 1) {
+ if (target.compareTo(balance) < 1) {
redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
}
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index 7e41717..9e447f9 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -7,19 +7,14 @@
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
+import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.chain.ContractChainService;
import cc.mrbird.febs.dapp.dto.ApproveDto;
import cc.mrbird.febs.dapp.dto.ConnectDto;
import cc.mrbird.febs.dapp.dto.PriceSettingDto;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
-import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
-import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
-import cc.mrbird.febs.dapp.mapper.DappMemberDao;
-import cc.mrbird.febs.dapp.mapper.DappTransferRecordDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletMineDao;
+import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
@@ -34,6 +29,7 @@
import java.math.BigDecimal;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -49,6 +45,7 @@
private final DappWalletMineDao dappWalletMineDao;
private final DappTransferRecordDao dappTransferRecordDao;
private final RedisUtils redisUtils;
+ private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -258,8 +255,28 @@
@Override
public DappMemberEntity insertMember(String address, String refererId) {
+
+ return insertMember(address, refererId, "BSC", "normal");
+ }
+
+ @Override
+ public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) {
DappMemberEntity member = new DappMemberEntity();
member.setAddress(address);
+ member.setChainType(chainType);
+ member.setAccountType(accountType);
+ member.setBalance(ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(address));
+ member.setUsdtBalance(ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(address));
+
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_NODE_CNT_LIMIT);
+ int nodeCntLimit = Integer.parseInt(dic.getValue());
+
+ List<DappMemberEntity> memberCount = dappMemberDao.selectList(null);
+ if (memberCount.size() <= (nodeCntLimit + 4)) {
+ member.setNodeType(1);
+ } else {
+ member.setNodeType(2);
+ }
dappMemberDao.insert(member);
diff --git a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
index 6c64330..04c0bbb 100644
--- a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
+++ b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
@@ -1,5 +1,7 @@
package cc.mrbird.febs.job;
+import cc.mrbird.febs.common.contants.AppContants;
+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.ContractEventService;
@@ -20,10 +22,29 @@
@Autowired
private ContractEventService bscUsdtContractEvent;
+ @Autowired
+ private RedisUtils redisUtils;
+
@PostConstruct
public void chainListenerJob() {
log.info("监听打开");
-// ChainService.contractEventListener(new BigInteger("18097238"), bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
-// ChainService.contractEventListener(new BigInteger("18097238"), bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+ BigInteger usdtBlock;
+ BigInteger coinBlock;
+ Object usdt = redisUtils.get(AppContants.REDIS_KEY_BLOCK_USDT_NUM);
+ if (usdt == null) {
+ usdtBlock = new BigInteger("19811973");
+ } else {
+ usdtBlock = (BigInteger) usdt;
+ }
+
+ Object coin = redisUtils.get(AppContants.REDIS_KEY_BLOCK_COIN_NUM);
+ if (coin == null) {
+ coinBlock = new BigInteger("19811973");
+ } else {
+ coinBlock = (BigInteger) coin;
+ }
+
+ ChainService.contractEventListener(usdtBlock, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+ ChainService.contractEventListener(coinBlock, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
}
}
diff --git a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
index d1b5ec2..95ec77f 100644
--- a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
+++ b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
@@ -4,6 +4,8 @@
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.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo;
import lombok.extern.slf4j.Slf4j;
@@ -11,6 +13,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -26,11 +29,11 @@
private RedisUtils redisUtils;
@Autowired
private DappSystemService systemService;
+ @Resource
+ private DataDictionaryCustomMapper dataDictionaryCustomMapper;
// 最低容量(百分比)
private final BigDecimal volProp = new BigDecimal("0.5");
-
- private final BigDecimal basic_vol = BigDecimal.valueOf(1200000);
/**
* 中转池容量计算
@@ -44,10 +47,15 @@
@Scheduled(cron = "0 0 0 * * ?")
public void transferPoolVol() {
log.info("中转池容量");
+
+ // 源池初始化容量
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_SOURCE_POOL_VOL);
+ BigDecimal basicVol = new BigDecimal(dic.getValue());
+
Object o = redisUtils.get(AppContants.REDIS_KEY_TRANSFER_POOL_VOL);
if (o == null) {
RedisTransferPoolVo transferPool= new RedisTransferPoolVo();
- BigDecimal total = basic_vol.multiply(volProp.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
+ BigDecimal total = basicVol.multiply(volProp.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
transferPool.setTodayVol(total);
transferPool.setTodayProp(volProp);
transferPool.setFinishCnt(0);
@@ -77,7 +85,7 @@
transferPool.setFinishCnt(finishCnt);
}
- BigDecimal total = basic_vol.multiply(targetProp.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
+ BigDecimal total = basicVol.multiply(targetProp.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
transferPool.setTodayVol(total);
transferPool.setUnFinishCnt(0);
redisUtils.set(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN, total);
@@ -93,7 +101,7 @@
transferPool.setUnFinishCnt(unFinishCnt);
}
BigDecimal aa = targetProp.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
- BigDecimal total = basic_vol.multiply(aa);
+ BigDecimal total = basicVol.multiply(aa);
transferPool.setTodayVol(total);
redisUtils.set(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN, total);
}
--
Gitblit v1.9.1