mirror of
https://github.com/mempool/mempool.git
synced 2024-11-19 18:03:00 +01:00
Get block txs from esplora, index CPFP together with summaries
This commit is contained in:
parent
6b7d8d95f7
commit
0d25ef0b5b
@ -438,7 +438,14 @@ class Blocks {
|
|||||||
indexedThisRun = 0;
|
indexedThisRun = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.$getStrippedBlockTransactions(block.hash, true, true); // This will index the block summary
|
|
||||||
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
|
const txs = (await bitcoinApi.$getTxsForBlock(block.hash)).map(tx => transactionUtils.extendTransaction(tx));
|
||||||
|
const cpfpSummary = await this.$indexCPFP(block.hash, block.height, txs);
|
||||||
|
await this.$getStrippedBlockTransactions(block.hash, true, true, cpfpSummary, block.height); // This will index the block summary
|
||||||
|
} else {
|
||||||
|
await this.$getStrippedBlockTransactions(block.hash, true, true); // This will index the block summary
|
||||||
|
}
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
indexedThisRun++;
|
indexedThisRun++;
|
||||||
@ -942,10 +949,15 @@ class Blocks {
|
|||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
// Call Core RPC
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
const block = await bitcoinClient.getBlock(hash, 2);
|
const txs = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx));
|
||||||
summary = this.summarizeBlock(block);
|
summary = this.summarizeBlockTransactions(hash, txs);
|
||||||
height = block.height;
|
} else {
|
||||||
|
// Call Core RPC
|
||||||
|
const block = await bitcoinClient.getBlock(hash, 2);
|
||||||
|
summary = this.summarizeBlock(block);
|
||||||
|
height = block.height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (height == null) {
|
if (height == null) {
|
||||||
const block = await bitcoinApi.$getBlock(hash);
|
const block = await bitcoinApi.$getBlock(hash);
|
||||||
@ -1068,8 +1080,17 @@ class Blocks {
|
|||||||
if (Common.blocksSummariesIndexingEnabled() && cleanBlock.fee_amt_percentiles === null) {
|
if (Common.blocksSummariesIndexingEnabled() && cleanBlock.fee_amt_percentiles === null) {
|
||||||
cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
|
cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
|
||||||
if (cleanBlock.fee_amt_percentiles === null) {
|
if (cleanBlock.fee_amt_percentiles === null) {
|
||||||
const block = await bitcoinClient.getBlock(cleanBlock.hash, 2);
|
|
||||||
const summary = this.summarizeBlock(block);
|
let summary;
|
||||||
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
|
const txs = (await bitcoinApi.$getTxsForBlock(cleanBlock.hash)).map(tx => transactionUtils.extendTransaction(tx));
|
||||||
|
summary = this.summarizeBlockTransactions(cleanBlock.hash, txs);
|
||||||
|
} else {
|
||||||
|
// Call Core RPC
|
||||||
|
const block = await bitcoinClient.getBlock(cleanBlock.hash, 2);
|
||||||
|
summary = this.summarizeBlock(block);
|
||||||
|
}
|
||||||
|
|
||||||
await BlocksSummariesRepository.$saveTransactions(cleanBlock.height, cleanBlock.hash, summary.transactions);
|
await BlocksSummariesRepository.$saveTransactions(cleanBlock.height, cleanBlock.hash, summary.transactions);
|
||||||
cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
|
cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
|
||||||
}
|
}
|
||||||
@ -1129,19 +1150,29 @@ class Blocks {
|
|||||||
return this.currentBlockHeight;
|
return this.currentBlockHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async $indexCPFP(hash: string, height: number): Promise<void> {
|
public async $indexCPFP(hash: string, height: number, txs?: TransactionExtended[]): Promise<CpfpSummary> {
|
||||||
const block = await bitcoinClient.getBlock(hash, 2);
|
let transactions = txs;
|
||||||
const transactions = block.tx.map(tx => {
|
if (!transactions) {
|
||||||
tx.fee *= 100_000_000;
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
return tx;
|
transactions = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx));
|
||||||
});
|
}
|
||||||
|
if (!transactions) {
|
||||||
|
const block = await bitcoinClient.getBlock(hash, 2);
|
||||||
|
transactions = block.tx.map(tx => {
|
||||||
|
tx.fee *= 100_000_000;
|
||||||
|
return tx;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const summary = Common.calculateCpfp(height, transactions);
|
const summary = Common.calculateCpfp(height, transactions as TransactionExtended[]);
|
||||||
|
|
||||||
await this.$saveCpfp(hash, height, summary);
|
await this.$saveCpfp(hash, height, summary);
|
||||||
|
|
||||||
const effectiveFeeStats = Common.calcEffectiveFeeStatistics(summary.transactions);
|
const effectiveFeeStats = Common.calcEffectiveFeeStatistics(summary.transactions);
|
||||||
await blocksRepository.$saveEffectiveFeeStats(hash, effectiveFeeStats);
|
await blocksRepository.$saveEffectiveFeeStats(hash, effectiveFeeStats);
|
||||||
|
|
||||||
|
return summary;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async $saveCpfp(hash: string, height: number, cpfpSummary: CpfpSummary): Promise<void> {
|
public async $saveCpfp(hash: string, height: number, cpfpSummary: CpfpSummary): Promise<void> {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import bitcoinApi from '../api/bitcoin/bitcoin-api-factory';
|
||||||
import { BlockExtended, BlockExtension, BlockPrice, EffectiveFeeStats } from '../mempool.interfaces';
|
import { BlockExtended, BlockExtension, BlockPrice, EffectiveFeeStats } from '../mempool.interfaces';
|
||||||
import DB from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
@ -12,6 +13,7 @@ import config from '../config';
|
|||||||
import chainTips from '../api/chain-tips';
|
import chainTips from '../api/chain-tips';
|
||||||
import blocks from '../api/blocks';
|
import blocks from '../api/blocks';
|
||||||
import BlocksAuditsRepository from './BlocksAuditsRepository';
|
import BlocksAuditsRepository from './BlocksAuditsRepository';
|
||||||
|
import transactionUtils from '../api/transaction-utils';
|
||||||
|
|
||||||
interface DatabaseBlock {
|
interface DatabaseBlock {
|
||||||
id: string;
|
id: string;
|
||||||
@ -1036,8 +1038,17 @@ class BlocksRepository {
|
|||||||
{
|
{
|
||||||
extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
|
extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
|
||||||
if (extras.feePercentiles === null) {
|
if (extras.feePercentiles === null) {
|
||||||
const block = await bitcoinClient.getBlock(dbBlk.id, 2);
|
|
||||||
const summary = blocks.summarizeBlock(block);
|
let summary;
|
||||||
|
if (config.MEMPOOL.BACKEND === 'esplora') {
|
||||||
|
const txs = (await bitcoinApi.$getTxsForBlock(dbBlk.id)).map(tx => transactionUtils.extendTransaction(tx));
|
||||||
|
summary = blocks.summarizeBlockTransactions(dbBlk.id, txs);
|
||||||
|
} else {
|
||||||
|
// Call Core RPC
|
||||||
|
const block = await bitcoinClient.getBlock(dbBlk.id, 2);
|
||||||
|
summary = blocks.summarizeBlock(block);
|
||||||
|
}
|
||||||
|
|
||||||
await BlocksSummariesRepository.$saveTransactions(dbBlk.height, dbBlk.id, summary.transactions);
|
await BlocksSummariesRepository.$saveTransactions(dbBlk.height, dbBlk.id, summary.transactions);
|
||||||
extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
|
extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user