[indexer] reindex diff adjustments and hashrates upon mining pool update
This commit is contained in:
parent
126a75ed45
commit
0b4615cbf0
@ -13,12 +13,16 @@ import BlocksAuditsRepository from '../../repositories/BlocksAuditsRepository';
|
|||||||
import PricesRepository from '../../repositories/PricesRepository';
|
import PricesRepository from '../../repositories/PricesRepository';
|
||||||
import { bitcoinCoreApi } from '../bitcoin/bitcoin-api-factory';
|
import { bitcoinCoreApi } from '../bitcoin/bitcoin-api-factory';
|
||||||
import { IEsploraApi } from '../bitcoin/esplora-api.interface';
|
import { IEsploraApi } from '../bitcoin/esplora-api.interface';
|
||||||
|
import database from '../../database';
|
||||||
|
|
||||||
class Mining {
|
class Mining {
|
||||||
private blocksPriceIndexingRunning = false;
|
private blocksPriceIndexingRunning = false;
|
||||||
public lastHashrateIndexingDate: number | null = null;
|
public lastHashrateIndexingDate: number | null = null;
|
||||||
public lastWeeklyHashrateIndexingDate: number | null = null;
|
public lastWeeklyHashrateIndexingDate: number | null = null;
|
||||||
|
|
||||||
|
public reindexHashrateRequested = false;
|
||||||
|
public reindexDifficultyAdjustmentRequested = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get historical blocks health
|
* Get historical blocks health
|
||||||
*/
|
*/
|
||||||
@ -289,6 +293,14 @@ class Mining {
|
|||||||
* Generate daily hashrate data
|
* Generate daily hashrate data
|
||||||
*/
|
*/
|
||||||
public async $generateNetworkHashrateHistory(): Promise<void> {
|
public async $generateNetworkHashrateHistory(): Promise<void> {
|
||||||
|
// 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
|
// We only run this once a day around midnight
|
||||||
const today = new Date().getUTCDate();
|
const today = new Date().getUTCDate();
|
||||||
if (today === this.lastHashrateIndexingDate) {
|
if (today === this.lastHashrateIndexingDate) {
|
||||||
@ -394,6 +406,13 @@ class Mining {
|
|||||||
* Index difficulty adjustments
|
* Index difficulty adjustments
|
||||||
*/
|
*/
|
||||||
public async $indexDifficultyAdjustments(): Promise<void> {
|
public async $indexDifficultyAdjustments(): Promise<void> {
|
||||||
|
// 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 indexedHeightsArray = await DifficultyAdjustmentsRepository.$getAdjustmentsHeights();
|
||||||
const indexedHeights = {};
|
const indexedHeights = {};
|
||||||
for (const height of indexedHeightsArray) {
|
for (const height of indexedHeightsArray) {
|
||||||
|
@ -4,6 +4,7 @@ import config from '../config';
|
|||||||
import PoolsRepository from '../repositories/PoolsRepository';
|
import PoolsRepository from '../repositories/PoolsRepository';
|
||||||
import { PoolTag } from '../mempool.interfaces';
|
import { PoolTag } from '../mempool.interfaces';
|
||||||
import diskCache from './disk-cache';
|
import diskCache from './disk-cache';
|
||||||
|
import mining from './mining/mining';
|
||||||
|
|
||||||
class PoolsParser {
|
class PoolsParser {
|
||||||
miningPools: any[] = [];
|
miningPools: any[] = [];
|
||||||
@ -73,7 +74,7 @@ class PoolsParser {
|
|||||||
if (JSON.stringify(pool.addresses) !== poolDB.addresses ||
|
if (JSON.stringify(pool.addresses) !== poolDB.addresses ||
|
||||||
JSON.stringify(pool.regexes) !== poolDB.regexes) {
|
JSON.stringify(pool.regexes) !== poolDB.regexes) {
|
||||||
// Pool addresses changed or coinbase tags changed
|
// 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 PoolsRepository.$updateMiningPoolTags(poolDB.id, pool.addresses, pool.regexes);
|
||||||
await this.$deleteBlocksForPool(poolDB);
|
await this.$deleteBlocksForPool(poolDB);
|
||||||
}
|
}
|
||||||
@ -142,6 +143,10 @@ class PoolsParser {
|
|||||||
WHERE pool_id = ?`,
|
WHERE pool_id = ?`,
|
||||||
[pool.id]
|
[pool.id]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Re-index hashrates and difficulty adjustments later
|
||||||
|
mining.reindexHashrateRequested = true;
|
||||||
|
mining.reindexDifficultyAdjustmentRequested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async $deleteUnknownBlocks(): Promise<void> {
|
private async $deleteUnknownBlocks(): Promise<void> {
|
||||||
@ -152,6 +157,10 @@ class PoolsParser {
|
|||||||
WHERE pool_id = ? AND height >= 130635`,
|
WHERE pool_id = ? AND height >= 130635`,
|
||||||
[unknownPool[0].id]
|
[unknownPool[0].id]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Re-index hashrates and difficulty adjustments later
|
||||||
|
mining.reindexHashrateRequested = true;
|
||||||
|
mining.reindexDifficultyAdjustmentRequested = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user