From 0b4615cbf09e718e5d1b581fe07b0d52a303c32b Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 30 May 2023 10:05:10 -0700 Subject: [PATCH] [indexer] reindex diff adjustments and hashrates upon mining pool update --- backend/src/api/mining/mining.ts | 19 +++++++++++++++++++ backend/src/api/pools-parser.ts | 11 ++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 20da92de3..4fb5aeda0 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -13,11 +13,15 @@ import BlocksAuditsRepository from '../../repositories/BlocksAuditsRepository'; import PricesRepository from '../../repositories/PricesRepository'; import { bitcoinCoreApi } from '../bitcoin/bitcoin-api-factory'; import { IEsploraApi } from '../bitcoin/esplora-api.interface'; +import database from '../../database'; class Mining { private blocksPriceIndexingRunning = false; public lastHashrateIndexingDate: number | null = null; public lastWeeklyHashrateIndexingDate: number | null = null; + + public reindexHashrateRequested = false; + public reindexDifficultyAdjustmentRequested = false; /** * Get historical blocks health @@ -289,6 +293,14 @@ class Mining { * Generate daily hashrate data */ public async $generateNetworkHashrateHistory(): Promise { + // If a re-index was requested, truncate first + if (this.reindexHashrateRequested === true) { + logger.notice(`hashrates will now be re-indexed`); + await database.query(`TRUNCATE hashrates`); + this.lastHashrateIndexingDate = 0; + this.reindexHashrateRequested = false; + } + // We only run this once a day around midnight const today = new Date().getUTCDate(); if (today === this.lastHashrateIndexingDate) { @@ -394,6 +406,13 @@ class Mining { * Index difficulty adjustments */ public async $indexDifficultyAdjustments(): Promise { + // If a re-index was requested, truncate first + if (this.reindexDifficultyAdjustmentRequested === true) { + logger.notice(`difficulty_adjustments will now be re-indexed`); + await database.query(`TRUNCATE difficulty_adjustments`); + this.reindexDifficultyAdjustmentRequested = false; + } + const indexedHeightsArray = await DifficultyAdjustmentsRepository.$getAdjustmentsHeights(); const indexedHeights = {}; for (const height of indexedHeightsArray) { diff --git a/backend/src/api/pools-parser.ts b/backend/src/api/pools-parser.ts index 0d34925ab..f1619cac4 100644 --- a/backend/src/api/pools-parser.ts +++ b/backend/src/api/pools-parser.ts @@ -4,6 +4,7 @@ import config from '../config'; import PoolsRepository from '../repositories/PoolsRepository'; import { PoolTag } from '../mempool.interfaces'; import diskCache from './disk-cache'; +import mining from './mining/mining'; class PoolsParser { miningPools: any[] = []; @@ -73,7 +74,7 @@ class PoolsParser { if (JSON.stringify(pool.addresses) !== poolDB.addresses || JSON.stringify(pool.regexes) !== poolDB.regexes) { // Pool addresses changed or coinbase tags changed - logger.notice(`Updating addresses and/or coinbase tags for ${pool.name} mining pool. If 'AUTOMATIC_BLOCK_REINDEXING' is enabled, we will re-index its blocks and 'unknown' blocks`); + logger.notice(`Updating addresses and/or coinbase tags for ${pool.name} mining pool.`); await PoolsRepository.$updateMiningPoolTags(poolDB.id, pool.addresses, pool.regexes); await this.$deleteBlocksForPool(poolDB); } @@ -142,6 +143,10 @@ class PoolsParser { WHERE pool_id = ?`, [pool.id] ); + + // Re-index hashrates and difficulty adjustments later + mining.reindexHashrateRequested = true; + mining.reindexDifficultyAdjustmentRequested = true; } private async $deleteUnknownBlocks(): Promise { @@ -152,6 +157,10 @@ class PoolsParser { WHERE pool_id = ? AND height >= 130635`, [unknownPool[0].id] ); + + // Re-index hashrates and difficulty adjustments later + mining.reindexHashrateRequested = true; + mining.reindexDifficultyAdjustmentRequested = true; } }