Cleanup block before sending response in /blocks-bulk API
Remove block_time Index summaries on the fly
This commit is contained in:
		
							parent
							
								
									086ee68b52
								
							
						
					
					
						commit
						a0488dba76
					
				@ -205,7 +205,7 @@ class Blocks {
 | 
				
			|||||||
      blk.extras.segwitTotalWeight = stats.swtotal_weight;
 | 
					      blk.extras.segwitTotalWeight = stats.swtotal_weight;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (Common.indexingEnabled()) {
 | 
					    if (Common.blocksSummariesIndexingEnabled()) {
 | 
				
			||||||
      blk.extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(block.id);
 | 
					      blk.extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(block.id);
 | 
				
			||||||
      if (blk.extras.feePercentiles !== null) {
 | 
					      if (blk.extras.feePercentiles !== null) {
 | 
				
			||||||
        blk.extras.medianFeeAmt = blk.extras.feePercentiles[3];
 | 
					        blk.extras.medianFeeAmt = blk.extras.feePercentiles[3];
 | 
				
			||||||
@ -798,29 +798,65 @@ class Blocks {
 | 
				
			|||||||
          continue;
 | 
					          continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      delete(block.hash);
 | 
					 | 
				
			||||||
      delete(block.previous_block_hash);
 | 
					 | 
				
			||||||
      delete(block.pool_name);
 | 
					 | 
				
			||||||
      delete(block.pool_link);
 | 
					 | 
				
			||||||
      delete(block.pool_addresses);
 | 
					 | 
				
			||||||
      delete(block.pool_regexes);
 | 
					 | 
				
			||||||
      delete(block.median_timestamp);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // This requires `blocks_summaries` to be available. It takes a very long
 | 
					      // Cleanup fields before sending the response
 | 
				
			||||||
      // time to index this table so we just try to serve the data the best we can
 | 
					      const cleanBlock: any = {
 | 
				
			||||||
      if (block.fee_percentiles === null) {
 | 
					        height: block.height ?? null,
 | 
				
			||||||
        block.fee_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(block.id); 
 | 
					        hash: block.id ?? null,
 | 
				
			||||||
        if (block.fee_percentiles !== null) {
 | 
					        timestamp: block.blockTimestamp ?? null,
 | 
				
			||||||
          block.median_fee_amt = block.fee_percentiles[3];
 | 
					        median_timestamp: block.medianTime ?? null,
 | 
				
			||||||
          await blocksRepository.$saveFeePercentilesForBlockId(block.id, block.fee_percentiles);
 | 
					        previousblockhash: block.previousblockhash ?? null,
 | 
				
			||||||
 | 
					        difficulty: block.difficulty ?? null,
 | 
				
			||||||
 | 
					        header: block.header ?? null,
 | 
				
			||||||
 | 
					        version: block.version ?? null,
 | 
				
			||||||
 | 
					        bits: block.bits ?? null,
 | 
				
			||||||
 | 
					        nonce: block.nonce ?? null,
 | 
				
			||||||
 | 
					        size: block.size ?? null,
 | 
				
			||||||
 | 
					        weight: block.weight ?? null,
 | 
				
			||||||
 | 
					        tx_count: block.tx_count ?? null,
 | 
				
			||||||
 | 
					        merkle_root: block.merkle_root ?? null,
 | 
				
			||||||
 | 
					        reward: block.reward ?? null,
 | 
				
			||||||
 | 
					        total_fee_amt: block.fees ?? null,
 | 
				
			||||||
 | 
					        avg_fee_amt: block.avg_fee ?? null,
 | 
				
			||||||
 | 
					        median_fee_amt: block.median_fee_amt ?? null,
 | 
				
			||||||
 | 
					        fee_amt_percentiles: block.fee_percentiles ?? null,
 | 
				
			||||||
 | 
					        avg_fee_rate: block.avg_fee_rate ?? null,
 | 
				
			||||||
 | 
					        median_fee_rate: block.median_fee ?? null,
 | 
				
			||||||
 | 
					        fee_rate_percentiles: block.fee_span ?? null,
 | 
				
			||||||
 | 
					        total_inputs: block.total_inputs ?? null,
 | 
				
			||||||
 | 
					        total_input_amt: block.total_input_amt ?? null,
 | 
				
			||||||
 | 
					        total_outputs: block.total_outputs ?? null,
 | 
				
			||||||
 | 
					        total_output_amt: block.total_output_amt ?? null,
 | 
				
			||||||
 | 
					        segwit_total_txs: block.segwit_total_txs ?? null,
 | 
				
			||||||
 | 
					        segwit_total_size: block.segwit_total_size ?? null,
 | 
				
			||||||
 | 
					        segwit_total_weight: block.segwit_total_weight ?? null,
 | 
				
			||||||
 | 
					        avg_tx_size: block.avg_tx_size ?? null,
 | 
				
			||||||
 | 
					        utxoset_change: block.utxoset_change ?? null,
 | 
				
			||||||
 | 
					        utxoset_size: block.utxoset_size ?? null,
 | 
				
			||||||
 | 
					        coinbase_raw: block.coinbase_raw ?? null,
 | 
				
			||||||
 | 
					        coinbase_address: block.coinbase_address ?? null,
 | 
				
			||||||
 | 
					        coinbase_signature: block.coinbase_signature ?? null,
 | 
				
			||||||
 | 
					        pool_slug: block.pool_slug ?? null,
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (Common.blocksSummariesIndexingEnabled() && cleanBlock.fee_amt_percentiles === null) {
 | 
				
			||||||
 | 
					        cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
 | 
				
			||||||
 | 
					        if (cleanBlock.fee_amt_percentiles === null) {
 | 
				
			||||||
 | 
					          const block = await bitcoinClient.getBlock(cleanBlock.hash, 2);
 | 
				
			||||||
 | 
					          const summary = this.summarizeBlock(block);
 | 
				
			||||||
 | 
					          await BlocksSummariesRepository.$saveSummary({ height: block.height, mined: summary });
 | 
				
			||||||
 | 
					          cleanBlock.fee_amt_percentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(cleanBlock.hash);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (cleanBlock.fee_amt_percentiles !== null) {
 | 
				
			||||||
 | 
					          cleanBlock.median_fee_amt = cleanBlock.fee_amt_percentiles[3];
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Re-org can happen after indexing so we need to always get the
 | 
					      // Re-org can happen after indexing so we need to always get the
 | 
				
			||||||
      // latest state from core
 | 
					      // latest state from core
 | 
				
			||||||
      block.orphans = chainTips.getOrphanedBlocksAtHeight(block.height);
 | 
					      cleanBlock.orphans = chainTips.getOrphanedBlocksAtHeight(cleanBlock.height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      blocks.push(block);
 | 
					      blocks.push(cleanBlock);
 | 
				
			||||||
      fromHeight++;
 | 
					      fromHeight++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ class BlocksRepository {
 | 
				
			|||||||
        pool_id,            fees,                fee_span,          median_fee,
 | 
					        pool_id,            fees,                fee_span,          median_fee,
 | 
				
			||||||
        reward,             version,             bits,              nonce,
 | 
					        reward,             version,             bits,              nonce,
 | 
				
			||||||
        merkle_root,        previous_block_hash, avg_fee,           avg_fee_rate,
 | 
					        merkle_root,        previous_block_hash, avg_fee,           avg_fee_rate,
 | 
				
			||||||
        median_timestamp,   block_time,          header,            coinbase_address,
 | 
					        median_timestamp,   header,              coinbase_address,
 | 
				
			||||||
        coinbase_signature, utxoset_size,        utxoset_change,    avg_tx_size,
 | 
					        coinbase_signature, utxoset_size,        utxoset_change,    avg_tx_size,
 | 
				
			||||||
        total_inputs,       total_outputs,       total_input_amt,   total_output_amt,
 | 
					        total_inputs,       total_outputs,       total_input_amt,   total_output_amt,
 | 
				
			||||||
        fee_percentiles,    segwit_total_txs,    segwit_total_size, segwit_total_weight,
 | 
					        fee_percentiles,    segwit_total_txs,    segwit_total_size, segwit_total_weight,
 | 
				
			||||||
@ -34,7 +34,7 @@ class BlocksRepository {
 | 
				
			|||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
        FROM_UNIXTIME(?), ?, ?, ?,
 | 
					        FROM_UNIXTIME(?), ?, ?,
 | 
				
			||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
        ?, ?, ?, ?,
 | 
					        ?, ?, ?, ?,
 | 
				
			||||||
@ -63,7 +63,6 @@ class BlocksRepository {
 | 
				
			|||||||
        block.extras.avgFee,
 | 
					        block.extras.avgFee,
 | 
				
			||||||
        block.extras.avgFeeRate,
 | 
					        block.extras.avgFeeRate,
 | 
				
			||||||
        block.extras.medianTimestamp,
 | 
					        block.extras.medianTimestamp,
 | 
				
			||||||
        block.extras.blockTime,
 | 
					 | 
				
			||||||
        block.extras.header,
 | 
					        block.extras.header,
 | 
				
			||||||
        block.extras.coinbaseAddress,
 | 
					        block.extras.coinbaseAddress,
 | 
				
			||||||
        block.extras.coinbaseSignature,
 | 
					        block.extras.coinbaseSignature,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user