Improve block indexing logging
This commit is contained in:
parent
fac49d0b98
commit
ef43da05c9
@ -42,7 +42,12 @@ class Blocks {
|
|||||||
* @param onlyCoinbase - Set to true if you only need the coinbase transaction
|
* @param onlyCoinbase - Set to true if you only need the coinbase transaction
|
||||||
* @returns Promise<TransactionExtended[]>
|
* @returns Promise<TransactionExtended[]>
|
||||||
*/
|
*/
|
||||||
private async $getTransactionsExtended(blockHash: string, blockHeight: number, onlyCoinbase: boolean): Promise<TransactionExtended[]> {
|
private async $getTransactionsExtended(
|
||||||
|
blockHash: string,
|
||||||
|
blockHeight: number,
|
||||||
|
onlyCoinbase: boolean,
|
||||||
|
quiet: boolean = false,
|
||||||
|
): Promise<TransactionExtended[]> {
|
||||||
const transactions: TransactionExtended[] = [];
|
const transactions: TransactionExtended[] = [];
|
||||||
const txIds: string[] = await bitcoinApi.$getTxIdsForBlock(blockHash);
|
const txIds: string[] = await bitcoinApi.$getTxIdsForBlock(blockHash);
|
||||||
|
|
||||||
@ -58,7 +63,7 @@ class Blocks {
|
|||||||
transactionsFound++;
|
transactionsFound++;
|
||||||
} else if (config.MEMPOOL.BACKEND === 'esplora' || memPool.isInSync() || i === 0) {
|
} else if (config.MEMPOOL.BACKEND === 'esplora' || memPool.isInSync() || i === 0) {
|
||||||
// Otherwise we fetch the tx data through backend services (esplora, electrum, core rpc...)
|
// Otherwise we fetch the tx data through backend services (esplora, electrum, core rpc...)
|
||||||
if (i % (Math.round((txIds.length) / 10)) === 0 || i + 1 === txIds.length) { // Avoid log spam
|
if (!quiet && (i % (Math.round((txIds.length) / 10)) === 0 || i + 1 === txIds.length)) { // Avoid log spam
|
||||||
logger.debug(`Indexing tx ${i + 1} of ${txIds.length} in block #${blockHeight}`);
|
logger.debug(`Indexing tx ${i + 1} of ${txIds.length} in block #${blockHeight}`);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -84,7 +89,9 @@ class Blocks {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.debug(`${transactionsFound} of ${txIds.length} found in mempool. ${transactionsFetched} fetched through backend service.`);
|
if (!quiet) {
|
||||||
|
logger.debug(`${transactionsFound} of ${txIds.length} found in mempool. ${transactionsFetched} fetched through backend service.`);
|
||||||
|
}
|
||||||
|
|
||||||
return transactions;
|
return transactions;
|
||||||
}
|
}
|
||||||
@ -183,6 +190,7 @@ class Blocks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.blockIndexingStarted = true;
|
this.blockIndexingStarted = true;
|
||||||
|
const startedAt = new Date().getTime() / 1000;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let currentBlockHeight = blockchainInfo.blocks;
|
let currentBlockHeight = blockchainInfo.blocks;
|
||||||
@ -197,6 +205,7 @@ class Blocks {
|
|||||||
logger.info(`Indexing blocks from #${currentBlockHeight} to #${lastBlockToIndex}`);
|
logger.info(`Indexing blocks from #${currentBlockHeight} to #${lastBlockToIndex}`);
|
||||||
|
|
||||||
const chunkSize = 10000;
|
const chunkSize = 10000;
|
||||||
|
let totaIndexed = 0;
|
||||||
while (currentBlockHeight >= lastBlockToIndex) {
|
while (currentBlockHeight >= lastBlockToIndex) {
|
||||||
const endBlock = Math.max(0, lastBlockToIndex, currentBlockHeight - chunkSize + 1);
|
const endBlock = Math.max(0, lastBlockToIndex, currentBlockHeight - chunkSize + 1);
|
||||||
|
|
||||||
@ -215,12 +224,17 @@ class Blocks {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
logger.debug(`Indexing block #${blockHeight}`);
|
if (totaIndexed % 100 === 0 || blockHeight === lastBlockToIndex) {
|
||||||
|
const elapsedSeconds = Math.max(1, Math.round((new Date().getTime() / 1000) - startedAt));
|
||||||
|
const blockPerSeconds = Math.round(totaIndexed / elapsedSeconds);
|
||||||
|
logger.debug(`Indexing block #${blockHeight} | ~${blockPerSeconds} blocks/sec | total: ${totaIndexed} | elapsed: ${elapsedSeconds} seconds`);
|
||||||
|
}
|
||||||
const blockHash = await bitcoinApi.$getBlockHash(blockHeight);
|
const blockHash = await bitcoinApi.$getBlockHash(blockHeight);
|
||||||
const block = await bitcoinApi.$getBlock(blockHash);
|
const block = await bitcoinApi.$getBlock(blockHash);
|
||||||
const transactions = await this.$getTransactionsExtended(blockHash, block.height, true);
|
const transactions = await this.$getTransactionsExtended(blockHash, block.height, true, true);
|
||||||
const blockExtended = await this.$getBlockExtended(block, transactions);
|
const blockExtended = await this.$getBlockExtended(block, transactions);
|
||||||
await blocksRepository.$saveBlockInDatabase(blockExtended);
|
await blocksRepository.$saveBlockInDatabase(blockExtended);
|
||||||
|
++totaIndexed;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.err(`Something went wrong while indexing blocks.` + e);
|
logger.err(`Something went wrong while indexing blocks.` + e);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user