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);