Use regexes instead of tags

This commit is contained in:
nymkappa 2023-02-24 21:35:13 +09:00
parent c2f5cb9529
commit ad9e42db26
No known key found for this signature in database
GPG Key ID: E155910B16E8BD04
3 changed files with 21 additions and 13 deletions

View File

@ -13,24 +13,32 @@ class PoolsParser {
'addresses': '[]', 'addresses': '[]',
'slug': 'unknown' 'slug': 'unknown'
}; };
private uniqueLogs: string[] = [];
private uniqueLog(loggerFunction: any, msg: string): void {
if (this.uniqueLogs.includes(msg)) {
return;
}
this.uniqueLogs.push(msg);
loggerFunction(msg);
}
public setMiningPools(pools): void { public setMiningPools(pools): void {
this.miningPools = pools; for (const pool of pools) {
for (const pool of this.miningPools) { pool.regexes = pool.tags;
pool.regexes = JSON.stringify(pool.tags); delete(pool.tags);
pool.addresses = JSON.stringify(pool.addresses);
delete pool.tags;
} }
this.miningPools = pools;
} }
/** /**
* Populate our db with updated mining pool definition * Populate our db with updated mining pool definition
* @param pools * @param pools
*/ */
public async migratePoolsJson(pools: any[]): Promise<void> { public async migratePoolsJson(): Promise<void> {
await this.$insertUnknownPool(); await this.$insertUnknownPool();
for (const pool of pools) { for (const pool of this.miningPools) {
if (!pool.id) { if (!pool.id) {
logger.info(`Mining pool ${pool.name} has no unique 'id' defined. Skipping.`); logger.info(`Mining pool ${pool.name} has no unique 'id' defined. Skipping.`);
continue; continue;
@ -56,10 +64,10 @@ class PoolsParser {
await PoolsRepository.$updateMiningPoolLink(poolDB.id, pool.link); await PoolsRepository.$updateMiningPoolLink(poolDB.id, pool.link);
} }
if (JSON.stringify(pool.addresses) !== poolDB.addresses || if (JSON.stringify(pool.addresses) !== poolDB.addresses ||
JSON.stringify(pool.tags) !== 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. If 'AUTOMATIC_BLOCK_REINDEXING' is enabled, we will re-index its blocks and 'unknown' blocks`);
await PoolsRepository.$updateMiningPoolTags(poolDB.id, pool.addresses, pool.tags); await PoolsRepository.$updateMiningPoolTags(poolDB.id, pool.addresses, pool.regexes);
await this.$deleteBlocksForPool(poolDB); await this.$deleteBlocksForPool(poolDB);
} }
} }
@ -119,7 +127,7 @@ class PoolsParser {
); );
const oldestBlockHeight = oldestPoolBlock.length ?? 0 > 0 ? oldestPoolBlock[0].height : 130635; const oldestBlockHeight = oldestPoolBlock.length ?? 0 > 0 ? oldestPoolBlock[0].height : 130635;
const [unknownPool] = await DB.query(`SELECT id from pools where slug = "unknown"`); const [unknownPool] = await DB.query(`SELECT id from pools where slug = "unknown"`);
logger.notice(`Deleting blocks with unknown mining pool from height ${oldestBlockHeight} for re-indexing`); this.uniqueLog(logger.notice, `Deleting blocks with unknown mining pool from height ${oldestBlockHeight} for re-indexing`);
await DB.query(` await DB.query(`
DELETE FROM blocks DELETE FROM blocks
WHERE pool_id = ? AND height >= ${oldestBlockHeight}`, WHERE pool_id = ? AND height >= ${oldestBlockHeight}`,
@ -135,7 +143,7 @@ class PoolsParser {
private async $deleteUnknownBlocks(): Promise<void> { private async $deleteUnknownBlocks(): Promise<void> {
const [unknownPool] = await DB.query(`SELECT id from pools where slug = "unknown"`); const [unknownPool] = await DB.query(`SELECT id from pools where slug = "unknown"`);
logger.notice(`Deleting blocks with unknown mining pool from height 130635 for re-indexing`); this.uniqueLog(logger.notice, `Deleting blocks with unknown mining pool from height 130635 for re-indexing`);
await DB.query(` await DB.query(`
DELETE FROM blocks DELETE FROM blocks
WHERE pool_id = ? AND height >= 130635`, WHERE pool_id = ? AND height >= 130635`,

View File

@ -153,7 +153,7 @@ class PoolsRepository {
await DB.query(` await DB.query(`
INSERT INTO pools INSERT INTO pools
SET name = ?, link = ?, addresses = ?, regexes = ?, slug = ?, unique_id = ?`, SET name = ?, link = ?, addresses = ?, regexes = ?, slug = ?, unique_id = ?`,
[pool.name, pool.link, JSON.stringify(pool.addresses), JSON.stringify(pool.tags), slug, pool.id] [pool.name, pool.link, JSON.stringify(pool.addresses), JSON.stringify(pool.regexes), slug, pool.id]
); );
} catch (e: any) { } catch (e: any) {
logger.err(`Cannot insert new mining pool into db. Reason: ` + (e instanceof Error ? e.message : e)); logger.err(`Cannot insert new mining pool into db. Reason: ` + (e instanceof Error ? e.message : e));

View File

@ -75,7 +75,7 @@ class PoolsUpdater {
try { try {
await DB.query('START TRANSACTION;'); await DB.query('START TRANSACTION;');
await poolsParser.migratePoolsJson(poolsJson); await poolsParser.migratePoolsJson();
await this.updateDBSha(githubSha); await this.updateDBSha(githubSha);
await DB.query('START TRANSACTION;'); await DB.query('START TRANSACTION;');
await DB.query('COMMIT;'); await DB.query('COMMIT;');