From 549f5b13855c9cee9b486c2759b9dddab5ce1b7f Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 26 Jul 2022 18:57:05 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 16 +-
src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java | 10 ++
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java | 7 +
src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 35 +++++++
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 5
src/main/resources/application-prod.yml | 4
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 2
src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java | 11 ++
src/main/java/cc/mrbird/febs/dapp/chain/EthService.java | 36 +++++++
src/main/java/cc/mrbird/febs/common/contants/AppContants.java | 3
src/main/java/cc/mrbird/febs/job/SystemTradeJob.java | 4
src/main/java/cc/mrbird/febs/dapp/utils/BoxUtils.java | 124 ++++++++++++++++++++++++
src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java | 5 +
15 files changed, 253 insertions(+), 13 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 7540a62..99bc06e 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -170,4 +170,7 @@
public static final String RESP_PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANyCPnifddX7HYN/wexyqxt3cFCKoE1/+lCIv7i+Epo83xlwbRet6rTXyGX7JCs5qpg1UvC+LuB+Relv8bZPEwScLmu0B5awwDmY954974KD6Yn/JdHi2WT933QvmDs9PFqUfnQd0KhfAUF6eS2K0quwN9DOLX5UIcEZSE9SOwkdAgMBAAECgYAt52Mv4yo5qHQFavQoz9o09pFIAwPJ/mlSmJUo1VC0ERX0isX7FvZ0PTN3n2dxJCkSVI92lHDXxRGyvd4YsK9pdErGVL2DecbbER7069y94g/uHsYq15skzLlyUNhyu2FOUCsVFy+M/C0qk14z/xG1ze3GWNHP1oc1leAYpoWmAQJBAPXxRvYTxmZAFv3J4pcf/FXqmUXdbJI5sHWXe6Pcs+rIuil5ePqX6AQBoQ5PalYhe5/kKzr7Gy6GSzlpztuOV50CQQDlhrTNytQdDCNIOL8uw3t4D8mDGuslPcRoykmaCQhd4NvaqLZrBS8k+TuS2+v5ryng3HhcYjR0h1MHHG69En+BAkEAzt2G5mxzsIWv0QACi0LoKAwPp+g67jN/7SjhYk69Nnpnu4Lk80LacKQ+J588vf2j0jVE93NGxbdHhp8s0xfDMQJBAJFlOqVeRe28oaD/aYRLCqyse39Ujv6BWSj0c5li/WzSoxKpaxzyJMIsK2PFcn8xSbsKjigfgZELpDnN9gxJaoECQCn+tZB0g9WJMaGNCMdlStPHAO2ajS1HY6BV5Xq13hixAdp5bLzbg0GrY25MrpTCFBEqCx+7F4cYUvVazLuAK6g=";
public static final LinkedList<String> ENCRYPT_METHOD = new LinkedList<>();
+
+ public static final String IDO_MEMBER_RECOMMEND_CNT = "IDO_MEMBER_RECOMMEND_CNT";
+ public static final String IDO_BOX_PRIZE = "IDO_BOX_PRIZE";
}
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 b00028a..73d652d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -90,7 +90,16 @@
"9378c6a5becdcade151e98b2ee30239bcb11642e362a068a5bc7667f3d17b1fc",
"https://bsc-dataseed1.ninicoin.io",
"0x46ac4921e58773ca22826df1640672b91b1db2b3",
- "");
+ ""),
+
+ /**
+ * 卡牌
+ */
+ BSC_NFT_SDC("BSC", "0xf6b06a30196aa5e318232a3b61319eab0fd4a3bf",
+ "9378c6a5becdcade151e98b2ee30239bcb11642e362a068a5bc7667f3d17b1fc",
+ "https://bsc-dataseed1.ninicoin.io",
+ "0x46ac4921e58773ca22826df1640672b91b1db2b3",
+ "");
private String chain;
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
index 1602c42..52e5100 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ContractChainService.java
@@ -24,4 +24,6 @@
BigInteger blockNumber();
BigInteger totalSupply();
+
+ BigInteger safeMintNFT(String address);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
index 66f037d..02acaf2 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
@@ -360,4 +360,40 @@
}
return BigInteger.ZERO;
}
+
+ @Override
+ public BigInteger safeMintNFT(String toAddress) {
+ String gas = getGas();
+
+ try {
+ Credentials credentials = Credentials.create(privateKey);
+ EthGetTransactionCount ethGetTransactionCount = web3j
+ .ethGetTransactionCount(ownerAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
+ BigInteger nonce = ethGetTransactionCount.getTransactionCount();
+ Function function = new Function("safeMint",
+ Arrays.asList(new Address(toAddress)),
+ Arrays.asList(new TypeReference<Type>() {
+ }));
+
+ String encodedFunction = FunctionEncoder.encode(function);
+ RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
+ Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger(),
+ Convert.toWei("1000000", Convert.Unit.WEI).toBigInteger(), contractAddress, encodedFunction);
+
+ byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
+ String hexValue = Numeric.toHexString(signedMessage);
+
+ CompletableFuture<EthSendTransaction> ethSendTransactionCompletableFuture = web3j.ethSendRawTransaction(hexValue).sendAsync();
+ EthSendTransaction ethSendTransaction = ethSendTransactionCompletableFuture.get();
+
+ if (ethSendTransaction.hasError()) {
+ return "";
+ } else {
+ return ethSendTransaction.getTransactionHash();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java b/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
index d8c8e99..41cd567 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/TrxService.java
@@ -113,4 +113,9 @@
public BigInteger totalSupply() {
return null;
}
+
+ @Override
+ public BigInteger safeMintNFT(String address) {
+ return null;
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
index 13e03e0..1501361 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -84,6 +84,13 @@
return new FebsResponse().success().data(dappMemberService.findTeamList(teamListDto));
}
+ @ApiOperation(value = "开盲盒", notes = "开盲盒")
+ @PostMapping(value = "/boxSurprise")
+ public FebsResponse boxSurprise() {
+ int cnt = dappWalletService.boxSurprise();
+ return new FebsResponse().success().data(cnt);
+ }
+
@PostMapping(value = "/logout")
public FebsResponse logout() {
DappMemberEntity member = LoginUserUtil.getAppUser();
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
index 4db4774..627b4b9 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -47,7 +47,7 @@
private BigDecimal amount;
/**
- * 类型 1-买入 2-卖出 3-采矿
+ * 类型 1-买入 2-卖出 3-采矿 4-返利 5-获取盲盒 6-开盲盒获取卡牌 7-推荐奖励
*/
private Integer type;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
index 4acc664..41f39e2 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
@@ -25,4 +25,14 @@
@TableField(exist = false)
private String address;
+
+ /**
+ * usdt余额
+ */
+ private BigDecimal usdtAmount;
+
+ /**
+ * 盲盒数量
+ */
+ private Integer boxCnt;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
index 8603a96..e17101f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -39,4 +39,6 @@
Long transfer(TransferDto transferDto);
Map<String, BigDecimal> calPrice(PriceDto priceDto);
+
+ int boxSurprise();
}
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 37201a8..fca3d0f 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
@@ -289,9 +289,12 @@
} else {
member.setNodeType(2);
}
-
dappMemberDao.insert(member);
+ DappWalletCoinEntity walletCoin = new DappWalletCoinEntity();
+ walletCoin.setMemberId(member.getId());
+ dappWalletCoinDao.insert(walletCoin);
+
if (StrUtil.isEmpty(refererId)) {
refererId = "0";
// 若没有推荐人,则直接激活
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index c73c96b..3b66239 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -294,7 +294,7 @@
}
// 挖矿数量
- BigDecimal mine = transferPoll.multiply(balance.divide(allInternet, instance.decimals(), RoundingMode.HALF_UP));
+ BigDecimal mine = transferPoll.multiply(new BigDecimal("0.2")).multiply(balance.divide(allInternet, instance.decimals(), RoundingMode.HALF_UP));
if (mine.compareTo(BigDecimal.ZERO) < 1) {
continue;
}
@@ -423,7 +423,9 @@
}
// 最低容量(百分比)
- private final BigDecimal volProp = new BigDecimal("0.5");
+ private final BigDecimal volProp = new BigDecimal("2");
+ // 每日增/减百分比
+ private final BigDecimal changeProp = new BigDecimal("1");
@Override
public void transferPoolSetting() {
@@ -444,7 +446,7 @@
transferPool.setTodayVol(total);
transferPool.setTodayProp(volProp);
transferPool.setFinishCnt(0);
- transferPool.setFinishCnt(0);
+ transferPool.setUnFinishCnt(0);
redisUtils.set(AppContants.REDIS_KEY_TRANSFER_POOL_VOL, transferPool);
redisUtils.set(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN, total);
@@ -462,8 +464,8 @@
if (remain.compareTo(BigDecimal.ZERO) == 0) {
int finishCnt = transferPool.getFinishCnt() + 1;
BigDecimal targetProp = transferPool.getTodayProp();
- if (finishCnt == 5) {
- targetProp = transferPool.getTodayVol().add(volProp);
+ if (finishCnt == 1) {
+ targetProp = transferPool.getTodayVol().add(changeProp);
transferPool.setTodayProp(targetProp);
transferPool.setFinishCnt(0);
} else {
@@ -478,8 +480,8 @@
} else {
int unFinishCnt = transferPool.getUnFinishCnt() + 1;
BigDecimal targetProp = transferPool.getTodayProp();
- if (unFinishCnt >= 3) {
- targetProp = transferPool.getTodayProp().compareTo(volProp) == 0 ? volProp : transferPool.getTodayProp().subtract(volProp);
+ if (unFinishCnt >= 1) {
+ targetProp = transferPool.getTodayProp().compareTo(volProp) == 0 ? volProp : transferPool.getTodayProp().subtract(changeProp);
transferPool.setTodayProp(targetProp);
transferPool.setUnFinishCnt(0);
} else {
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index efd0b74..845bbb5 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -17,6 +17,7 @@
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.dapp.utils.BoxUtil;
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -340,4 +341,38 @@
map.put("y", y);
return map;
}
+
+ @Override
+ public int boxSurprise() {
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+
+ DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
+ if (walletCoin.getBoxCnt() < 1) {
+ throw new FebsException("盲盒数量不足");
+ }
+
+ walletCoin.setBoxCnt(walletCoin.getBoxCnt() - 1);
+ dappWalletCoinDao.updateById(walletCoin);
+
+ BoxUtil.Box box = BoxUtil.openBox();
+
+ DappFundFlowEntity boxFundFlow = new DappFundFlowEntity(member.getId(), new BigDecimal(box.getIndex()), 6, 2, BigDecimal.ZERO);
+ dappFundFlowDao.insert(boxFundFlow);
+
+ new Thread(() -> {
+ try {
+ int count = box.getIndex();
+ while (count > 0) {
+ ChainService.getInstance(ChainEnum.BSC_NFT_SDC.name()).safeMintNFT(member.getAddress());
+ Thread.sleep(5000);
+ count--;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("发放卡牌错误", e);
+ }
+ }).start();
+
+ return box.getIndex();
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/utils/BoxUtils.java b/src/main/java/cc/mrbird/febs/dapp/utils/BoxUtils.java
new file mode 100644
index 0000000..be2c101
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/utils/BoxUtils.java
@@ -0,0 +1,124 @@
+package cc.mrbird.febs.dapp.utils;
+
+import cc.mrbird.febs.common.contants.AppContants;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.common.utils.SpringContextUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author wzy
+ * @date 2022-07-14
+ **/
+@Slf4j
+public class BoxUtil {
+
+// public static volatile List<Box> boxList = Collections.synchronizedList(new ArrayList<>());
+
+ private static final RedisUtils redisUtils = SpringContextUtil.getBean(RedisUtils.class);
+ public synchronized static Box openBox() {
+ String redisStr = redisUtils.getString(AppContants.IDO_BOX_PRIZE);
+ List<Box> boxList = JSONObject.parseArray(redisStr, Box.class);
+ if (CollUtil.isEmpty(boxList)) {
+ boxList = Collections.synchronizedList(new ArrayList<>());
+ Box box1 = new Box(1, 95);
+ Box box2 = new Box(2, 3);
+ Box box3 = new Box(3, 2);
+ boxList.add(box1);
+ boxList.add(box2);
+ boxList.add(box3);
+ }
+
+ int min = 1;
+ int minIndex = 1;
+ int max = 1;
+
+ for (int i = 0; i < boxList.size(); i++) {
+ Box box = boxList.get(i);
+ if (i != 0) {
+ Box lastBox = (Box) boxList.get(i - 1);
+ minIndex += lastBox.getCount();
+ }
+ max += box.getCount();
+ box.setMin(minIndex);
+ box.setMax(max);
+ }
+
+ int i = RandomUtil.randomInt(min, max);
+
+ Box result = new Box();
+ for (Box box : boxList) {
+ if (box.getMin() <= i && box.getMax() > i) {
+ result = box;
+ int count = box.getCount();
+ count--;
+
+ box.setCount(count);
+ if (count == 0) {
+ boxList.remove(box);
+ }
+ break;
+ }
+ }
+ redisUtils.set(AppContants.IDO_BOX_PRIZE, JSONObject.toJSONString(boxList));
+ return result;
+ }
+
+ public static class Box {
+ private int index;
+
+ private int count;
+
+ public Box() {}
+
+ public Box(int index, int count) {
+ this.index = index;
+ this.count = count;
+ }
+
+ private int min;
+
+ private int max;
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+
+ public int getMin() {
+ return min;
+ }
+
+ public void setMin(int min) {
+ this.min = min;
+ }
+
+ public int getMax() {
+ return max;
+ }
+
+ public void setMax(int max) {
+ this.max = max;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
index 712972e..d2ca19c 100644
--- a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
+++ b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
@@ -60,7 +60,9 @@
/**
* 挖矿
*
- * 以中转池成交数1:1出矿(中转池卖出多少,矿池则1:1出币),每个地址所得=出币量*(单个地址持币量/全网持币量)
+ * 以中转池成交数1:0.2出矿(中转池卖出多少,矿池则1:0.2出币),每个地址所得=出币量*(单个地址持币量/全网持币量)
+ * source限矿算法:
+ * TODO 按前一天价格,有跌幅则按实际产矿量减半。
*/
@Scheduled(cron = "0 0 2 * * ?")
public void mineJob() {
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 8baf176..d63a387 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -47,6 +47,6 @@
time-zone: GMT+8
system:
- online-transfer: false
- chain-listener: false
+ online-transfer: true
+ chain-listener: true
trade-job: false
\ No newline at end of file
--
Gitblit v1.9.1