update 全网算力优化,幸运值算法优化

This commit is contained in:
yyb 2025-05-07 17:29:27 +08:00
parent 589470260c
commit 14c8e731f2
1 changed files with 20 additions and 21 deletions

View File

@ -420,7 +420,7 @@ public class DataTask {
//获取3天内全网的实际报块数
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("nexa",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数
BigDecimal throreticalBlocks = getTheoreticalBlocks("nexa",start3d, end, blockData);
BigDecimal throreticalBlocks = getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start3d, end, blockData);
//3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值
@ -430,7 +430,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 7;
blockData = blockDataContext.getBlockData("nexa",start7d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("nexa",start7d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -438,7 +438,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 30;
blockData = blockDataContext.getBlockData("nexa",start30d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("nexa",start30d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -447,7 +447,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 90;
blockData = blockDataContext.getBlockData("nexa",start90d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("nexa",start90d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.NEXA.gethRate(),start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -466,7 +466,7 @@ public class DataTask {
* @param blockData
* @return
*/
public BigDecimal getTheoreticalBlocks(String coin,Date start,Date end,BlockTimeAndNumberDto blockData){
public BigDecimal getTheoreticalBlocks(String coin,int hRate,Date start,Date end,BlockTimeAndNumberDto blockData){
//得到每一个小时定时任务存储到数据库的全网算力
List<DateBigDecimalDto> netPowerList = poolMapper.getDailyNetPower(coin);
@ -475,20 +475,19 @@ public class DataTask {
}
//得时间段到矿池的算力
List<DateBigDecimalDto> poolPowerList = poolMapper.getDailyPoolPower(coin);
//A:矿池3天总算力
//A:矿池N天总算力
//计算矿池每日实际应出块数 block中算力单位是H/s
int hRate = PoolUnits.NEXA.gethRate();
BigDecimal pPow3d = poolPowerList.stream()
.filter(e -> (e.getPDate().before(end)))
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start)))
.map(DateBigDecimalDto::getValue).reduce(BigDecimal.ZERO, BigDecimal::add)
.multiply(BigDecimal.valueOf(hRate));
//作为A的除数得到3天内的矿池平均算力
//作为A的除数得到N天内的矿池平均算力
long pDay3d = poolPowerList.stream()
.filter(e -> (e.getPDate().before(end)))
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start))).count();
//B:3天全网算力
//B:N天全网算力
BigDecimal nPow3d = netPowerList.stream()
.filter(e -> (e.getPDate().before(end)))
.filter(e -> (e.getPDate().after(start) || e.getPDate().equals(start)))
@ -882,7 +881,7 @@ public class DataTask {
//获取3天内全网的实际报块数
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("grs",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数
BigDecimal throreticalBlocks= getTheoreticalBlocks("grs",start3d, end, blockData);
BigDecimal throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start3d, end, blockData);
//3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3);
//3天幸运值
@ -892,7 +891,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 7;
blockData = blockDataContext.getBlockData("grs",start7d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("grs",start7d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -900,7 +899,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 30;
blockData = blockDataContext.getBlockData("grs",start30d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("grs",start30d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -908,7 +907,7 @@ public class DataTask {
//90天幸运值
useAggregated = blockPerDays.size() >= 90;
blockData = blockDataContext.getBlockData("grs",start90d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("grs",start90d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("grs",PoolUnits.GRS.gethRate(),start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -1289,7 +1288,7 @@ public class DataTask {
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("mona",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数
BigDecimal throreticalBlocks= getTheoreticalBlocks("mona",start3d, end, blockData);
BigDecimal throreticalBlocks= getTheoreticalBlocks("mona",PoolUnits.MONA.gethRate(),start3d, end, blockData);
//3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3);
@ -1300,7 +1299,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 7;
blockData = blockDataContext.getBlockData("mona",start7d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("mona",start7d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("mona",PoolUnits.MONA.gethRate(),start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -1308,7 +1307,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 30;
blockData = blockDataContext.getBlockData("mona",start30d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("nexa",start30d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("nexa",PoolUnits.MONA.gethRate(),start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -1317,7 +1316,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 90;
blockData = blockDataContext.getBlockData("mona",start90d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("mona",start90d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("mona",PoolUnits.MONA.gethRate(),start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -3412,7 +3411,7 @@ public class DataTask {
BlockTimeAndNumberDto blockData = blockDataContext.getBlockData("rxd",start3d, end,blockPerDays, useAggregated);
//3天矿池理论报块数
BigDecimal throreticalBlocks= getTheoreticalBlocks("rxd",start3d, end, blockData);
BigDecimal throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start3d, end, blockData);
//3天矿池实际报块数
int actualBlocks = poolMapper.selectPoolBlock(3);
@ -3423,7 +3422,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 7;
blockData = blockDataContext.getBlockData("rxd",start7d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("rxd",start7d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start7d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(7);
dto.setLuck7d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -3431,7 +3430,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 30;
blockData = blockDataContext.getBlockData("rxd",start30d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("rxd",start30d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start30d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(30);
dto.setLuck30d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());
@ -3440,7 +3439,7 @@ public class DataTask {
useAggregated = blockPerDays.size() >= 90;
blockData = blockDataContext.getBlockData("rxd",start90d, end,blockPerDays, useAggregated);
throreticalBlocks= getTheoreticalBlocks("rxd",start90d, end, blockData);
throreticalBlocks= getTheoreticalBlocks("rxd",PoolUnits.RXD.gethRate(),start90d, end, blockData);
actualBlocks = poolMapper.selectPoolBlock(90);
dto.setLuck90d(BigDecimal.valueOf(actualBlocks).divide(throreticalBlocks,8, RoundingMode.HALF_UP).doubleValue());