Merge branch 'master' into mononaut/blockchain-scroll
This commit is contained in:
		
						commit
						0bde0dd4ed
					
				
							
								
								
									
										3
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@ -99,3 +99,6 @@ jobs:
 | 
			
		||||
      - name: Build
 | 
			
		||||
        run: npm run build
 | 
			
		||||
        working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend
 | 
			
		||||
        env: 
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -171,7 +171,9 @@ class Blocks {
 | 
			
		||||
 | 
			
		||||
  private convertLiquidFees(block: IBitcoinApi.VerboseBlock): IBitcoinApi.VerboseBlock {
 | 
			
		||||
    block.tx.forEach(tx => {
 | 
			
		||||
      tx.fee = Object.values(tx.fee || {}).reduce((total, output) => total + output, 0);
 | 
			
		||||
      if (!isFinite(Number(tx.fee))) {
 | 
			
		||||
        tx.fee = Object.values(tx.fee || {}).reduce((total, output) => total + output, 0);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    return block;
 | 
			
		||||
  }
 | 
			
		||||
@ -877,7 +879,7 @@ class Blocks {
 | 
			
		||||
 | 
			
		||||
    let height = blockHeight;
 | 
			
		||||
    let summary: BlockSummary;
 | 
			
		||||
    if (cpfpSummary) {
 | 
			
		||||
    if (cpfpSummary && !Common.isLiquid()) {
 | 
			
		||||
      summary = {
 | 
			
		||||
        id: hash,
 | 
			
		||||
        transactions: cpfpSummary.transactions.map(tx => {
 | 
			
		||||
 | 
			
		||||
@ -35,6 +35,13 @@ class TransactionUtils {
 | 
			
		||||
    } else {
 | 
			
		||||
      transaction  = await bitcoinApi.$getRawTransaction(txId, false, addPrevouts, lazyPrevouts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Common.isLiquid()) {
 | 
			
		||||
      if (!isFinite(Number(transaction.fee))) {
 | 
			
		||||
        transaction.fee = Object.values(transaction.fee || {}).reduce((total, output) => total + output, 0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (addMempoolData || !transaction?.status?.confirmed) {
 | 
			
		||||
      return this.extendMempoolTransaction(transaction);
 | 
			
		||||
    } else {
 | 
			
		||||
@ -52,8 +59,7 @@ class TransactionUtils {
 | 
			
		||||
      // @ts-ignore
 | 
			
		||||
      return transaction;
 | 
			
		||||
    }
 | 
			
		||||
    const feePerVbytes = Math.max(Common.isLiquid() ? 0.1 : 1,
 | 
			
		||||
      (transaction.fee || 0) / (transaction.weight / 4));
 | 
			
		||||
    const feePerVbytes = (transaction.fee || 0) / (transaction.weight / 4);
 | 
			
		||||
    const transactionExtended: TransactionExtended = Object.assign({
 | 
			
		||||
      vsize: Math.round(transaction.weight / 4),
 | 
			
		||||
      feePerVsize: feePerVbytes,
 | 
			
		||||
@ -68,13 +74,11 @@ class TransactionUtils {
 | 
			
		||||
  public extendMempoolTransaction(transaction: IEsploraApi.Transaction): MempoolTransactionExtended {
 | 
			
		||||
    const vsize = Math.ceil(transaction.weight / 4);
 | 
			
		||||
    const fractionalVsize = (transaction.weight / 4);
 | 
			
		||||
    const sigops = this.countSigops(transaction);
 | 
			
		||||
    const sigops = Common.isLiquid() ? this.countSigops(transaction) : 0;
 | 
			
		||||
    // https://github.com/bitcoin/bitcoin/blob/e9262ea32a6e1d364fb7974844fadc36f931f8c6/src/policy/policy.cpp#L295-L298
 | 
			
		||||
    const adjustedVsize = Math.max(fractionalVsize, sigops *  5); // adjusted vsize = Max(weight, sigops * bytes_per_sigop) / witness_scale_factor
 | 
			
		||||
    const feePerVbytes = Math.max(Common.isLiquid() ? 0.1 : 1,
 | 
			
		||||
      (transaction.fee || 0) / fractionalVsize);
 | 
			
		||||
    const adjustedFeePerVsize = Math.max(Common.isLiquid() ? 0.1 : 1,
 | 
			
		||||
      (transaction.fee || 0) / adjustedVsize);
 | 
			
		||||
    const feePerVbytes = (transaction.fee || 0) / fractionalVsize;
 | 
			
		||||
    const adjustedFeePerVsize = (transaction.fee || 0) / adjustedVsize;
 | 
			
		||||
    const transactionExtended: MempoolTransactionExtended = Object.assign(transaction, {
 | 
			
		||||
      order: this.txidToOrdering(transaction.txid),
 | 
			
		||||
      vsize: Math.round(transaction.weight / 4),
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								contributors/pedromvpg.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								contributors/pedromvpg.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of July 20, 2023.
 | 
			
		||||
 | 
			
		||||
Signed: pedromvpg
 | 
			
		||||
@ -144,10 +144,12 @@ export class BlockComponent implements OnInit, OnDestroy {
 | 
			
		||||
        for (const block of blocks) {
 | 
			
		||||
          if (block.id === this.blockHash) {
 | 
			
		||||
            this.block = block;
 | 
			
		||||
            block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
            block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
            if (block?.extras?.reward != undefined) {
 | 
			
		||||
              this.fees = block.extras.reward / 100000000 - this.blockSubsidy;
 | 
			
		||||
            if (block.extras) {
 | 
			
		||||
              block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
              block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
              if (block?.extras?.reward != undefined) {
 | 
			
		||||
                this.fees = block.extras.reward / 100000000 - this.blockSubsidy;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          } else if (block.height === this.block?.height) {
 | 
			
		||||
            this.block.stale = true;
 | 
			
		||||
@ -246,8 +248,10 @@ export class BlockComponent implements OnInit, OnDestroy {
 | 
			
		||||
        }
 | 
			
		||||
        this.updateAuditAvailableFromBlockHeight(block.height);
 | 
			
		||||
        this.block = block;
 | 
			
		||||
        block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
        block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
        if (block.extras) {
 | 
			
		||||
          block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
          block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
        }
 | 
			
		||||
        this.blockHeight = block.height;
 | 
			
		||||
        this.lastBlockHeight = this.blockHeight;
 | 
			
		||||
        this.nextBlockHeight = block.height + 1;
 | 
			
		||||
 | 
			
		||||
@ -113,8 +113,10 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy {
 | 
			
		||||
          const animate = this.chainTip != null && latestHeight > this.chainTip;
 | 
			
		||||
 | 
			
		||||
          for (const block of blocks) {
 | 
			
		||||
            block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
            block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
            if (block?.extras) {
 | 
			
		||||
              block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
              block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          this.blocks = blocks;
 | 
			
		||||
@ -251,7 +253,7 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy {
 | 
			
		||||
      if (height >= 0) {
 | 
			
		||||
        this.cacheService.loadBlock(height);
 | 
			
		||||
        block = this.cacheService.getCachedBlock(height) || null;
 | 
			
		||||
        if (block) {
 | 
			
		||||
        if (block?.extras) {
 | 
			
		||||
          block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
          block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
        }
 | 
			
		||||
@ -293,8 +295,10 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy {
 | 
			
		||||
  onBlockLoaded(block: BlockExtended) {
 | 
			
		||||
    const blockIndex = this.height - block.height;
 | 
			
		||||
    if (blockIndex >= 0 && blockIndex < this.blocks.length) {
 | 
			
		||||
      block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
      block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
      if (block?.extras) {
 | 
			
		||||
        block.extras.minFee = this.getMinBlockFee(block);
 | 
			
		||||
        block.extras.maxFee = this.getMaxBlockFee(block);
 | 
			
		||||
      }
 | 
			
		||||
      this.blocks[blockIndex] = block;
 | 
			
		||||
      this.blockStyles[blockIndex] = this.getStyleForBlock(block, blockIndex);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -84,10 +84,10 @@ export class BlocksList implements OnInit {
 | 
			
		||||
        .pipe(
 | 
			
		||||
          switchMap((blocks) => {
 | 
			
		||||
            if (blocks[0].height <= this.lastBlockHeight) {
 | 
			
		||||
              return [null]; // Return an empty stream so the last pipe is not executed
 | 
			
		||||
              return of([]); // Return an empty stream so the last pipe is not executed
 | 
			
		||||
            }
 | 
			
		||||
            this.lastBlockHeight = blocks[0].height;
 | 
			
		||||
            return blocks;
 | 
			
		||||
            return of(blocks);
 | 
			
		||||
          })
 | 
			
		||||
        )
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,8 @@ try {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const githubSecret = process.env.GITHUB_TOKEN;
 | 
			
		||||
 | 
			
		||||
function download(filename, url) {
 | 
			
		||||
  https.get(url, (response) => {
 | 
			
		||||
    if (response.statusCode < 200 || response.statusCode > 299) {
 | 
			
		||||
@ -55,6 +57,12 @@ function downloadMiningPoolLogos$() {
 | 
			
		||||
      headers: {'user-agent': 'node.js'}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (githubSecret) {
 | 
			
		||||
      console.log('Downloading the mining pool logos with authentication');
 | 
			
		||||
      options.headers['authorization'] = `Bearer ${githubSecret}`;
 | 
			
		||||
      options.headers['X-GitHub-Api-Version'] = '2022-11-28';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    https.get(options, (response) => {
 | 
			
		||||
      const chunks_of_data = [];
 | 
			
		||||
 | 
			
		||||
@ -109,6 +117,13 @@ function downloadPromoVideoSubtiles$() {
 | 
			
		||||
      headers: {'user-agent': 'node.js'}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (githubSecret) {
 | 
			
		||||
      console.log('Downloading the promo video subtitles with authentication');
 | 
			
		||||
      options.headers['authorization'] = `Bearer ${githubSecret}`;
 | 
			
		||||
      options.headers['X-GitHub-Api-Version'] = '2022-11-28';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    https.get(options, (response) => {
 | 
			
		||||
      const chunks_of_data = [];
 | 
			
		||||
 | 
			
		||||
@ -163,6 +178,12 @@ function downloadPromoVideo$() {
 | 
			
		||||
      headers: {'user-agent': 'node.js'}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (githubSecret) {
 | 
			
		||||
      console.log('Downloading the promo videos with authentication');
 | 
			
		||||
      options.headers['authorization'] = `Bearer ${githubSecret}`;
 | 
			
		||||
      options.headers['X-GitHub-Api-Version'] = '2022-11-28';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    https.get(options, (response) => {
 | 
			
		||||
      const chunks_of_data = [];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user