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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
        indexedThisRun++;
 | 
			
		||||
@ -941,12 +948,17 @@ class Blocks {
 | 
			
		||||
          };
 | 
			
		||||
        }),
 | 
			
		||||
      };
 | 
			
		||||
    } else {
 | 
			
		||||
      if (config.MEMPOOL.BACKEND === 'esplora') {
 | 
			
		||||
        const txs = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx));
 | 
			
		||||
        summary = this.summarizeBlockTransactions(hash, txs);
 | 
			
		||||
      } else {
 | 
			
		||||
        // Call Core RPC
 | 
			
		||||
        const block = await bitcoinClient.getBlock(hash, 2);
 | 
			
		||||
        summary = this.summarizeBlock(block);
 | 
			
		||||
        height = block.height;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (height == null) {
 | 
			
		||||
      const block = await bitcoinApi.$getBlock(hash);
 | 
			
		||||
      height = block.height;
 | 
			
		||||
@ -1068,8 +1080,17 @@ class Blocks {
 | 
			
		||||
      if (Common.blocksSummariesIndexingEnabled() && cleanBlock.fee_amt_percentiles === null) {
 | 
			
		||||
        cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
 | 
			
		||||
        if (cleanBlock.fee_amt_percentiles === null) {
 | 
			
		||||
 | 
			
		||||
          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);
 | 
			
		||||
          const summary = this.summarizeBlock(block);
 | 
			
		||||
            summary = this.summarizeBlock(block);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          await BlocksSummariesRepository.$saveTransactions(cleanBlock.height, cleanBlock.hash, summary.transactions);
 | 
			
		||||
          cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
 | 
			
		||||
        }
 | 
			
		||||
@ -1129,19 +1150,29 @@ class Blocks {
 | 
			
		||||
    return this.currentBlockHeight;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async $indexCPFP(hash: string, height: number): Promise<void> {
 | 
			
		||||
  public async $indexCPFP(hash: string, height: number, txs?: TransactionExtended[]): Promise<CpfpSummary> {
 | 
			
		||||
    let transactions = txs;
 | 
			
		||||
    if (!transactions) {
 | 
			
		||||
      if (config.MEMPOOL.BACKEND === 'esplora') {
 | 
			
		||||
        transactions = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx));
 | 
			
		||||
      }
 | 
			
		||||
      if (!transactions) {
 | 
			
		||||
        const block = await bitcoinClient.getBlock(hash, 2);
 | 
			
		||||
    const transactions = block.tx.map(tx => {
 | 
			
		||||
        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);
 | 
			
		||||
 | 
			
		||||
    const effectiveFeeStats = Common.calcEffectiveFeeStatistics(summary.transactions);
 | 
			
		||||
    await blocksRepository.$saveEffectiveFeeStats(hash, effectiveFeeStats);
 | 
			
		||||
 | 
			
		||||
    return summary;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  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 DB from '../database';
 | 
			
		||||
import logger from '../logger';
 | 
			
		||||
@ -12,6 +13,7 @@ import config from '../config';
 | 
			
		||||
import chainTips from '../api/chain-tips';
 | 
			
		||||
import blocks from '../api/blocks';
 | 
			
		||||
import BlocksAuditsRepository from './BlocksAuditsRepository';
 | 
			
		||||
import transactionUtils from '../api/transaction-utils';
 | 
			
		||||
 | 
			
		||||
interface DatabaseBlock {
 | 
			
		||||
  id: string;
 | 
			
		||||
@ -1036,8 +1038,17 @@ class BlocksRepository {
 | 
			
		||||
    {
 | 
			
		||||
      extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
 | 
			
		||||
      if (extras.feePercentiles === null) {
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
        const summary = blocks.summarizeBlock(block);
 | 
			
		||||
          summary = blocks.summarizeBlock(block);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await BlocksSummariesRepository.$saveTransactions(dbBlk.height, dbBlk.id, summary.transactions);
 | 
			
		||||
        extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user