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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user