From e3e7271c9d6e23e82a39fbdaec3476f21cc5647b Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Feb 2023 17:31:07 +0900 Subject: [PATCH 1/3] Add avg mining pool block mathrate in pools stats API --- backend/src/api/mining/mining.ts | 1 + backend/src/mempool.interfaces.ts | 1 + backend/src/repositories/PoolsRepository.ts | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 83e810d43..8f698dfb6 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -100,6 +100,7 @@ class Mining { rank: rank++, emptyBlocks: emptyBlocksCount.length > 0 ? emptyBlocksCount[0]['count'] : 0, slug: poolInfo.slug, + avgMatchRate: Math.round(100 * poolInfo.avgMatchRate) / 100, }; poolsStats.push(poolStat); }); diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index f79786279..44bbf0ac2 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -16,6 +16,7 @@ export interface PoolInfo { link: string; blockCount: number; slug: string; + avgMatchRate: number; } export interface PoolStats extends PoolInfo { diff --git a/backend/src/repositories/PoolsRepository.ts b/backend/src/repositories/PoolsRepository.ts index c7cc6cba3..56cc2b3bc 100644 --- a/backend/src/repositories/PoolsRepository.ts +++ b/backend/src/repositories/PoolsRepository.ts @@ -27,16 +27,25 @@ class PoolsRepository { public async $getPoolsInfo(interval: string | null = null): Promise { interval = Common.getSqlInterval(interval); - let query = `SELECT COUNT(height) as blockCount, pool_id as poolId, pools.name as name, pools.link as link, slug + let query = ` + SELECT + COUNT(blocks.height) As blockCount, + pool_id AS poolId, + pools.name AS name, + pools.link AS link, + slug, + AVG(blocks_audits.match_rate) AS avgMatchRate FROM blocks - JOIN pools on pools.id = pool_id`; + JOIN pools on pools.id = pool_id + LEFT JOIN blocks_audits ON blocks_audits.height = blocks.height + `; if (interval) { query += ` WHERE blocks.blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY pool_id - ORDER BY COUNT(height) DESC`; + ORDER BY COUNT(blocks.height) DESC`; try { const [rows] = await DB.query(query); From 0dc2a598c3487223be8f2b24d98f017b444c9602 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Feb 2023 17:47:45 +0900 Subject: [PATCH 2/3] Show avg block heath in pool ranking pie chart --- backend/src/api/mining/mining.ts | 2 +- backend/src/mempool.interfaces.ts | 2 +- .../pool-ranking/pool-ranking.component.html | 14 ++++++++++++++ .../pool-ranking/pool-ranking.component.ts | 6 ++++++ frontend/src/app/interfaces/node-api.interface.ts | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 8f698dfb6..edcb5b2e5 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -100,7 +100,7 @@ class Mining { rank: rank++, emptyBlocks: emptyBlocksCount.length > 0 ? emptyBlocksCount[0]['count'] : 0, slug: poolInfo.slug, - avgMatchRate: Math.round(100 * poolInfo.avgMatchRate) / 100, + avgMatchRate: poolInfo.avgMatchRate !== null ? Math.round(100 * poolInfo.avgMatchRate) / 100 : null, }; poolsStats.push(poolStat); }); diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index 44bbf0ac2..6b258c173 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -16,7 +16,7 @@ export interface PoolInfo { link: string; blockCount: number; slug: string; - avgMatchRate: number; + avgMatchRate: number | null; } export interface PoolStats extends PoolInfo { diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 48f2407e8..1d82867d8 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -92,6 +92,8 @@ Pool Hashrate Blocks + Avg Health Empty blocks @@ -105,6 +107,18 @@ {{ pool.lastEstimatedHashrate }} {{ miningStats.miningUnits.hashrateUnit }} {{ pool['blockText'] }} + + {{ pool.avgMatchRate }}% + + Unknown + + {{ pool.emptyBlocks }} ({{ pool.emptyBlockRatio }}%) diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts index 214318bd5..135267b60 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -26,6 +26,8 @@ export class PoolRankingComponent implements OnInit { miningWindowPreference: string; radioGroupForm: UntypedFormGroup; + auditAvailable = false; + indexingAvailable = false; isLoading = true; chartOptions: EChartsOption = {}; chartInitOptions = { @@ -60,6 +62,10 @@ export class PoolRankingComponent implements OnInit { this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference }); this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference); + this.indexingAvailable = (this.stateService.env.BASE_MODULE === 'mempool' && + this.stateService.env.MINING_DASHBOARD === true); + this.auditAvailable = this.indexingAvailable && this.stateService.env.AUDIT; + this.route .fragment .subscribe((fragment) => { diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index c11cb5828..8fa30a723 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -73,6 +73,7 @@ export interface SinglePoolStats { emptyBlockRatio: string; logo: string; slug: string; + avgMatchRate: number; } export interface PoolsStats { blockCount: number; From 14be0fc54798724ce09b3f709e70e618837cf877 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Feb 2023 18:13:56 +0900 Subject: [PATCH 3/3] Hide pool share on mobile in pool ranking --- .../app/components/pool-ranking/pool-ranking.component.html | 4 +++- .../app/components/pool-ranking/pool-ranking.component.ts | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 1d82867d8..35ab709c5 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -106,7 +106,9 @@ {{ pool.name }} {{ pool.lastEstimatedHashrate }} {{ miningStats.miningUnits.hashrateUnit }} - {{ pool['blockText'] }} + + {{ pool.blockCount }} ({{ pool.share }}%) + { - data.pools = data.pools.map((pool: SinglePoolStats) => this.formatPoolUI(pool)); data['minersLuck'] = (100 * (data.blockCount / 1008)).toFixed(2); // luck 1w return data; }), @@ -110,11 +109,6 @@ export class PoolRankingComponent implements OnInit { ); } - formatPoolUI(pool: SinglePoolStats) { - pool['blockText'] = pool.blockCount.toString() + ` (${pool.share}%)`; - return pool; - } - generatePoolsChartSerieData(miningStats) { let poolShareThreshold = 0.5; if (isMobile()) {