mirror of
https://github.com/mempool/mempool.git
synced 2025-03-13 11:36:07 +01:00
Add pools.json to EXTERNAL_ASSETS - Now supports updating the table
This commit is contained in:
parent
2848f56c2b
commit
979c52d3c4
2 changed files with 63 additions and 35 deletions
|
@ -14,7 +14,9 @@
|
|||
"MEMPOOL_BLOCKS_AMOUNT": 8,
|
||||
"PRICE_FEED_UPDATE_INTERVAL": 3600,
|
||||
"USE_SECOND_NODE_FOR_MINFEE": false,
|
||||
"EXTERNAL_ASSETS": []
|
||||
"EXTERNAL_ASSETS": [
|
||||
"https://mempool.space/resources/pools.json"
|
||||
]
|
||||
},
|
||||
"CORE_RPC": {
|
||||
"HOST": "127.0.0.1",
|
||||
|
|
|
@ -14,20 +14,14 @@ class PoolsParser {
|
|||
* Parse the pools.json file, consolidate the data and dump it into the database
|
||||
*/
|
||||
public async migratePoolsJson() {
|
||||
const connection = await DB.pool.getConnection();
|
||||
logger.info('Importing pools.json to the database');
|
||||
let connection = await DB.pool.getConnection();
|
||||
|
||||
// Check if the pools table does not have data already, for now we do not support updating it
|
||||
// but that will come in a later version
|
||||
let [rows] = await connection.query<any>({ sql: 'SELECT count(id) as count from pools;', timeout: 120000 });
|
||||
if (rows[0].count !== 0) {
|
||||
logger.info('Pools table already contain data, updating it is not yet supported, skipping.');
|
||||
connection.release();
|
||||
return;
|
||||
}
|
||||
// Get existing pools from the db
|
||||
const [existingPools] = await connection.query<any>({ sql: 'SELECT * FROM pools;', timeout: 120000 }); // We clear the table before insertion
|
||||
|
||||
logger.info('Open ../frontend/cypress/fixtures/pools.json');
|
||||
const fileContent: string = readFileSync('../frontend/cypress/fixtures/pools.json','utf8');
|
||||
logger.info('Open ./pools.json');
|
||||
const fileContent: string = readFileSync('./pools.json','utf8');
|
||||
const poolsJson: object = JSON.parse(fileContent);
|
||||
|
||||
// First we save every entries without paying attention to pool duplication
|
||||
|
@ -65,7 +59,8 @@ class PoolsParser {
|
|||
logger.info(`Found ${poolNames.length} unique mining pools`);
|
||||
|
||||
// Finally, we generate the final consolidated pools data
|
||||
let finalPoolData: Pool[] = [];
|
||||
let finalPoolDataAdd: Pool[] = [];
|
||||
let finalPoolDataUpdate: Pool[] = [];
|
||||
for (let i = 0; i < poolNames.length; ++i) {
|
||||
let allAddresses: string[] = [];
|
||||
let allRegexes: string[] = [];
|
||||
|
@ -76,34 +71,65 @@ class PoolsParser {
|
|||
allRegexes = allRegexes.concat(match[y].regexes);
|
||||
}
|
||||
|
||||
finalPoolData.push({
|
||||
'name': poolNames[i].replace("'", "''"),
|
||||
'link': match[0].link,
|
||||
'regexes': allRegexes,
|
||||
'addresses': allAddresses,
|
||||
})
|
||||
const finalPoolName = poolNames[i].replace("'", "''"); // To support single quote in names when doing db queries
|
||||
|
||||
if (existingPools.find((pool) => { return pool.name === poolNames[i]}) !== undefined) {
|
||||
logger.debug(`Update '${finalPoolName} mining pool`);
|
||||
finalPoolDataUpdate.push({
|
||||
'name': finalPoolName,
|
||||
'link': match[0].link,
|
||||
'regexes': allRegexes,
|
||||
'addresses': allAddresses,
|
||||
})
|
||||
} else {
|
||||
logger.debug(`Add '${finalPoolName} mining pool`);
|
||||
finalPoolDataAdd.push({
|
||||
'name': finalPoolName,
|
||||
'link': match[0].link,
|
||||
'regexes': allRegexes,
|
||||
'addresses': allAddresses,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Manually add the 'unknown pool'
|
||||
finalPoolData.push({
|
||||
'name': 'Unknown',
|
||||
'link': 'https://learnmeabitcoin.com/technical/coinbase-transaction',
|
||||
regexes: [],
|
||||
addresses: [],
|
||||
})
|
||||
|
||||
// Dump everything into the database
|
||||
logger.info(`Insert mining pool info into the database`);
|
||||
let query: string = 'INSERT INTO pools(name, link, regexes, addresses) VALUES ';
|
||||
for (let i = 0; i < finalPoolData.length; ++i) {
|
||||
query += `('${finalPoolData[i].name}', '${finalPoolData[i].link}',
|
||||
'${JSON.stringify(finalPoolData[i].regexes)}', '${JSON.stringify(finalPoolData[i].addresses)}'),`;
|
||||
if (existingPools.find((pool) => { return pool.name === "Uknown"}) !== undefined) {
|
||||
finalPoolDataAdd.push({
|
||||
'name': 'Unknown',
|
||||
'link': 'https://learnmeabitcoin.com/technical/coinbase-transaction',
|
||||
regexes: [],
|
||||
addresses: [],
|
||||
})
|
||||
}
|
||||
|
||||
logger.info(`Update pools table now`);
|
||||
|
||||
// Add new mining pools into the database
|
||||
let queryAdd: string = 'INSERT INTO pools(name, link, regexes, addresses) VALUES ';
|
||||
for (let i = 0; i < finalPoolDataAdd.length; ++i) {
|
||||
queryAdd += `('${finalPoolDataAdd[i].name}', '${finalPoolDataAdd[i].link}',
|
||||
'${JSON.stringify(finalPoolDataAdd[i].regexes)}', '${JSON.stringify(finalPoolDataAdd[i].addresses)}'),`;
|
||||
}
|
||||
queryAdd = queryAdd.slice(0, -1) + ';';
|
||||
|
||||
// Add new mining pools into the database
|
||||
let updateQueries: string[] = [];
|
||||
for (let i = 0; i < finalPoolDataUpdate.length; ++i) {
|
||||
updateQueries.push(`
|
||||
UPDATE pools
|
||||
SET name='${finalPoolDataUpdate[i].name}', link='${finalPoolDataUpdate[i].link}',
|
||||
regexes='${JSON.stringify(finalPoolDataUpdate[i].regexes)}', addresses='${JSON.stringify(finalPoolDataUpdate[i].addresses)}'
|
||||
WHERE name='${finalPoolDataUpdate[i].name}'
|
||||
;`);
|
||||
}
|
||||
query = query.slice(0, -1) + ';';
|
||||
|
||||
try {
|
||||
await connection.query<any>({ sql: 'DELETE FROM pools;', timeout: 120000 }); // We clear the table before insertion
|
||||
await connection.query<any>({ sql: query, timeout: 120000 });
|
||||
if (finalPoolDataAdd.length > 0) {
|
||||
await connection.query<any>({ sql: queryAdd, timeout: 120000 });
|
||||
}
|
||||
updateQueries.forEach(async query => {
|
||||
await connection.query<any>({ sql: query, timeout: 120000 });
|
||||
});
|
||||
connection.release();
|
||||
logger.info('Import completed');
|
||||
} catch (e) {
|
||||
|
|
Loading…
Add table
Reference in a new issue