mirror of
https://github.com/mempool/mempool.git
synced 2025-04-11 21:39:20 +02:00
[blocks] add 2 endpoints to retreive pools-v2.json hashes
This commit is contained in:
parent
c8e967cc0c
commit
ac997f3d9e
@ -21,6 +21,7 @@ import transactionRepository from '../../repositories/TransactionRepository';
|
||||
import rbfCache from '../rbf-cache';
|
||||
import { calculateMempoolTxCpfp } from '../cpfp';
|
||||
import { handleError } from '../../utils/api';
|
||||
import poolsUpdater from '../../tasks/pools-updater';
|
||||
|
||||
class BitcoinRoutes {
|
||||
public initRoutes(app: Application) {
|
||||
@ -46,6 +47,8 @@ class BitcoinRoutes {
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/audit-summary', this.getBlockAuditSummary)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/tx/:txid/audit', this.$getBlockTxAuditSummary)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/height', this.getBlockTipHeight)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/list', this.getBlockDefinitionHashes)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/current', this.getCurrentBlockDefinitionHash)
|
||||
.post(config.MEMPOOL.API_URL_PREFIX + 'psbt/addparents', this.postPsbtCompletion)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from', this.getBlocksByBulk.bind(this))
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from/:to', this.getBlocksByBulk.bind(this))
|
||||
@ -657,6 +660,34 @@ class BitcoinRoutes {
|
||||
}
|
||||
}
|
||||
|
||||
private async getBlockDefinitionHashes(req: Request, res: Response) {
|
||||
try {
|
||||
const result = await blocks.$getBlockDefinitionHashes();
|
||||
if (!result) {
|
||||
handleError(req, res, 503, `Service Temporarily Unavailable`);
|
||||
return;
|
||||
}
|
||||
res.setHeader('content-type', 'application/json');
|
||||
res.send(result);
|
||||
} catch (e) {
|
||||
handleError(req, res, 500, e instanceof Error ? e.message : e);
|
||||
}
|
||||
}
|
||||
|
||||
private async getCurrentBlockDefinitionHash(req: Request, res: Response) {
|
||||
try {
|
||||
const currentSha = await poolsUpdater.getShaFromDb();
|
||||
if (!currentSha) {
|
||||
handleError(req, res, 503, `Service Temporarily Unavailable`);
|
||||
return;
|
||||
}
|
||||
res.setHeader('content-type', 'text/plain');
|
||||
res.send(currentSha);
|
||||
} catch (e) {
|
||||
handleError(req, res, 500, e instanceof Error ? e.message : e);
|
||||
}
|
||||
}
|
||||
|
||||
private getBlockTipHeight(req: Request, res: Response) {
|
||||
try {
|
||||
const result = blocks.getCurrentBlockHeight();
|
||||
|
@ -33,8 +33,8 @@ import AccelerationRepository from '../repositories/AccelerationRepository';
|
||||
import { calculateFastBlockCpfp, calculateGoodBlockCpfp } from './cpfp';
|
||||
import mempool from './mempool';
|
||||
import CpfpRepository from '../repositories/CpfpRepository';
|
||||
import accelerationApi from './services/acceleration';
|
||||
import { parseDATUMTemplateCreator } from '../utils/bitcoin-script';
|
||||
import database from '../database';
|
||||
|
||||
class Blocks {
|
||||
private blocks: BlockExtended[] = [];
|
||||
@ -1462,6 +1462,19 @@ class Blocks {
|
||||
// not a fatal error, we'll try again next time the indexer runs
|
||||
}
|
||||
}
|
||||
|
||||
public async $getBlockDefinitionHashes(): Promise<string[]> {
|
||||
try {
|
||||
const [rows]: any = await database.query(`SELECT DISTINCT(definition_hash) FROM blocks`);
|
||||
if (rows && rows.length) {
|
||||
return rows.map(r => r.definition_hash);
|
||||
}
|
||||
} catch (e) {
|
||||
// we just return an empty array
|
||||
}
|
||||
logger.debug(`Unable to retreive list of blocks.definition_hash from db`);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export default new Blocks();
|
||||
|
@ -779,6 +779,7 @@ class DatabaseMigration {
|
||||
// blocks pools-v2.json hash
|
||||
if (databaseSchemaVersion < 92) {
|
||||
await this.$executeQuery('ALTER TABLE `blocks` ADD definition_hash varchar(255) NOT NULL DEFAULT "5f32a67401929169f225f5db43c9efa795d1b159"');
|
||||
await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `definition_hash` (`definition_hash`)');
|
||||
await this.updateToSchemaVersion(92);
|
||||
}
|
||||
}
|
||||
|
@ -325,6 +325,8 @@ export interface BlockExtension {
|
||||
// Requires coinstatsindex, will be set to NULL otherwise
|
||||
utxoSetSize: number | null;
|
||||
totalInputAmt: number | null;
|
||||
// pools-v2.json git hash
|
||||
definitionHash: string | undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -121,7 +121,7 @@ class PoolsUpdater {
|
||||
/**
|
||||
* Fetch our latest pools-v2.json sha from the db
|
||||
*/
|
||||
private async getShaFromDb(): Promise<string | null> {
|
||||
public async getShaFromDb(): Promise<string | null> {
|
||||
try {
|
||||
const [rows]: any[] = await DB.query('SELECT string FROM state WHERE name="pools_json_sha"');
|
||||
return (rows.length > 0 ? rows[0].string : null);
|
||||
|
Loading…
x
Reference in New Issue
Block a user